Очевидно, что случайные числа нельзя выработать, используя определённый алгоритм. Однако можно создать такую последовательность чисел, которая будет приближать многие свойства случайных чисел. Такие числа называются псевдослучайными. Впервые предложил их использовать Джон фон Нейман в 1946 г. Его метод состоял в следующем: n-разрядное число возводилось в квадрат и из него выбирались средние n чисел. Метод был очень несовершенен, последовательности почти всегда вырождались в 0 или зацикливались с коротким периодом. Позднее было предложено много различных алгоритмов выработки псевдослучайных чисел. Вот наиболее простые из них. 1. Линейный конгруэнтный метод.Предложен Д. Х. Лемером. Основная вычислительная формула: 2. "Mother-of-All" random number generator.Предложен Джорджем Марсальей(Marsaglia), профессором университета Флориды, США. Вычислительная формула: Этот алгоритм является обобщением предыдущего и избавлен от главного недостатка предыдущего метода, короткого периода.
Здесь период имеет порядок 3. Mersenne Twister.Предложен Макутой Матсумотой и Такеджи Нушимирой. Основная идея заключачается
в том, что к начальной(инициирующей) применяется серия битовых операций. После их выполнения получается новая последовательность,
первый член которой считается псевдослучайным числом. Последовательность имеет большую размерность(624 элемента),
поэтому период генератора равен 4. Генераторы типа "Xorshift".Одни из самых новых генераторов от Джорджа Марсальи. Опять рассматривается
некоторая начальная последовательность, к которой применяются операции "Xorshift". Эти операции
заключаются в следующем:
x[i] := x[i] xor (x[i] shl{или shr} a). Итоговое случайное число может
быть получено при помощи суммирования отдельных членов последовательности, либо применения к
ним операции xor. В настоящее время это один из самых используемых алгоритмов, вырабатываемая последовательность
достаточно случайна, периоды - от 5. Другие генераторы.Можно придумать ещё много других генераторов псевдослучайных чисел, но большой интерес могут представлять комбинации уже представленных методов. В разделе программы размещён алгоритм "KISS", полученный в результате комбинации линейного конгруэнтного алгоритма, алгоритма Фибоначчи с запаздываниями и алгоритма "Xorshift". Данный алгоритм используется в игровой индустрии Северной Америки и Австралии. Подробнее о выработке псевдослучайных чисел можно узнать в книге Д. Кнута "Искусство программирования. Том 2." и работах Джорджа Марсальи. |