Подтвердить что ты не робот

Есть ли генератор псевдослучайных чисел, достаточно простой в вашей голове?

Существуют ли генераторы псевдослучайных чисел, которые достаточно легки для умственной арифметики или умственной арифметики плюс подсчет ваших пальцев. Очевидно, что это ограничивается довольно простой математикой - это должно быть то, что может сделать кто-то из средних математических способностей, или, может быть, средняя способность программиста, а не математическое вундеркинда.

Проще всего я нашел метод среднего квадрата, но не только он известен как плохой источник случайности, он все еще выглядит слишком сложно обойтись без карандаша и бумаги.

Если единственный способ сделать это - ограничить диапазон, например, может быть, он может выводить только 8-битные числа, это нормально. Я подозреваю, что один из стандартных алгоритмов PRNG будет достаточно прост в 8-битной версии, но я не знаю достаточно, чтобы упростить любой из них с 32-разрядной версии до 8-битной версии. (Все, на что я смотрел, зависят от специально выбранных семенных чисел, которые различаются в зависимости от того, сколько бит вы работаете, и обычно приводятся только 32 и 64-битные примеры.)

4b9b3361

Ответ 1

A линейный регистр сдвига обратной связи довольно прост, если вам комфортно думать в двоичном (или, возможно, в шестнадцатеричном виде, поскольку это легко для отображения между ними). ​​

Более сложным является Xorshift, но если вы знаете свои побитовые операции, с ним также должно быть возможно работать.

Ответ 3

Как насчет Blum Blum Shub, но с простыми числами слишком мал для безопасного использования? Он безопасно работает медленно, но он включает в себя операции, с которыми мы привыкли иметь дело, поэтому вы можете получить управляемую скорость без слишком большой практики, возможно, с M = 437 или умеренно больше.

Я сомневаюсь, что все, что я мог бы сделать в моей голове, будет в любом случае безопасным. Я просто не могу вспомнить достаточно большие числа, чтобы работать без ошибок в состоянии разумного размера.

Вы можете легко сделать 10 бит LFSR на ваших пальцах, если у вас есть приличные сухожилия; -)

Не прямой ответ, но в зависимости от того, о чем вы спрашиваете, может быть интересен Solitaire, который генерирует ключевой поток (т.е. псевдослучайная последовательность) с использованием колоды карт. Нельзя делать в голове, но не требует карандаша и бумаги.

Ответ 4

В вашей голове вы можете сделать "семантическое" генерирование случайных чисел: -)

Как и случайное слово, и вычисляя некоторую метрику из него, повторяйте, пока не получите число с разумной длиной.

Например, слово "упражнение" может быть преобразовано в 10100101b (здесь вы можете увидеть мою идею конверсии).

Ответ 5

Это довольно простой и должен соответствовать большинству людей:

  • Начните с трехзначного числа семян (поиск подходящего семени может быть сложнее).
  • Умножьте его на девять.
  • Отделите четвертую цифру от нижней три и добавьте два числа вместе для нового трехзначного числа.
  • Запишите эти цифры. Чтобы скрыть шаблон, вы можете записать всего одну или две цифры.
  • Повторите 2-4 по мере необходимости.

Пока вы не начинаете с нуля, это будет проходить через 4500 результатов. Выход не "выглядит" случайным, но он в десятичных и даже истинных случайных результатах не выглядит случайным, поэтому люди сосать эту задачу.

Я мог бы попытаться взломать программу, чтобы преобразовать ее в двоичный файл беспристрастно, чтобы протестировать ее.

Альтернативные конфигурации:

  • три цифры и умножьте на 3
  • четыре цифры и умножить на 6
  • пять цифр и умножить на 2

Ответ 6

Да, я знаю один, который можно сделать в вашей голове, и если изменение в дальнейшем может привести к тому, что по-настоящему случайные числа возьмут список чисел, упорядоченный список чисел в базе десять может быть проще всего рассчитать в. Добавьте их вместе, держите только те цифры, которые помещают номер этого результирующего числа, а затем поместите это в конец списка и оставьте первую цифру, а затем повторите, это не приведет к истинным случайным числам, но достаточно случайным и в зависимости от размера списка номеров, который вы решите использовать, в конце концов повторится, но для большого начального списка не будет повторяться в течение достаточно большого количества времени.

например, если я использовал только 5 чисел в списке 12345, тогда следующий список был бы 2345 и самая правая цифра из 1 + 2 + 3 + 4 + 5ie 15 или 5, чтобы список был 23455, теперь тот упал и не будет использоваться больше, поэтому следующая сумма добавит до 20 -1 (15 + 5 минус тот, который выпал), поэтому следующий список будет 34559, затем 45596, затем 55969, а затем 59694, здесь мы остановимся, потому что мы создали полные семена стоили цифр, так что изначально у нас было 12345.

Для следующего семени мы получили 59694, теперь есть своего рода ярлык, который вы также можете использовать, как только было рассчитано полное семя, или можно использовать ярлык, который вы берете последнюю цифру, умножайте ее на 2 и вычесть первую цифру, удваивая одну цифру, легко сделать в голове, важно помнить все остальные цифры и их порядок в последовательности, это будет в лучшем случае, хотя только производят псевдослучайные числа, с некоторым длинным повторением раз больший список номеров, которые вы используете, но исходный список должен быть выбран с осторожностью, например, не выбирайте все нули по мере того, как вы перечислите или у вас будет бесконечный поток нулей, и некоторые некоторые цифры будут выдаваться более длительные циклы повторения, чем другие (но, возможно, это должно быть сделано на бумаге, если у вас есть карандаш или ручка и лист бумаги под рукой...:) надеюсь, что это поможет... (немного изменив это, это делает начало очень хорошей истины генератор случайных чисел) пользуются...

Я надеюсь, что это лучше, если не тогда скажите мне так:) (Я никогда не был очень хорош на английском!:)

Ответ 7

Если не детерминированные алгоритмы разрешены, ваши глаза у вас в голове, так что о чем-то вроде "количество передовых предметов красного цвета плюс количество синих вещей по модулю количества зеленых вещей плюс высота самого высокого стек вещей, содержащих хотя бы одну вещь с буквами g и в верхнем регистре A на ней."

Я уверен, что есть способ сделать это, что на самом деле будет довольно случайным.

Ответ 8

Самый простой способ - создать несколько чисел, которые приходят вам в голову, а затем суммировать и поменять 10 всех цифр. Чем больше цифр вы добавите, тем более случайным и менее предвзятым будет.

510932
689275
539108
======
628205