
- •Лекция 8. Вероятностные алгоритмы.
- •Пример 1. Алгоритм Монте-Карло проверки числа на простоту.
- •Вероятностный метод Монте-Карло:
- •Алгоритмы Лас Вегаса
- •Шервудские алгоритмы.
- •Сравнение вероятностных алгоритмов
- •0,5 Приближение: Для любых m скобок существуют значения переменных, при которых выполнено не менее m/2 скобок.
- •Общая схема применения вероятностных алгоритмов:
Лекция 8. Вероятностные алгоритмы.
Вероятностные алгоритмы предназначены для получения приблизительных ответов на некоторые математические вопросы. Чем дольше работает такой алгоритм, тем точнее полученный ответ.
В вероятностных Машинах Тьюринга (ВМТ), как и в недетерминированных, имеются состояния, из которых возможен переход в несколько (больше одного) состояний. Отличие состоит в том, что состояние, куда ВМТ делает переход, определяется результатом некоторого случайного процесса («подбрасывания монеты»).
Хотя для ВМТ нельзя сказать, какой в точности ответ она выдаст, можно определить вероятность того или иного ответа.
Вероятностные полиномиальные алгоритмы:
Алгоритмы с односторонней ошибкой
RP (Random Polynomial time):
Если ответ «Нет», алгоритм с вероятностью 1 выдает ответ «Нет»;
Если ответ «Да», алгоритм с вероятность больше 2/3 выдает ответ «Да»
Co-RP
Если ответ «Да», алгоритм с вероятностью 1 выдает ответ «Да»;
Если ответ «Нет», алгоритм с вероятность больше 2/3 выдает ответ «Нет»
Алгоритмы с двусторонней ошибкой.
Если ответ «Да», алгоритм с вероятностью больше 2/3 выдает ответ «Да»;
Если ответ «Нет», алгоритм с вероятность больше 2/3 выдает ответ «Нет»
Алгоритмы с нулевой ошибкой.
Если ответ «Да», алгоритм с вероятностью больше 2/3 выдает ответ «Да»;
В остальных случаях алгоритм говорит «Не знаю».
Алгоритмы Монте-Карло.
В алгоритме Монте-Карло случайным образом выбираются некоторые значения и с этими значениями производятся вычисления.
Алгоритмы Монте Карло всегда выдают какие-либо результаты, однако вероятность того, что результат правильный, возрастает при увеличении времени работы алгоритма. Иногда такие алгоритмы возвращают неправильные ответы.
Алгоритм называется р-правильным, если он возвращает правильный ответ с вероятностью р (1/2 <р <1).
Если число правильных ответов на данном входе превышает единицу, то алгоритм Монте-Карло называется стойким, если возвращаемый им правильный ответ всегда один и тот же.
Результаты алгоритма Монте-Карло можно улучшить двумя способами. Во-первых, можно увеличить время его работы. Во-вторых, можно повторять его несколько раз. Вторая возможность реализуется только, если алгоритм стойкий. В этом случае алгоритм можно вызывать много раз и выбирать тот ответ, который встречается чаще всего.
Пример 1. Алгоритм Монте-Карло проверки числа на простоту.
Задача
проверки простоты числа - пример задачи,
которую относили к классу NP.
Лишь в 2002 г. был найден полиномиальный
алгоритм и тем самым, доказано, что
задача относится к классу Р. Тест Агравала
— Каяла — Саксены (или тест AKS) — это
полиномиальный детерминированный тест
простоты чисел, предложенный индийскими
учёным Маниндрой Агравалом (англ.) и его
двумя студентам. Однако сложность
предложенного алгоритма
,
(n
– тестируемое число), поэтому на практике
он практически не используется. В
настоящее время разрабатываются
модификации теста с меньшей сложностью.
Задача факторизации натурального числа – разложения на простые множители является более сложной задачей. На настоящий момент неизвестны полиномиальные алгоритмы факторизации чисел, хотя и не доказано, что таких алгоритмов не существует. На сегодняшний момент задача относится к классу NP. На предполагаемой большой вычислительной сложности задачи факторизации базируется криптосистема RSA и некоторые другие. Факторизация с полиномиальной сложностью возможна на квантовом компьютере с помощью алгоритма Шора.
Детерминированный
алгоритм проверки числа на простоту
(экспоненциальный): Выбираем все числа
от 2 до
и делим n
на эти числа, пока не будет найден
делитель:
begin;
i :=2;
j:= true;
while (i*i < n and j ) do
if (n mod I =0) then j := false
else i:=i+1;
if j then writeln («Это простое число»)
else writeln («Это составное число»);
end;
Время
работы алгоритма
.
Асимптотическая сложность алгоритма
– экспоненциальная относительно битовой
длины
n.
Пример:
для чисел
,
сложность для больших чисел
.