Форум сайта python.su
Доброго времени суток.
У меня есть ряд (лист, кортеж) чисел (случайных). Не важно, как они получены, пусть мне их возвращает какая-то неизвестная функция.
А как проверить являются ли они действительно случными? Вообще поискал по инету, нашел, что надо смотреть в сторону критерия Пирсона и еще какие-то критерии там есть. ТО есть я понимаю, что абсолютно случайных чисел нет, но как проверить, что вот этот ряд чисел укладывается в ожидание? (может, конечно, ерунду пишу, но должно же быть что-то).
Может есть какой алгоритм? что-то типа
def israndomlist(llist):
…….
return result
тоесть мне нужна не просто сама функция, а еще и понимание как она может быть устроена.
или не все так просто?
Вообще буду благодарен, если кто-то ссылкой поделится про случайные величины а до я из серии “для чайников” :)
Отредактировано (Дек. 24, 2008 09:48:15)
Офлайн
Про случайные числа и их генераторы есть в одном из томов Кнута (не помню в каком именно). А вообще можно построить функцию распределения вероятностей (кажется так она называется, давно с этим сталкивался).
Офлайн
Jenyayв 2гому
Про случайные числа и их генераторы есть в одном из томов Кнута (не помню в каком именно)
Офлайн
Я не особо хороший математик, так что не пинайте сильно, но первой мыслью было получить среднее расстояние между двумя ближайшими членами. Чем оно больше, тем качество перемешивания будет более высоким.
Отредактировано (Дек. 26, 2008 01:47:00)
Офлайн
ZZZ
Спрашивали не как сделать генератор, а проверить полученные числа на случайность.
Коче говоря или свой проверяет или чужой ;)
Офлайн
Вообще чужой проверяю. Но не проверяю, а скорее сравниваю результаты.
Но как-то же должен быть способ проверки. тут нашел кое что http://cryptolog.ru/?Psevdosluchainye_posledovatelmznosti но там про генераторы как раз.
Еще ссылки
http://ru.wikipedia.org/wiki/%D0%9A%D1%80%D0%B8%D1%82%D0%B5%D1%80%D0%B8%D0%B9_%D1%81%D0%BE%D0%B3%D0%BB%D0%B0%D1%81%D0%B8%D1%8F_%D0%9A%D0%BE%D0%BB%D0%BC%D0%BE%D0%B3%D0%BE%D1%80%D0%BE%D0%B2%D0%B0
http://ru.wikipedia.org/wiki/%D0%9A%D1%80%D0%B8%D1%82%D0%B5%D1%80%D0%B8%D0%B9_%D1%81%D0%BE%D0%B3%D0%BB%D0%B0%D1%81%D0%B8%D1%8F_%D0%9F%D0%B8%D1%80%D1%81%D0%BE%D0%BD%D0%B0
Но я там вообще ничего не понимаю.
Офлайн
Я себе это как-то иначе представлял. Обычная лаба по статистике.
Дано: последовательнось чисел (генератор).
Задача: определить, соответствует ли она заданному распределению и определить параметры этого распределения.
Если “на пальцах” - решается так:
- строим график, на оси абцисс числа, получаемые из генератора. На оси ординат - частота встречи. Т.е. если число попалось два раза - будет двойка.
- сетку абцисс выбираем так, чтобы не много и не мало было - лучше получить как минимум одно “попадание” на каждую ячейку.
- смотрим, похоже ли хоть примерно? Для нормального распределения должен быть классический “колокол” и т.д.
- играясь с параметрами распределения, подбираем такие, чтобы построенный график максимально соответствовал нашей картинке.
- потом можно определить “непохожесть”, посчитав корреляцию между теоретическим графиком и практическими результатами.
Конечно, все на самом деле излагается гораздо строже, но суть способа я попытался объяснить
Офлайн
Андрей СветловДа, я график тоже строил, но псевдослучайная последовательность даст точно такой же график как эта же последовательность, но сортированная.
Если “на пальцах” - решается так:
- строим график, на оси абцисс числа, получаемые из генератора. На оси ординат - частота встречи. Т.е. если число попалось два раза - будет двойка.
- сетку абцисс выбираем так, чтобы не много и не мало было - лучше получить как минимум одно “попадание” на каждую ячейку.
- смотрим, похоже ли хоть примерно? Для нормального распределения должен быть классический “колокол” и т.д.
- играясь с параметрами распределения, подбираем такие, чтобы построенный график максимально соответствовал нашей картинке.
- потом можно определить “непохожесть”, посчитав корреляцию между теоретическим графиком и практическими результатами.
Офлайн
Тот же критерий Пирсона так и работает. Обе последовательности могут быть примерами равномерного распределения на интервале . Статистическим методам все равно. Вот если бы было 122205557 - к равномерному распределению подходило бы плохо.
Можешь поступить так. Теоретически твоя последовательность - бесконечная. Но если она удовлетворяет какому-либо распределению, то и любой ее кусок тоже (с большей ошибкой, конечно же). На практике то выражается в следующем: нарезаешь вход на сколько-то там выборок. Чисел по сто хотя бы (считают, что 30 - минимально необходимый размер, а ты перекрой его в несколько раз. Чем больше, тем лучше). Анализируй каждый кусок отдельно. Результаты должны быть похожими. Упорядоченная последовательность покажет совершенно разные параметры распределения для каждого своего куска.
Офлайн
iceи то и другое похоже на случайные числа. попробуй использовать стандартный модуль питона, чтобы получить последовательность 0 1 2 3 4 5 6 7 8 9. вероятность ее получить мала)))
то есть 1 3 7 0 5 4 6 8 9 2 - это похоже на “случайные” числа, в то время как 0 1 2 3 4 5 6 7 8 9 нет.
Офлайн