Дай миллион! или Где взять истинно случайные числа?

Рейтинг: 2Ответов: 4Опубликовано: 23.03.2015

Нужен ровно миллион случайных чисел. В принципе, точность 1/256 меня устраивает, поэтому вопрос можно перефразировать: где взять миллион случайных байт? Не псевдослучайных, а именно случайных. Хотел скачать на random.org, там как раз выкладывают файлы объемом мегабайт каждый день. Мне нужен один, всего один такой файл, от любой даты. Мне этого хватит на всю жизнь (специфика программы такова, что между запусками последовательность может повторяться, главное чтобы "внутри" она была полностью случайная). А там не дают. :(

У меня даже такая мысль была. Берем первый попавшийся достаточно большой файл (iso-образ дистрибутива винды, например). Режем на миллион частей. Каждая часть получится около двух килобайт - вполне достаточно, ИМХО. Для каждой части высчитываем md5. Вот миллион случайных чисел, причем с точностью не 1/256, а 2^-128, что даже слишком круто. ;) Что думаете?

Ответы

▲ 10Принят

Возьмите первый миллион байт числа Пи : )

upd. поможет формула BBP и, к примеру, код на C.

upd.2. про случайность цифр в Пи и пр. фундаментальных константах.

▲ 5
  1. В добавок к своему комментарию. Корреляционный анализ вы не выполняете, хотя утверждаете, что ваши числа недостаточно случайны.
  2. Допустим, это не так, но ваш подход во взятии хэша куска большого файла самое плохое, что можно только представить. Тот же md5 имеет провалы в спектре.
  3. Ни одним алгоритмом вы не построите истинно случайные числа.
  4. Советую вам поискать специализированную литературу по этому вопросу. Я уверен, там вы точно найдете алгоритм, наиболее точно подходящий к вашей задаче (скорость + корреляция).
▲ 3

Была и такая мысль. Только червь сомнения гложет: полностью ли эти 16-килобайтные куски независимы друг от друга? А вдруг надо ждать сутки между скачиваниями, чтобы получить разные куски?

Чтобы проверить это, нужно взять и протестить эти наборы. Для этого разработано куча тестов и методик.

В целом, откройте второй том Кнута и читайте всю третью главу. Там разбирается:

  • Генерирование равномерно распределенных случайных чисел (включая много разных методик).
  • Статистические критерии (для проверки, что последовательность действительно случайная).

Я сильно сомневаюсь, что на random.org или где-то ещё придумали что-то сильно лучше (ну кроме диода Шоттки с замером тепловых шумов) и их критерии проверки случайных чисел чем-то отличаются.

Также можно поискать книгу "Занимательные проекты на базе микроконтроллеров tinyAVR Гадре Д.", где описано, как на базе диода Шоттки +avr контроллер сделать тот самый генератор. Ещё немного доработки - и он будет выдавать их в usb порт (а там их можно читать для своих нужд).

▲ 2

Возьми сделай массив записей по порядку, а потом его "размешай"(php), можешь кусками брать и вставлять в бд.

Вот тебе и миллион случайных чисел.