Случайность, это события, идущие по чужому плану. (Рудольф Гесс, заметки на полях мемуаров Т. Рузвельта)
Теория
Насколько случайны случайные числа в вычислительной технике? Обычно не случайны. Все из-за того, что создать случайную последовательность нельзя, так как при создании используется некий алгоритм, трансформирующий начальное состояние в случайное число. В данной лабораторной работе будет разрабатываться и тестироваться генератор псевдослучайных чисел. ГПСЧ - алгоритм, позволяющий создать случайную последовательность чисел (в двоичном представлении, в виде дроби или в целом формате). Как создать ГПСЧ? Прогнозируемый алгоритм создать достаточно просто, например, постоянно деля основное число на дополнительное, после сохраняя результат (нормализированное) в основное, а дополнительно как-то меняя.
Простой способ:
seed = 123486
seed = 375123611 * seed + 13671323
res = seed % 416252 % 10
2 1 4 1 0 3 4 5 8 1
Однако нередко в таком генераторе возникают проблемы с очень частым появлением одного числа или же возможностью прогнозирования
следующего числа (например, после 1 2 3
с высоким шансом идет последовательность 4 5
), а прогнозов для ГПСЧ, по идее, не должно быть.
Задача
Данная лабораторная нацелена на создание программы, потому только алгоритм оцениваться не будет.
1 часть
От вас требуется создать генератор псевдослучайных чисел. Можете воспользоваться любым алгоритмом, однако встроенные функции случайных чисел использовать нельзя. Объясните почему вы выбрали именно такой алгоритм и коэффициенты для него. Генератор должен возвращать значения от 0 до 9 включительно.
2 часть
Соберите статистику с генератора, определите частоту получения значений, а также вероятность получения следующего значения. Вывод:
0 1 2 3 4 5 6 7 8 9
0 10.9 10.1 9.7 8.4 8.6 11.4 10.4 11.4 8.6 10.5
1 10.1 10.0 9.8 9.9 11.0 10.4 9.4 9.9 9.3 10.2
2 8.6 10.7 9.7 10.2 9.7 10.2 10.5 10.6 8.6 11.2
3 9.5 9.2 10.4 10.8 9.6 9.2 10.1 10.9 10.4 9.9
4 9.4 9.9 9.7 11.9 10.9 10.3 8.3 9.3 9.8 10.5
5 12.0 10.5 10.1 8.1 9.9 9.2 10.0 10.5 10.8 8.9
6 9.7 10.2 10.0 10.7 11.0 9.5 10.0 10.0 8.9 10.0
7 10.0 9.8 8.8 11.1 9.4 9.6 10.4 11.6 11.4 7.9
8 8.3 10.2 7.5 10.6 10.7 10.1 9.6 11.5 10.6 10.9
9 9.1 10.4 10.1 8.6 11.3 9.1 11.1 11.1 9.6 9.6
Если форматирование таблицы оставите в таком же виде, то это хорошо, но подуймате и над другими форматами. В данной таблице: на каждое значение выделяется 5 символов, точность 1 или 2. Чем выше случайность, тем выше оценка. Выборка (или количество последовательно полученных случайных чисел) должна быть длиной больше 1000.
Под статистикой подразумевается не только таблица выше, но и данные, которые помогут определить насколько рандомна ваша последовательность.
3 часть
Финальным заданием является подстройка генератора, делая его более случайным. Алгоритм может варьироваться. Кроме программы также требуется объяснить алгоритм максимально подробно. Хорошим дополнением будет анализ не только следующего числа, но и последующего. Возможно, стоит в зависимости от уже проанализированных чисел выбирать следующее. Сюда также входит анализ статистики.