Почему программе сложно генерировать случайные числа? - PullRequest
21 голосов
/ 11 марта 2009

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

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

Ответы [ 26 ]

66 голосов
/ 11 марта 2009

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

13 голосов
/ 11 марта 2009

Вот объяснение, подходящее для детей:

  1. Получите кости (количество сторон не имеет значения)

  2. Запишите это на листе бумаги:

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

  4. Теперь бросьте кости. Скажите им, что вы «затравливаете» или просите компьютер начать со случайной позиции в кости.

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

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

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

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

Теперь ответим на ваш вопрос:

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

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

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

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

10 голосов
/ 11 марта 2009

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

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

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

9 голосов
/ 11 марта 2009

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

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

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

5 голосов
/ 11 марта 2009

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

4 голосов
/ 11 марта 2009

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

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

3 голосов
/ 11 марта 2009

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

3 голосов
/ 25 августа 2009

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

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

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

3 голосов
/ 11 марта 2009

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

2 голосов
/ 11 марта 2009

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

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

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

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