Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Рассчитать последовательность выдаваемую генератором случайных чисел

Холодно Однако Ученик (89), открыт 6 часов назад
Пожалуйста помогите с помощью программы вычислить последовательность и продолжить ряд чисел, которую выдает генератор случайных чисел. Всего возможных чисел шесть, это 0, 20, 40, 100, 120 и 500. Сейчас имеется последовательность из чисел: 20, 20, 40, 500, 100, 40, 100, 100, 100, 40, 100, 0, 100, 120, 40, 120, 20, 20, 120, 20, 120, 120, 100, 100, 20, 100, 20, 40, 20, 40, 120, 120, 20, 120, 40, 20, 20, 20, 20, 120, 20, 20, 500, 20, 120, 20, 40, 100, 40, 500...
Возможно ли на их основе с помощью какого нибудь программы вычислителя продолжить последовательность? Всего тут в данный момент 50 чисел, прошу помочь!!
5 ответов
Andrey Idk Знаток (402) 6 часов назад
Нельзя там рандом
Холодно ОднакоУченик (89) 6 часов назад
Это не рандом
Vadim Egorov Мыслитель (5732) 6 часов назад
Конечно, я помогу разобраться! Давай шаг за шагом разберём программу на **PascalABC**, чтобы было понятно, как она работает и что с ней можно делать. Если что-то остаётся непонятным, напиши, я объясню более подробно или адаптирую программу под твои нужды.

### 1. **Что делает программа**
Она анализирует последовательность чисел, определяет вероятность каждого числа (0, 20, 40, 100, 120, 500) и использует эти вероятности, чтобы продолжить последовательность на несколько шагов вперёд.

### 2. **Как её запустить**
Программа написана на **PascalABC.NET** — это бесплатная и простая среда для работы с Pascal. Вот что нужно сделать:
- Скачай и установи **PascalABC.NET** с официального сайта: [pascalabc.net](https://pascalabc.net/).
- Скопируй текст программы в редактор PascalABC.
- Нажми **F9** или кнопку **"Выполнить"**, чтобы запустить программу.

### 3. **Где адаптировать программу**
Если нужно изменить длину последовательности или количество предсказываемых чисел, ищи эти строки:
```pascal
const
SequenceLength = 50; // длина начальной последовательности
PredictionLength = 20; // сколько чисел предсказать
```
Ты можешь заменить `50` на длину своей последовательности, а `20` — на нужное количество чисел для предсказания.

### 4. **Упрощённое объяснение программы**
- **Считает частоты**: Подсчитывается, как часто встречается каждое число.
- **Рассчитывает вероятности**: Например, если `20` встречается 10 раз из 50, его вероятность будет 0.2.
- **Генерирует новые числа**: Используя вероятность, программа случайным образом добавляет числа в конец последовательности.

### 5. **Что делать, если запутался?**
Давай сделаем так:
- Напиши, какой шаг вызывает трудности. Я могу адаптировать код или помочь с его настройкой.
- Если хочешь, чтобы я помог конкретно с твоей задачей, можешь уточнить детали, и я переработаю программу под твои нужды.

Ты справишься! Если хочешь, я могу сделать ещё более подробный пошаговый гид.
Холодно ОднакоУченик (89) 6 часов назад
Блен, я оч плохо понимаю в программировании, мог бы помочь пожалуйста? Это кстати из чата жпт ответ?
Vadim Egorov Мыслитель (5732) Холодно Однако, да, я сейчас обновлю ответ
Андрей Высший разум (460615) 6 часов назад
Похоже, ты не понимаешь, как работают генераторы случайных чисел.

Вихрь Мерсенна (самый популярный на данный момент алгоритмический ГСЧ) имеет период 4,3∙10⁶⁰⁰¹ чисел. И даже если соберёшь не 50, а 50 миллионов чисел, не сможешь понять, в каком месте этого периода ты находишься. А без этого невозможно предсказать следующие числа.

Если же используется криптографический ГСЧ (в котором к алгоритмическому случайному числу примешиваются биты, генерируемые аппаратным генератором случайных битов, встроенным в любой современный процессор), то предсказать числа в принципе невозможно.
Холодно ОднакоУченик (89) 6 часов назад
Ну я читал, что это невозможно, но вот действительно ли оно так, надеялся что есть какая либо вероятность
А то есть это не зависит от того каких числа имеются в последовательности? Я бы мог понять, если это были все натуральные допустим, но тут всего 6 повторяющихся, или это никак не упрощает?
Андрей Высший разум (460615) Холодно Однако, Это никак не упрощает. Наоборот, только усложняет. Генератор выдаёт числа во всём доступном диапазоне чисел (2³² или 2⁶⁴) и ты получаешь не реальные значения, выданные генератором, а результат преобразования случайных чисел. Т.е. в твоём случае диапазон 2³² или 2⁶⁴ делится на 6 частей и ты получаешь код той части диапазона, которой принадлежит очередное случайное число (код - это те самые 0, 20, 40, 100, 120, 500).
Холодно ОднакоУченик (89) 6 часов назад
Очень жалко, ну ладно, спасибо
Вася Б Мастер (1452) 6 часов назад
Когда то давно будучи в школе на QBasic написал программу которая по идее на основе генератора случайных чисел должна была имитировать белый шум монитора. Но она упорно выдавала косую линию. Так что случайные числа не случайны...
АндрейВысший разум (460615) 6 часов назад
Кто в современном мире использует линейный конгруэнтный метод, бывший популярным во времена QBasic?
GGG Просветленный (34824) 6 часов назад
 # Step 1: Input the sequence 
sequence = [
20, 20, 40, 500, 100, 40, 100, 100, 100, 40, 100, 0, 100, 120, 40,
120, 20, 20, 120, 20, 120, 120, 100, 100, 20, 100, 20, 40, 20, 40,
120, 120, 20, 120, 40, 20, 20, 20, 20, 120, 20, 20, 500, 20, 120,
20, 40, 100, 40, 500
]

# Step 2: Calculate frequency of each number
from collections import Counter

frequency = Counter(sequence)
print("Frequency of each number:")
for number, count in frequency.items():
print(f"{number}: {count} times")

# Step 3: Build a Markov Chain model
from collections import defaultdict

# Dictionary to hold counts of transitions
transitions = defaultdict(lambda: defaultdict(int))

# Populate the transition counts
for i in range(len(sequence)-1):
current = sequence[i]
next_num = sequence[i+1]
transitions[current][next_num] += 1

# Convert counts to probabilities
transition_prob = {}
for current in transitions:
total = sum(transitions[current].values())
probs = {next_num: count / total for next_num, count in transitions[current].items()}
transition_prob[current] = probs

# Step 4: Predict the next number
last_number = sequence[-1]
if last_number in transition_prob:
next_probs = transition_prob[last_number]
# Choose the next number based on probabilities
import random
next_number = random.choices(
list(next_probs.keys()),
weights=list(next_probs.values()),
k=1
)[0]
else:
# If no transitions from last_number, choose randomly based on overall frequency
next_number = random.choices(
list(frequency.keys()),
weights=list(frequency.values()),
k=1
)[0]

print(f"Predicted next number: {next_number}")
Похожие вопросы