ice
Дек. 24, 2008 09:42:15
Доброго времени суток.
У меня есть ряд (лист, кортеж) чисел (случайных). Не важно, как они получены, пусть мне их возвращает какая-то неизвестная функция.
А как проверить являются ли они действительно случными? Вообще поискал по инету, нашел, что надо смотреть в сторону критерия Пирсона и еще какие-то критерии там есть. ТО есть я понимаю, что абсолютно случайных чисел нет, но как проверить, что вот этот ряд чисел укладывается в ожидание? (может, конечно, ерунду пишу, но должно же быть что-то).
Может есть какой алгоритм? что-то типа
def israndomlist(llist):
…….
return result
тоесть мне нужна не просто сама функция, а еще и понимание как она может быть устроена.
или не все так просто?
Вообще буду благодарен, если кто-то ссылкой поделится про случайные величины а до я из серии “для чайников” :)
Jenyay
Дек. 24, 2008 13:34:12
Про случайные числа и их генераторы есть в одном из томов Кнута (не помню в каком именно). А вообще можно построить функцию распределения вероятностей (кажется так она называется, давно с этим сталкивался).
crchemist
Дек. 25, 2008 14:15:55
Jenyay
Про случайные числа и их генераторы есть в одном из томов Кнута (не помню в каком именно)
в 2гому
ZZZ
Дек. 26, 2008 01:46:25
Я не особо хороший математик, так что не пинайте сильно, но первой мыслью было получить среднее расстояние между двумя ближайшими членами. Чем оно больше, тем качество перемешивания будет более высоким.
Ferroman
Дек. 26, 2008 01:53:22
ZZZ
Спрашивали не как сделать генератор, а проверить полученные числа на случайность.
Коче говоря или свой проверяет или чужой ;)
ice
Дек. 26, 2008 07:55:18
Андрей Светлов
Дек. 26, 2008 09:06:18
Я себе это как-то иначе представлял. Обычная лаба по статистике.
Дано: последовательнось чисел (генератор).
Задача: определить, соответствует ли она заданному распределению и определить параметры этого распределения.
Если “на пальцах” - решается так:
- строим график, на оси абцисс числа, получаемые из генератора. На оси ординат - частота встречи. Т.е. если число попалось два раза - будет двойка.
- сетку абцисс выбираем так, чтобы не много и не мало было - лучше получить как минимум одно “попадание” на каждую ячейку.
- смотрим, похоже ли хоть примерно? Для нормального распределения должен быть классический “колокол” и т.д.
- играясь с параметрами распределения, подбираем такие, чтобы построенный график максимально соответствовал нашей картинке.
- потом можно определить “непохожесть”, посчитав корреляцию между теоретическим графиком и практическими результатами.
Конечно, все на самом деле излагается гораздо строже, но суть способа я попытался объяснить
ice
Дек. 26, 2008 09:26:04
Андрей Светлов
Если “на пальцах” - решается так:
- строим график, на оси абцисс числа, получаемые из генератора. На оси ординат - частота встречи. Т.е. если число попалось два раза - будет двойка.
- сетку абцисс выбираем так, чтобы не много и не мало было - лучше получить как минимум одно “попадание” на каждую ячейку.
- смотрим, похоже ли хоть примерно? Для нормального распределения должен быть классический “колокол” и т.д.
- играясь с параметрами распределения, подбираем такие, чтобы построенный график максимально соответствовал нашей картинке.
- потом можно определить “непохожесть”, посчитав корреляцию между теоретическим графиком и практическими результатами.
Да, я график тоже строил, но псевдослучайная последовательность даст точно такой же график как эта же последовательность, но сортированная.
то есть 1 3 7 0 5 4 6 8 9 2 - это похоже на “случайные” числа, в то время как 0 1 2 3 4 5 6 7 8 9 нет.
Андрей Светлов
Дек. 26, 2008 10:24:05
Тот же критерий Пирсона так и работает. Обе последовательности могут быть примерами равномерного распределения на интервале . Статистическим методам все равно. Вот если бы было 122205557 - к равномерному распределению подходило бы плохо.
Можешь поступить так. Теоретически твоя последовательность - бесконечная. Но если она удовлетворяет какому-либо распределению, то и любой ее кусок тоже (с большей ошибкой, конечно же). На практике то выражается в следующем: нарезаешь вход на сколько-то там выборок. Чисел по сто хотя бы (считают, что 30 - минимально необходимый размер, а ты перекрой его в несколько раз. Чем больше, тем лучше). Анализируй каждый кусок отдельно. Результаты должны быть похожими. Упорядоченная последовательность покажет совершенно разные параметры распределения для каждого своего куска.
Dimka665
Дек. 26, 2008 10:28:17
ice
то есть 1 3 7 0 5 4 6 8 9 2 - это похоже на “случайные” числа, в то время как 0 1 2 3 4 5 6 7 8 9 нет.
и то и другое похоже на случайные числа. попробуй использовать стандартный модуль питона, чтобы получить последовательность 0 1 2 3 4 5 6 7 8 9. вероятность ее получить мала)))
но вероятность получить последовательность 1 3 7 0 5 4 6 8 9 2, точно такая же как и получить 0..9.
если распределение величин из равномерное, то обе эти последовательности имеют одну и ту же вероятность появления.
если распределение нормальное (ранее упомянутый “колокол”), то обе эти последовательности не похожи на случайные.