Введение
Генераторы случайных чисел важны во многих областях технических приложений, включая физику, инженерию и математические компьютерные исследования (например, методы Монте-Карло), криптографию и азартные игры (на игровых серверах). Этот список охватывает множество распространенных типов, вне зависимости от их качества или пригодности для конкретной задачи.
Random number generators are important in many kinds of technical applications, including physics, engineering or mathematical computer studies (e. g., Monte Carlo simulations), cryptography and gambling (on game servers). This list includes many common types, regardless of quality or applicability to a given use case.
генераторы псевдослучайных чисел (PRNG)
Следующие алгоритмы являются генераторами псевдослучайных чисел. GeneratorDateПервые сторонникиReferencesNotesМетод среднего квадрата1946J. von NeumannВ своей первоначальной форме имеет низкое качество и представляет лишь исторический интерес. Генератор Лемера1951D. H. LehmerОдин из самых ранних и наиболее влиятельных алгоритмов. Линейный конгруэнтный генератор (LCG)1958W. E. Thomson; A. RotenbergОбобщение генератора Лемера и исторически наиболее влиятельный и изученный генератор. Генератор Фибоначчи с запаздыванием (LFG)1958G. J. Mitchell и D. P. MooreРегистр сдвигов с линейной обратной связью (LFSR)1965R. C. TauswortheЧрезвычайно влиятельный алгоритм. Также называются генераторами Таусворта. Генератор Вихмана-Хилла1982B. A. Wichmann и D. I. HillКомбинация из трех небольших LCG, подходящая для 16-битных процессоров. Широко используется во многих программах, например, в Excel 2003 и более поздних версиях для функции Excel RAND, и был генератором по умолчанию в языке Python до версии 2.2. Правило 301983S. WolframОснован на клеточных автоматах. Инверсионный конгруэнтный генератор (ICG)1986J. Eichenauer и J. LehnBlum Blum Shub1986M. Blum, L. Blum и M. ShubBlum Blum Shub — это алгоритм ГПСЧ, который считается криптографически безопасным. Его основа основана на простых числах. Генератор Парка-Миллера1988S. K. Park и K. W. MillerКонкретная реализация генератора Лемера, широко используемая, поскольку она включена в C++ как функция minstd_rand0 начиная с C++11. ACORN generator1989 (открыт в 1984) R. S. WikramaratnaАддитивный конгруэнтный генератор случайных чисел. Прост в реализации, быстр, но не широко известен. При соответствующих инициализациях проходит все текущие эмпирические тесты и формально доказано, что сходится. Легко расширяется для произвольной длины периода и улучшает статистические характеристики в более высоких измерениях и с большей точностью. Генератор MIXMAX1991G. K. Savvidy и N. G. Ter Arutyunyan SavvidyЯвляется членом класса матричных линейных конгруэнтных генераторов, обобщением LCG. Обоснование семейства генераторов MIXMAX основано на результатах эргодической теории и классической механики. Добавление с переносом (AWC)1991G. Marsaglia и A. ZamanМодификация генераторов Фибоначчи с запаздыванием. Вычитание с заимствованием (SWB)1991G. Marsaglia и A. ZamanШироко используется, например, для моделирования физики частиц. Максимально периодические обратные величины1992R. A. J. MatthewsМетод, основанный на теории чисел, хотя никогда не использовался в практических приложениях. KISS1993G. MarsagliaПрототипический пример комбинированного генератора. Умножение с переносом (MWC)1994G. Marsaglia; C. KoçДополнительное умножение с переносом (CMWC)1997R. Couture и P. L’EcuyerМерсенн Твистер (MT)1998M. Matsumoto и T. NishimuraТесно связан с LFSR. В реализации MT19937, вероятно, является наиболее часто используемым современным ГПСЧ. Генератор по умолчанию в R и языке Python, начиная с версии 2.3. Xorshift2003G. MarsagliaЭто очень быстрый подтип генераторов LFSR. Марсалья также предложил в качестве улучшения генератор xorwow, в котором выход генератора xorshift добавляется к последовательности Вейля. Генератор xorwow является генератором по умолчанию в библиотеке CURAND интерфейса программирования приложений nVidia CUDA для графических процессоров. Хорошо равнораспределенный линейный генератор с длинным периодом (WELL)2006F. Panneton, P. L'Ecuyer и M. MatsumotoLFSR тесно связан с Мерсенном Твистером, направлен на устранение некоторых его недостатков. Небольшой некриптографический ГПСЧ (JSF)2007Bob JenkinsAdvanced Randomization System (ARS)2011J. Salmon, M. Moraes, R. Dror и D. ShawУпрощенная версия блочного шифра AES, обеспечивающая очень высокую производительность в системах, поддерживающих AES NI. Threefry2011J. Salmon, M. Moraes, R. Dror и D. ShawПериодические генераторы псевдослучайных чисел, основанные на технике бесконечных слов. SplitMix2014G. L. Steele, D. Lea и C. H. FloodОснован на окончательной функции смешивания MurmurHash3. Включен в Java Development Kit 8 и выше. Пермутированный конгруэнтный генератор (PCG)2014M. E. O'NeillМодификация LCG. Генератор случайных битов с циклом (RCB)2016R. CookmanRCB описывается как генератор битовых шаблонов, созданный для преодоления некоторых недостатков Мерсенна Твистера и ограничений коротких периодов/длины битов генераторов сдвига/модуля. ГПСЧ средней квадратной последовательности Вейла (см. также метод среднего квадрата)2017B. WidynskiВариация на оригинальном методе среднего квадрата Джона фон Неймана, этот генератор может быть самым быстрым ГПСЧ, который проходит все статистические тесты. Xoroshiro128+2018D. Blackman, S. VignaМодификация генераторов Xorshift Марсальи, один из самых быстрых генераторов на современных 64-битных процессорах. Связанные генераторы включают xoroshiro128**, xoshiro256+ и xoshiro256**. 64-битный MELG (MELG 64)2018S. Harase, T. KimotoРеализация 64-битных максимально равнораспределенных F2 линейных генераторов с периодом Мерсенна. Squares RNG2020B. WidynskiВерсия на основе счетчика ГПСЧ средней квадратной последовательности Вейла. Подобен Philox по конструкции, но значительно быстрее.