Itsumo sobani, itsumo hitori
Однажды я написал такую программу. Был файл, в каждой строчке - набор слов. Программа из каждой строки брала случайное слово. Получался такой случайный текст.

Запуская её много раз для одного файла я заметил, что часть слов выпадает часто, а другая часть - редко или почти ни разу. Я сделал тест распределения случайных чисел. Генерировал тысячи чисел и считал сколько каждое выпало. Вышел ровный равномерный график.

Выходит, сами по себе числа очень равномерно выпадают, а на деле - то ли повторяющиеся цепочки в них, то ли ещё что-то.

Вопрос - в чем могло быть дело. И какие есть критерий оценки случайности генератора псевдо-случайных чисел кроме такого распределения сколько раз какое выпадет? Уже прошло лет 10+, а эта фигня всё всплывает иногда в памяти. В теории вероятности я не особо силен (хотя, если без этого не понять, может найду время подучить)

@темы: Математика, Компьютеры

Комментарии
26.07.2011 в 22:09

я поместился после смерти в сознания ста воробьёв и было весело и странно когда распугивали их
подпишусь, у меня похожая ситуация с плеером. Вроде рандом стоит, а на деле выдаёт мой электронный друг штук двадцать одних и тех же песен, только в разном порядке.
26.07.2011 в 22:26

how dreary to be somebody
генерация псевдослучайных чисел
нэ?
и цепочки чисел - да. поэтому они и псевдослучайные)
И какие есть критерий оценки случайности генератора псевдо-случайных чисел кроме такого распределения сколько раз какое выпадет
нас учили только распределениями оценивать, но их давалось штуки 3-4. По названиям вспоминаются: Пуассона... Логарифмическое. и еще какие-то.
26.07.2011 в 22:51

На свете есть всего 10 разновидностей людей. Те, которые понимают бинарный код, и те, кто не понимают
Ну так все правильно :) при уходе в бесконечность получается равномерное распределение, а малую выборку нельзя считать достоверной.
Вопрос в минимальном объеме выборки, при котором оно будет работать правильно. Я полагаю, для того чтобы хорошо работал рандом в списке из не более чем сотню треков, необходимо подбирать ГПСЧ для каждого числа записей индивидуально, что, как сами понимаете, невыгодно. Поэтому во все такие устройства встроен простенький универсальный, который имеет хорошие характеристики при уходе в бесконечность, но для альбома в 13 песен выбирает в 90% случаев из 5-6. Ну и Ваша программа была сделана по тому же принципу :)
26.07.2011 в 22:52

¡ʎuunɟ ʇou sı sıɥʇ
Я не сильно вдавался в тему, но если перед функцией random() в с++ вызвать функцию randomize(), то случайные числа генерируются гораздо более случайным образом )
26.07.2011 в 22:54

я поместился после смерти в сознания ста воробьёв и было весело и странно когда распугивали их
ну там треков триста, но видимо недостаточно этого
26.07.2011 в 22:56

На свете есть всего 10 разновидностей людей. Те, которые понимают бинарный код, и те, кто не понимают
Foul thing
я думаю, что дело не в этом, ибо если рандомайзер не включен, то уже после пары запусков заметно, что всегда одно и то же генерируется :)
27.07.2011 в 13:36

Аккаунт для использования в публичных местах. Основной ник - Trotil.
Если 10 лет назад, то какой-нибудь Turbo Pascal 7.0, а в старых компиляторах были реализованы генераторы на простом линейном конгруэнтном генераторе. Статические свойства у них, в принципе, хорошие. Какой компилятор был?
27.07.2011 в 15:58

alba-longa
Хм... И при уходе за 1000 звучит в лучшем случае - сотня.
Этого количества так же недостаточно?
Кстати, справедлива обратная зависимость: чем меньше в альбоме, тем больше шансов на проигрывание всех.


Помню, как раз около 10 лет назад в КвикБейсике для генерации "более случайных" чисел писали именно "рандомайзер" вместо обычно "рэндом". Правда, дело было в школе, и нам кроме пояснения, что одни случайные числа бывают более случайные, чем другие, ничего не сказали.
27.07.2011 в 16:33

На свете есть всего 10 разновидностей людей. Те, которые понимают бинарный код, и те, кто не понимают
I-lang
Этого количества так же недостаточно?
Дело не только в количестве треков, но и в количестве наблюдений. Если у Вас альбом в 15 треков, то надо минимум несколько сотен наблюдений, чтобы треки выдавались действительно с одинаковой вероятностью (цифры примерные). Теперь представьте, сколько надо наблюдений, чтобы проследить эту зависимость на тысяче треков. Мне лень писать подробные выкладки, но суть в том, что равномерность выпадения гарантируется при числе проигрываний, которое стремится к бесконечности.

Кстати, справедлива обратная зависимость: чем меньше в альбоме, тем больше шансов на проигрывание всех.
Нет, тем больше шансов, что у Вас хватит терпения их услышать :)

для генерации "более случайных" чисел писали именно "рандомайзер" вместо обычно "рэндом".
Генератор используется тот же самый, просто при включении рандомайзера первоначальное значение каждый раз другое, поэтому сгенерированный ряд чисел получается другим. Если хотите подробностей, выше есть ссылка на вики.
27.07.2011 в 16:43

Аккаунт для использования в публичных местах. Основной ник - Trotil.
В тему - есть хорошая и интересная книга про генераторы ПСП: Теория, применение и оценка качества генераторов псевдослучайных последовательностей. Валяется в сети в электронном виде.
27.07.2011 в 18:49

alba-longa
Ага! Ок! Спасибо. :)