См. Brent Yorgey's Typeclassopedia :
. В отличие от некоторых других типов классов, с которыми мы сталкиваемся, данный тип имеет не более одного действительного экземпляра Functor. Этот можно доказать через свободную теорему для типа fmap. Фактически, GGC может автоматически выводить экземпляры Functor для многих типов данных.
blockquote>
Как насчет, "Поскольку компьютеры просто следуют инструкциям и случайным числам, противоположность следования инструкциям. Если Вы делаете случайное число путем следования инструкциям, то это не очень случайно! Предположите пытаться дать кому-то инструкции относительно того, как выбрать случайное число".
Компьютеры просто не имеют подходящих аппаратных средств. Аппаратные средства обычного компьютера предназначены, чтобы быть детерминированными. С подходящими аппаратными средствами как упомянутый здесь случайные числа не являются проблемой вообще.
Чтобы заставить компьютер генерировать случайное число, компьютер должен иметь источник случайности для запуска с.
Это должен быть feeded семя, которое не может ожидаться или вычисляться, просто смотря на семя, если семя прибудет из часов тогда, это может быть предсказано или вычислено путем знания времени, если семя прибывает из подобной съемки lavalamp, и получите числа от потока изображения тогда, более трудно просто посмотреть на семя для знания, каково следующее число будет.
компьютер не имеет созданного в лампе лавы для генерации той случайности, это - то, что, мешают, мы должны заменить реальной случайностью с некоторым входом, который существует в компьютере, возможно, путем входа передающих tcpip-пакетов или других вещей, но не много способов вложить ту случайность источники.
Необходимо отметить, что люди выполняют очень плохо при генерации случайных чисел . Компьютеры хуже, потому что они просто следуют за строгим набором команды. Люди могут только генерировать хорошие (псевдо) случайные числа при следовании алгоритму, ряд команд. Компьютеры являются тем же.
, Хотя нужно отметить, что компьютеры могут собрать энтропию от "среды", подключенной к нему, как клавиатура и действия мыши, что средства в генерации случайных чисел (или непосредственно или отбором PRNG).
Его, вероятно, полезный для различения число, которое трудно предсказать (который может создать компьютер) от чего-то, что не детерминировано (который немного более жесток для компьютеров, и теоретически, при этом любой медосмотр).
На самом деле на наиболее современных компьютерах не трудно произвести числа, которые "достаточно случайны" в большинстве целей. Как другие отметили, критическая вещь имеет источник случайности. Вы не можете только записать программу, которая произведет случайность алгоритмически, но можно наблюдать случайность в различных операциях большинства компьютеров разумной сложности, т.е. те мы обычно думаем при записи программ. Один такой источник синхронизирует данные прерываний от различных системных устройств системы.
Когда-то много компьютеров не имели никакого способа достигнуть эти данные и могли только предложить псевдослучайность, то есть, случайное, но повторяемое распределение чисел на основе конкретного семени. Во многих целях это достаточно - выбор другого семени каждый раз результаты в достаточно хорошей случайности. В других целях, таких как шифрование, это не достаточно сильно, и Вам нужна некоторая случайность для запуска с этого, не повторяемо или предсказуем. Сегодня, большинство компьютеров (за исключением встроенных устройств, возможно) достаточно сложно, чтобы иметь источник случайности, которая может генерировать случайные числа силы шифрования. Например, Linux имеет /dev/random и поддержка платформы.NET криптографически сильный класс RandomNumberGenerator , который имеет много реализаций.
Легко придумать алгоритм, который генерирует неожиданные числа, которые кажутся случайными в некотором смысле. Но разработать алгоритм, который генерирует истинные случайные числа, ну, в общем, это твердо.
Предполагают разрабатывать алгоритм для моделирования броска костей. Можно легко сформулировать некоторую процедуру для генерации различных чисел на каждом повторении. Но можете Вы гарантия , что, в конечном счете (я имею в виду до бесконечности), сумма времен, которые 6 вышли, совпадет с каким-либо другим числом? При разработке хорошего генератора случайных чисел это - вид обязательства, которое необходимо принять. Необходимо обеспечить сильные гарантии (т.е. математические доказательства) о случайности, если приложение (например, лотерея) требует его.
Столь удивительный, как это может казаться, трудно заставить компьютер делать что-то случайно. Компьютер следует своим инструкциям вслепую и поэтому абсолютно предсказуем. (Повреждается компьютер, который не следует его инструкциям этим способом.) Существует два основных подхода к генерации случайных чисел с помощью компьютера: Генераторы псевдослучайного числа (PRNGs) и Истинные Генераторы случайных чисел (TRNGs).
Прежде всего, потому что компьютеры не имеют никаких функций, которые ведут себя дискретными, неслучайными способами. Компьютер предсказуем, который позволяет нам программировать надежное программное обеспечение. Если бы это не было предсказуемо, то было бы легче генерировать случайное число (так как наше программное обеспечение могло полагаться на этот непредсказуемый метод).
, В то время как возможно генерировать псевдослучайные числа и числа, которые распределяются случайным образом, Вы не можете генерировать действительно случайные числа без отдельного оборудования. Существуют аппаратные средства, которые генерируют действительно случайные числа на основе "квантовых" взаимодействий (по крайней мере, по данным производителей). Покер-сайты онлайн иногда используют эти адаптеры для своих генераторов.
, По-видимому, существуют даже онлайн-сервисы для обеспечения случайных чисел - random.org , например.
Компьютеры могут только выполнить алгоритмические вычисления, и действительно случайное число не является алгоритмической вещью. Можно получить алгоритмы, которые производят числа, которые ведут себя как случайные числа; такие алгоритмы называют 'Генераторами Псевдослучайного числа.
Неоднократно в прошлом люди сделали генераторы случайных чисел из аналого-цифровых преобразователей подключенными к источникам электронного шума, но это имеет тенденцию быть справедливо специализированным набором.
Алгоритмы для генерации случайных чисел неизбежно детерминированы. Они берут маленькое случайное семя и используют его для получения длинной строки псевдослучайных цифр.
очень трудно сделать это, не вводя тонкие шаблоны в данные. Строка цифр может выглядеть совершенно случайной, но повторила шаблоны, которые делают распределение несоответствующим для приложений, где случайность требуется.
Это твердо, потому что, учитывая те же наборы исходных данных и условий, программа приведет к тому же результату каждый раз. Это по определению не случайно.
Не твердый, вот пара бесплатно: 12, 1400, 397.6
Поскольку нет такой вещи как случайное число.
Случайный человеческое понятие, которое мы используем, когда мы не можем постигать данные и не понимаем это. Если мы должны полагать, что наука в конечном счете приведет к пониманию того, как все работает тогда, конечно, все детерминировано.
Устраняют человека, и там не случайно существует только "это". Это происходит, потому что это происходит, не потому что это случайно.
Поскольку единственный истинный источник случайности существует на квантовом уровне. С подходящими аппаратными средствами помогает, компьютеры могут получить доступ к этому уровню. например, они могут выбрать затухание radioactve изотопа или шума от термоэлектронного клапана. Но Ваш основной ПК не идет с этим интересным материалом.
Простое объяснение детей:
определением случайности является философский и математический вопрос вне объема этого ответа, но по определению нет такой вещи как "случайное" число. В метафизическом смысле число только случайно в последовательной форме; однако, существует вероятность, что последовательность следует за определенными статистическими дистрибутивами в зависимости от объема выборки. Генератор случайных чисел (в нашем случае генератор псевдослучайного числа, или PRNG) является просто устройством для создания квазислучайной последовательности чисел, которую мы можем только оценить (на основе данной вероятности, свойственной в последовательности), чтобы быть случайными.
необходимо объяснить детям, что программы могут только подражать этим устройствам с помощью сложных математических формул (которые гарантируют отсутствие "случайности" по определению, потому что они - результат некоторой функции или процедурный алгоритм). Как правило, строгий статистический анализ необходим для дифференциации, использование квантовых аппаратных средств PRNG (используйте это в качестве возможности объяснить детям Heisenberg Принцип!) и то из сильного программного обеспечения PRNG.
"Дети, если они не повреждаются, компьютеры, никогда не лежат, и они всегда делают то, что Вы говорите им делать. Даже когда мы разочарованы результатами, всегда оказывается, что они делали то, что им сказали сделать с полной точностью. Они могут только сделать две вещи: добавьте один и один и переместите число от одного места до другого. Если Вы хотите, чтобы они произвели случайные числа, необходимо объяснить им, как сделать это с точки зрения добавления того и один и перемещение. Как только Вы объяснили, что, результаты не будут случайны".
Поскольку, учитывая любой вход, алгоритм производит тот же самый вывод каждый раз. И Вы не можете только обеспечить "случайный" вход, потому что Вы пытаетесь генерировать случайное число во-первых.
Генерация случайных чисел на компьютере похожа на игру "Eenie жадина miney moe" при выборе, кто Это сначала в игре тега. На поверхности это действительно выглядит случайным, но когда Вы входите в детали, это абсолютно детерминировано. Трудно сделать eenie жадину miney moe в схему, из которой человек действительно не может предсказать результат.
Также существуют некоторые трудности с получением распределения, хорошего и ровного.
Поскольку компьютеры являются детерминированными машинами.
Вот моя попытка объяснения случайности на приблизительно уровне восьмого класса. Надеюсь, что Ваши дети находят это полезным!
Удивление, поскольку это может казаться, компьютер, не очень умно. Компьютеры должны следовать своим инструкциям вслепую и поэтому абсолютно предсказуемы. Компьютер, который не следует его инструкциям этим способом, на самом деле, повреждается! Мы хотим, чтобы компьютеры сделали точно, что мы говорим им.
Это точно, что мешает делать вещи случайным образом. Компьютерам нужно сказать последовательность инструкций относительно того, как генерировать случайные числа. Но это не действительно случайно, потому что, если Вы дали кому-либо еще инструкции и ту же начальную точку, они могли бы придумать те же ответы. Таким образом, компьютеры не могут быть действительно случайными только путем следования инструкциям.
Попросите, чтобы они разработали пошаговый метод для генерации случайного числа.
И не принимают, "выбирают число от 1 до 10" как ответ;)
Испытание проблемы должно проиллюстрировать трудность необходимости генерировать случайные числа от ряда инструкций, точно так же, как то, что на самом деле должны сделать компьютеры.
Вот является ребенок дружественным объяснением:
Получают Игру в кости (количество сторон не имеет значения)
, Записывают их на листке бумаги:
Показывает им игру в кости и бумагу. Объясните, что игра в кости представляет компьютер, и бумага представляют математику или алгоритм, который говорит компьютер, какое число это возвратит.
Теперь, кидать кости. Скажите им, что Вы - "отбор" или просьба, чтобы компьютер запустился в случайном положении игры в кости.
Выполняют каждый шаг в газете (переместите право) путем перемещения игры в кости.
Объясняют, что компьютер должен запуститься с начального значения. Это могло быть дано любым количеством источников, таких как дата или движение мыши. Покажите им, который, как они бросают игру в кости, определяет начальное значение.
Объясняют, что листок бумаги - то, как компьютер получает следующее число. Скажите им, что инструкции относительно бумаги могут быть изменены так же легко, как алгоритм для случайного генератора может быть изменен программистом.
Весело проводят время, показывая им различные возможности, который только ограничен их воображением.
Теперь для ответа на Ваш вопрос:
Говорят им, что, когда хороший математик знает начальное значение и что ступает, компьютер в настоящее время в, математик может сказать то, что является следующим значением случайного числа.
, Неважно, насколько творческий ребенок с их алгоритмом, необходимо все еще быть в состоянии вывести их алгоритм. Скажите Вашему ребенку, что в компьютерном мире, ничто не скрыто и только наблюдением, даже если его просто числа, который наблюдался, алгоритм случайного числа, могут быть обнаружены.
... как побочный эффект, если ребенок смог придумать хороший алгоритм, который смутил Вас, в которых Вы не можете вывести следующую последовательность, тогда у Вас есть яркий ребенок.: D
Поскольку программа является системой, и все в системе сделано работать с непротиворечивостью и регулярностью. Случайность не имеет никакого места в системе.
Некоторое время назад я наткнулся на "Dice-O-Matic"
http://GamesByEmail.com/News/DiceOMatic
Вроде интересного реального применения проблема.
Действительно нужно было сделать
Источник: http://xkcd.com/221/