генерация случайных чисел как? - PullRequest
1 голос
/ 03 августа 2011

Мне было интересно, как работают функции случайных чисел. Я имею в виду, используется ли серверное время или какие другие методы используются для генерации случайных чисел? Они действительно случайные числа или они склоняются к определенной схеме? Допустим, в Python:

import random
number = random.randint(1,10)

Ответы [ 4 ]

1 голос
/ 03 августа 2011

В зависимости от вашего фона вам может понравиться Числовые рецепты . Я физик и мне очень нравится эта книга (хотя математики иногда писать плохие вещи об этом, он дает хорошие обзоры на многие темы).

См. Главу 7 для хорошего введения в случайные числа.

1 голос
/ 03 августа 2011

Его генератор псевдослучайных чисел, точная работа зависит от реализации, но я предполагаю, что это своего рода реализация Мерсен-Твистера: http://docs.python.org/library/random.html (Третий абзац)

О, и точная функцияrandint построен на базе random функции.Random возвращает действительное число из диапазона (0,1], а randint(a,b) возвращает целое число из диапазона [a, b] и может быть реализовано как lambda a,b: int(a + random.random()*(b+1-a))

1 голос
/ 03 августа 2011

Да, время обычно используется для заполнения генератора случайных чисел, когда не важно, чтобы числа были непредсказуемыми.Например, если вы отображаете случайные изображения в слайд-шоу, то это хорошее время для использования, чтобы последовательность изображений не была такой же, как в следующий раз, когда вы запускаете слайд-шоу.время известно всем с высокой степенью точности, это было бы ужасным семенем для криптографических целей.Netscape использовал этот метод , и было показано, что он уязвим для атаки.В настоящее время безопасные случайные числа генерируются с использованием энтропии, собираемой такими устройствами, как движение мыши и микрофонный вход.«Безголовые» сетевые устройства используют характеристики своего сетевого трафика в качестве более или менее непредсказуемого источника энтропии.Для действительно специальных приложений иногда используются аппаратные источники случайности, такие как камеры и счетчики Гейгера.В системах Unix вы можете получить безопасные случайные числа из / dev / random, и он заблокируется, если не будет «достаточно энтропии» (оцениваемой через счетчик), чтобы гарантировать безопасную случайность.

1 голос
/ 03 августа 2011

Генераторы случайных чисел различаются (конечно) в зависимости от платформы, но в целом это только «псевдослучайные» числа.То есть «случайные» числа генерируются алгоритмом, выбранным для обеспечения достаточно равномерного распределения чисел со статистическим распределением, аналогичным тому, которое можно ожидать от истинной случайности.Эти генераторы случайных чисел обычно принимают начальное значение, которое используется для инициации «последовательности»;обычно одно и то же «начальное» значение возвращает одно и то же «случайное» число (что указывает на то, что оно на самом деле не является «случайным»).функция с быстро меняющимся числом, таким как время (в тиках) от машины или другие изменяющиеся начальные значения.Однако это не меняет того факта, что эти «случайные» числа на самом деле не случайны;однако для большинства целей их можно считать «достаточно хорошими».

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

...