Московский государственный университет имени М.В.Ломоносова
Опубликован: 15.03.2007 | Доступ: свободный | Студентов: 611 / 26 | Оценка: 5.00 / 4.50 | Длительность: 19:30:00
Специальности: Программист
Лекция 3:

Вероятностные алгоритмы и класс BPP. Проверка простоты числа

< Лекция 2 || Лекция 3: 12 || Лекция 4 >
Аннотация: В лекции описаны основные особенности вероятностных машин Тьюринга, рассмотрены условия принадлежности предикатов к классу BPP, приведены Малая теорема Ферма и Китайская теорема об остатках, рассмотрен алгоритм проверки простоты числа и его анализ.

В вероятностных МТ (ВМТ), как и в недетерминированных, имеются состояния, из которых возможен переход в несколько (больше одного) состояний. Отличие состоит в том, что состояние, куда ВМТ делает переход, определяется результатом некоторого случайного процесса ("подбрасывания монеты"). Нужно оговорить, какие монеты допускаются. Например, если взять монету, вероятность выпадения герба для которой равна невычислимому числу, то возможности ВМТ, использующей подбрасывание такой монеты, будут больше, чем хотелось бы; она сможет вычислить и некоторые неразрешимые предикаты.

Обычно считают, что вероятности выпадения одинаковы для обеих сторон монеты, а результат подбрасывания отождествляется с числом 0 или 1.

Хотя для ВМТ нельзя сказать, какой в точности ответ она выдаст, можно определить вероятность того или иного ответа.

Определение 3.1. Предикат L принадлежит классу BPP, если существуют такие ВМТ M и полином p(n), что машина M заведомо остановится за время, не превосходящее p(|x|), причем

L(x)=1 \Longrightarrow M с вероятностью большей 2/3 дает ответ "да";

L(x)=0 \Longrightarrow M с вероятностью большей 2/3 дает ответ "нет".

Если в этом определении заменить число 2/3 на любое фиксированное число, большее 1/2, класс BPP не изменится. Есть простой способ добиться вероятности, сколь угодно близкой к 1. Возьмем несколько одинаковых машин, запустим их все, а окончательным результатом будем считать мнение большинства. Если вероятность правильного ответа для каждого экземпляра машины равна c>1/2, то можно доказать, что вероятность правильного ответа после голосования n машин не меньше 1-\lambda^n, где \lambda=2\sqrt{c(1-c)}<1.

Замечание 3.1. Представить физическую реализацию НМТ очень трудно (вспомним, что нам придется поместить в нее всезнайку Мерлина). А вероятностные машины вполне могут мыслиться как реальные устройства. Поэтому предикаты из класса BPP вполне можно считать реально вычислимыми.

Класс BPP можно определить и с помощью предикатов от двух переменных, как это было сделано для класса NP.

Определение 3.2. Предикат L принадлежит классу BPP, если существуют такие полином q(\cdot) и предикат R(\cdot,\cdot)\in\P, что

L(x)=1 \Longrightarrow доля слов r длины q(|x|), для которых выполнено R(x,r), больше 2/3 ;

L(x)=0 \Longrightarrow доля слов r длины q(|x|), для которых выполнено R(x,r), меньше 1/3.

Теорема 3.1. Определения 3.1 и 3.2 эквивалентны.

Доказательство Опр. 3.1 \Longrightarrow Полагаем q(n)=p(n) (количество подбрасываний монеты не превосходит общего числа действий). Определим предикат R(x,r)= "машина M на входе x дает ответ "да" при указанной в r последовательности результатов подбрасываний монеты". Этот предикат по очевидным причинам удовлетворяет определению 3.2.

Опр. 3.2 \Longrightarrow опр. 3.1. Случайно выбираем слово r длины q(|x|) и подставляем в предикат, затем вычисляем значение предиката. Такая ВМТ удовлетворяет определению 3.1.

Определение 3.2 допускает следующее наглядное толкование. Отметим на плоскости (x,y) точки из множества \{(x,y):R(x,y)\wedge(|y|=q(|x|))\}. Для x=x_0 рассмотрим сечение \{(x,y):R(x,y)\double\wedge (|y|=q(|x|))\wedge(x=x_0)\} этого множества. Предикат R(\cdot,\cdot), участвующий в определении 3.2, обладает таким странным свойством, что мера этого сечения при любом x_0 либо больше 2/3, либо меньше 1/3. Это разделяет значения x на две категории: одна соответствует истинности предиката L, другая — ложности.


