эксперимент
Nov. 29th, 2015 12:02 pmТут недавно обсуждалась (простая) задача по теории вероятностей - просьба к читателям, изучавшим эту науку, потратить минуту или две и написать в комментарии, как они её решали бы и насколько эта задача, по их мнению, лёгкая.
Есть вероятностный алгоритм, который для простого числа всегда говорит, что оно простое, а для составного числа говорит, что оно составное в 90% случаев. (Реальные алгоритмы действуют лучше, и не одинаково для всех составных чисел, но примем такую условность и предположим, что рассматриваемый алгоритм действительно таков.) Некто хочет найти 1000-битовое простое число так: выбирает случайные 1000 битов бросанием монеты и проверяет, не получилось ли простое число по этому алгоритму, при этом делает две проверки для повышения надёжности (пока не найдётся число, которое дважды будет названо простым этим алгоритмом). Какова вероятность, что первое найденное им число действительно окажется простым?
(Для чистоты эксперимента комментарии вначале скрываются - потом будут открыты)
Есть вероятностный алгоритм, который для простого числа всегда говорит, что оно простое, а для составного числа говорит, что оно составное в 90% случаев. (Реальные алгоритмы действуют лучше, и не одинаково для всех составных чисел, но примем такую условность и предположим, что рассматриваемый алгоритм действительно таков.) Некто хочет найти 1000-битовое простое число так: выбирает случайные 1000 битов бросанием монеты и проверяет, не получилось ли простое число по этому алгоритму, при этом делает две проверки для повышения надёжности (пока не найдётся число, которое дважды будет названо простым этим алгоритмом). Какова вероятность, что первое найденное им число действительно окажется простым?
(Для чистоты эксперимента комментарии вначале скрываются - потом будут открыты)
no subject
Date: 2015-11-29 11:15 am (UTC)Примерно 1/8, что простое.
no subject
Date: 2015-11-29 11:20 am (UTC)Потому как первое positive будет не менее вероятности первой ошибки, т.е. 1/100, т.е. в среднем через 100 чисел. То есть каждое сотое число. Это огромная доля.
Тогда как простые числа составляют iirc не более чем логарифмическую долю.
Итого, искомая вероятность экспоненциально мала как функция интервала, в котором простое число ищется.
no subject
Date: 2015-11-29 11:24 am (UTC)Togda na kazhdom shage s veroyatnostyu eps vse horosho (my nashli prostoe), s veroyatnostyu 0.01 (1 - eps) vse ploho (my vybrali sostavnoe, no etogo ne obnaruszili), i s ostalnoy veroyatnostyu vse delaem zanovo. Znachit, otvet raven eps / (0.01 (1 - eps) + eps) ~ 0.13.
no subject
Date: 2015-11-29 11:27 am (UTC)говорится то же
Date: 2015-11-29 11:29 am (UTC)no subject
Date: 2015-11-29 11:37 am (UTC)Если число составное и (что важно, но весьма сомнительно) результаты двух проверок независимы, у него есть 1 шанс из 100 пройти оба теста на простоту. Так что на 700 случайных двоично-тысячезначных чисел приходится в среднем одно простое и почти семь ложно-простых.
Ответ: примерно 1/8.
Использовали асимптотику плотности простых чисел и (неявно) формулу Байеса.
Задача, конечно, несложная, но совсем простой я бы её не назвал.
no subject
Date: 2015-11-29 11:40 am (UTC)RE: говорится то же
Date: 2015-11-29 11:40 am (UTC)А) С вероятностью p простое
Б) С вероятностью (1-p)*0.99 составное, объявленное по итогам проверки составным
В) С вероятностью (1-p)*0.01 составное, объявленное простым.
В случае Б) процесс повторяется для следующего числа, так что итоговая вероятность что первое найденное число действительно простое равно p/(p+(1-p)*0.01)
Очевидно, что избавиться от p в формуле невозможно, так как если бы простых чисел вообще не существовало (p=0), то алгоритм остановился на составном, ложно объявленном простым т.е., итоговая вероятность 0, ка ки должно быть по формуле), а если бы каждое число было простым (p=1), то ответ 1 (опять-таки, согласуется)
Задача требует некоторой аккуратности, но не сложная (если яне пропустил какой-то подвох:)
no subject
Date: 2015-11-29 11:44 am (UTC)В таком случае, двукратное применение к составному числу будет давать правильный ответ в 99% случаев.
Среди 1000 битных чисел доля простых составляет примерно 1/ log(2^1000) = 0,001/0.69 = 0.00145.
Если человек взял число, и обнаружил, что оно простое - то 0.00145 сценариев, и что оно действительно простое, и (1-0.00145)*0.01 - что оно составное, ложно распознанное как простое. То есть, примерно 15%, что найденное число действительно является простым.
no subject
Date: 2015-11-29 11:53 am (UTC)no subject
Date: 2015-11-29 11:56 am (UTC)no subject
Date: 2015-11-29 11:57 am (UTC)Во-вторых, задаче не хватает данных о том, как скоррелированы повторные запуски алгоритма на одном и том же составном числе. Предположим, что они независимы, поэтому вероятность ложного срабатывания после двухкратного запуска равна q=1/100.
В этих предположениях можно нарисовать граф событий и подсчитать вероятность прохождения по плохой ветке (когда полученное число оказалось составным). Искомая вероятность выражается как x=q(1-p)\sum_{n=0}^\infty ((1-p)(1-q))^n. У меня получилось на калькуляторе примерно 0.87 (выходит, какой-то бесполезный метод).
Задачу можно считать легкой, если поцыэнту известно что-нибудь о распределении простых чисел.
no subject
Date: 2015-11-29 11:58 am (UTC)Если решать, то вроде несложно, а вот если пытаться угадать ответ из нескольких вариантов, то могут быть проблемы.
no subject
Date: 2015-11-29 12:04 pm (UTC)Вероятность что случайное 1000 битное число простое ~= 1/693 = (1000*log(2)-1)/(1000*log(2))^2
Обозначим эту вероятность a, а вероятность успеха алгоритма для составного числа (90%) обозначим b.
Вероятность того, что после двух проверок, мы правильно идентифицируем составное число = 1 - (1-b)^2
Для того чтобы найти простое число за n шагов, мы должны попробовать n-1 составное число, причем каждое из них правильно идентифицировать, и на последнем шаге должны взять простое число. Вероятность этого равна
((1-a)*(1-(1-b)^2))^(n-1) * a
суммируя по n получаем а/(1-(1-a)*(1-(1-b)^2)) . Это порядка 12.6%
no subject
Date: 2015-11-29 12:11 pm (UTC)no subject
Date: 2015-11-29 12:27 pm (UTC)no subject
Date: 2015-11-29 12:46 pm (UTC)no subject
Date: 2015-11-29 12:47 pm (UTC)итого 1/693+6.92/693≈0.0114
задача простая, если иметь википедию))
no subject
Date: 2015-11-29 12:48 pm (UTC)да
Date: 2015-11-29 12:50 pm (UTC)no subject
Date: 2015-11-29 12:55 pm (UTC)no subject
Date: 2015-11-29 12:57 pm (UTC)no subject
Date: 2015-11-29 01:09 pm (UTC)Мне интереснее другое. Пассаж про 1000 бит используется с той же целью, что и соседка в задачке с шапкой и фальшивой купюрой?
no subject
Date: 2015-11-29 01:12 pm (UTC)В моделе Крамера будет что-то типа
p / (p + 0.01*(1-p)),
где p=1/ln(2^1000).
no subject
Date: 2015-11-29 01:37 pm (UTC)