Почему программе сложно создавать случайные числа?

Мои дети задали мне этот вопрос, и я не мог дать краткое, понятное объяснение.

Так что я надеюсь, что кто-то на SO может.

Ответ 1

Как насчет "Потому что компьютеры просто следуют инструкциям, а случайные числа противоположны следующим инструкциям. Если вы производите произвольное число, следуя инструкциям, то это не очень случайный! Представьте, что пытаетесь дать кому-то инструкции о том, как выбрать случайное число."

Ответ 2

Здесь детское дружеское объяснение:

  • Получить кубик (количество сторон не имеет значения)

  • Запишите их на листе бумаги:

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

  • Теперь сверните кости. Скажите им, что вы "посеяли" или попросили компьютер начать с произвольной позиции в кости.

  • Следуйте за каждым шагом в документе (перемещайтесь вправо), перемещая кости.

    • Скажем, что вы бросили 6-стороннюю кубику, и она была посеяна в 5. Двигаясь вправо, вы получаете 4.
  • Объясните, что компьютер должен начинаться со стартового значения. Это может быть дано любым количеством источников, таких как дата или движение мыши. Покажите им, что то, как они бросают кости, определяет начальное значение.

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

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

Теперь для ответа на ваш вопрос:

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

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

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

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

Ответ 3

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

И не принимайте "выбрать число от 1 до 10" в качестве ответа;)

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

Ответ 4

Здесь моя попытка объяснить случайность на уровне приблизительно восьмого класса. Надейтесь, что ваши дети сочтут это полезным!

Удивительно, как может показаться, компьютер не очень умный. Компьютеры должны следовать своим инструкциям вслепую и, следовательно, полностью предсказуемы. Компьютер, который не соответствует его инструкциям таким образом, на самом деле сломан! Мы хотим, чтобы компьютеры выполняли именно то, что мы им говорим.

Именно это затрудняет случайное выполнение вещей. Компьютеры должны сообщать последовательность инструкций о том, как создавать случайные числа. Но это на самом деле не случайно, потому что если вы дадите кому-либо еще инструкции и ту же отправную точку, они могут придумать одни и те же ответы. Поэтому компьютеры не могут быть действительно случайными, следуя инструкциям.

Ответ 5

Поскольку компьютеры являются детерминированными машинами.

Ответ 6

Генерация случайных чисел на компьютере - это игра "Eenie meenie miney moe" при выборе того, кто первым в игре с тегом. На первый взгляд это выглядит случайным, но когда вы входите в детали, он полностью детерминирован. Трудно сделать eenie meenie miney moe в схему, что человек действительно не может предсказать результат.

Также есть некоторые трудности с получением дистрибутива приятным и даже.

Ответ 7

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

Ответ 8

"Дети, если они не сломаны, компьютеры никогда не лгут, и они всегда делают то, что вы им говорите. Даже когда мы разочарованы результатами, всегда оказывается, что они делают то, что им сказали делать с полной точностью. Они могут делать только две вещи: добавить один и один и переместить число из одного места в другое. Если вы хотите, чтобы они производили случайные числа, вам нужно объяснить им, как это сделать с точки зрения добавления одного и одно и движение. Как только вы это объясните, результаты не будут случайными".

Ответ 9

Должно быть сделано действительно

RFC 1149.5 specifies 4 as the standard IEEE-vetted random number.

Источник: http://xkcd.com/221/

Ответ 10

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

Ответ 11

Потому что нет такой вещи, как случайное число.

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

Уберите человека, и нет случайности, есть только "this". Это происходит потому, что это происходит не потому, что оно случайное.

Ответ 12

Простое объяснение для детей:

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

Вы должны объяснить детям, что программы могут имитировать эти устройства только с помощью сложных математических формул (которые гарантируют отсутствие "случайности" по определению, потому что они являются результатом некоторой функции или процедурного алгоритма). Как правило, необходим строгий статистический анализ, чтобы дифференцировать использование квантового аппаратного PRNG (используйте это как возможность объяснить своим детям принцип Гейзенберга!) И сильного программного обеспечения PRNG.

Ответ 13

Потому что программа - это система, и все в системе выполняется для обеспечения последовательности и регулярности. Случайности в системе нет места.

Ответ 14

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

Ответ 15

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

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

Ответ 16

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

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

Ответ 17

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

В то время как возможно генерировать псевдослучайные числа и числа, которые распределены случайным образом, вы не можете генерировать поистине случайные числа без отдельного оборудования. Существует аппаратное обеспечение, которое генерирует действительно случайные числа, основанные на "квантовых" взаимодействиях (по крайней мере, по мнению производителей). Иногда сайты онлайн-покера используют эти адаптеры для своих генераторов.

По-видимому, существуют даже онлайн-сервисы для предоставления случайных чисел - random.org.

Ответ 18

Как ни удивительно, сложно заставить компьютер сделать что-то случайно. Компьютер следит за своими инструкциями вслепую и, следовательно, полностью предсказуем. (Компьютер, который не выполняет свои инструкции таким образом, нарушен.) Существует два основных подхода к генерации случайных чисел с использованием компьютера: генераторы псевдослучайных чисел (PRNG) и истинные генераторы случайных чисел (TRNG).

Ответ 19

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

В свое время многие компьютеры не имели возможности получить эти данные и могли только предлагать псевдослучайность, то есть случайное, но повторяемое распределение чисел на основе определенного семени. Для многих целей это достаточно - выбор другого семени каждый раз приводит к достаточно хорошей случайности. Для других целей, таких как шифрование, это недостаточно сильно, и для начала вам нужна некоторая случайность, которая не повторяется или предсказуема. Сегодня большинство компьютеров (за исключением встроенных устройств, возможно) достаточно сложны, чтобы иметь источник случайности, который может генерировать случайные числа с шифрованием. Например, Linux имеет /dev/random, а среда .NET поддерживает криптографически сильную RandomNumberGenerator, который имеет ряд реализаций.

Ответ 20

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

Ответ 21

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

Представьте себе создание алгоритма для имитации броска кубиков. Вы можете легко сформулировать некоторую процедуру для генерации разных чисел на каждой итерации. Но можете ли вы гарантировать, что в конечном итоге (я имею в виду, до бесконечности) количество раз, которое вышло 6, будет таким же, как и любое другое число? При разработке хорошего генератора случайных чисел это то, что вы должны принять. Вы должны предоставить сильные гарантии (например, математические доказательства) о случайности, если это требует приложение (например, лотерея).

Ответ 22

Важно отметить, что люди очень плохо выполняют генерацию случайных чисел. Компьютеры хуже, потому что они просто следуют строгим командам. Люди могут генерировать хорошие (псевдо) случайные числа, следуя алгоритму, набору команд. Компьютеры одинаковы.

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

Ответ 23

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

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

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

Ответ 24

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

Ответ 25

В то же время я наткнулся на "Dice-O-Matic"

http://GamesByEmail.com/News/DiceOMatic

Вид интересного реального применения этой проблемы.

Ответ 26

Это не сложно, здесь пара бесплатно: 12, 1400, 397.6