Рис. 3.1.

Классический пример задачи из BPP представляет проверка простоты числа: дано число n, требуется определить, простое ли оно. Для этой задачи существует вероятностный алгоритм, работающий за полиномиальное время; он будет сейчас описан.

Необходимые сведения из теории чисел.

Подробное изложение элементарной теории чисел содержится в книге [2]. Мы лишь напомним две теоремы, которые будут важны при анализе работы алгоритма проверки простоты числа.

Малая теорема Ферма. Если n — простое и n\nmid a, то a^{n-1}\equiv1\pmod n.

Китайская теорема об остатках. Пусть n=uv — разложение числа на взаимно простые множители. Тогда \ZZ/n\ZZ=\ZZ/u\ZZ\times\ZZ/v\ZZ.

Другими словами, существует взаимно однозначное соответствие между остатками от деления на n и парами остатков от деления на u и на v. {И это соответствие уважает операции сложения и умножения.)

Из малой теоремы Ферма следует, что a^{n-1}\not\equiv1\hskip-1pt\pmod n позволяет утверждать, что n — составное (говорят, что a является свидетелем непростоты числа n ). Это свидетельство косвенное — явного разложения n на множители мы не получаем — и сильное: часто достаточно проверки при a=2!

Однако проверки малой теоремы Ферма даже при всех a может оказаться недостаточно. Алгоритм проверки будет использовать свидетелей еще одного типа: если b^2\equiv1\pmod n, а b\not\equiv\pm1\pmod n, то n — составное; n и b-1 имеют общий делитель, больший 1. Поэтому свидетели такого вида (вообще говоря, гораздо более редко появляющиеся) позволяют сразу же указать разложение n (против простоты которого они свидетельствуют) на два множителя за полиномиальное время (наибольший общий делитель (x,y) двух чисел x и y можно найти за полиномиальное время, см. ниже).

Необходимые сведения из алгоритмической теории чисел.

Арифметические операции над числами можно выполнять за полиномиальное время от длины их записи (число n записывается \lceil\log n\rceil\double=O(\log n) знаками). Например, схема умножения чисел n, m столбиком имеет размер O(\log n\log m), растущий квадратично от длины входа. Хотя квадрат от длины входа уже достаточно мал, чтобы быть полиномиальным, заметим, что для умножения n -значных чисел есть и более экономные схемы размера O(n\log n\log\log n), см.[ "Что такое алгоритм?" ] или [7, т. 2, р.4.3.3].

В модулярной арифметике (арифметике остатков по модулю заданного числа q ) можно вычислить a^n по модулю q схемой полиномиального размера от длины входа (a,n,q) (в обычной арифметике даже результат возведения в степень может иметь экспоненциальный размер). Для этого нужно вычислить остатки от степеней a^{2^k} последовательным возведением в квадрат и затем перемножить те из полученных чисел, которым соответствуют 1 в двоичной записи числа n.

Наибольший общий делитель двух чисел можно найти, пользуясь алгоритмом Евклида, использующим рекурсивно равенство (x,y)\double=(y,x\bmod y). Если делить большее число на меньшее, то за каждые два шага длина записи меньшего числа уменьшается на константу.

Существует также алгоритм проверки того, что из числа извлекается нацело корень k -й степени. Это можно сделать, найдя достаточно точно приближенное значение корня и возведя ближайшее к нему целое число в k -ю степень. Найти приближенное значение \sqrt[k\mkern3mu]{x} можно с помощью рекуррентной последовательности

a_{n+1}=\frac{1}{k}\left((k-1)a_n+\frac{x}{a_n^{k-1}}\right),
если выбрать подходящее значение a_0. Детали этого (полиномиального) алгоритма оставляются читателю для самостоятельного обдумывания.

Заметим, что все схемы, о которых шла речь выше, могут быть построены МТ за полиномиальное время. Так что все перечисленные задачи принадлежат классу P.

< Лекция 2 || Лекция 3: 12 || Лекция 4 >