|
|
Строка 26: |
Строка 26: |
| | | |
| == Вероятностные классы сложности == | | == Вероятностные классы сложности == |
− | {{Определение
| |
− | |definition =
| |
− | <tex>\mathrm{ZPP}</tex> (от ''zero-error probabilistic polynomial'') — множество языков <tex>L</tex>, для которых <tex>\exists p \forall x</tex>:
| |
− | # <tex>\operatorname{P}(p(x) \ne [x \in L]) = 0</tex>;<br>
| |
− | # <tex>\operatorname{E}[\operatorname{T}(p, x)] = poly(|x|)</tex>.<br>
| |
− | }}
| |
− | <tex>\mathrm{ZPP}</tex> — сложностный класс, такой что программы, удовлетворяющие его ограничениям, не могут делать ошибок, но работают за полиномиальное время только в среднем случае.
| |
− |
| |
− | Напомним, что математическое ожидание является усреднением по вероятностным лентам, а не по входу <tex>x</tex>.
| |
− |
| |
| {{Определение | | {{Определение |
| |definition = | | |definition = |
Строка 63: |
Строка 53: |
| | | |
| == Соотношение вероятностных классов == | | == Соотношение вероятностных классов == |
− | {{Теорема
| |
− | |statement = <tex>\mathrm{P} \subset \mathrm{ZPP} = \mathrm{RP} \cap \mathrm{coRP}</tex>.
| |
− | |proof =
| |
− | Утверждение <tex>\mathrm{P} \subset \mathrm{ZPP}</tex> является очевидным, так как программы, удовлетворяющие ограничениям <tex>\mathrm{P}</tex>, также удовлетворяют ограничениям класса <tex>\mathrm{ZPP}</tex>.
| |
− |
| |
− | Покажем, что <tex>\mathrm{ZPP} = \mathrm{RP} \cap \mathrm{coRP}</tex>.
| |
− | Для этого определим вспомогательный класс <tex>\mathrm{ZPP}_1</tex>.
| |
− | {{Определение
| |
− | |definition =
| |
− | <tex>\mathrm{ZPP}_1</tex> — множество языков <tex>L</tex>, для которых <tex>\exists p \forall x</tex>:
| |
− | # <tex>p(x) \in \{0, 1, ?\}</tex>;
| |
− | # <tex>p(x) \ne \enskip? \Rightarrow p(x) = [x \in L]</tex>;
| |
− | # <tex>\operatorname{P}(p(x) = \enskip?) \le 1/2</tex>;
| |
− | # <tex>\forall r \operatorname{T}(p, x) \le poly(|x|).</tex>
| |
− | }}
| |
− | 1. Сначала докажем, что <tex>\mathrm{ZPP} = \mathrm{ZPP}_1</tex>.
| |
− |
| |
− | 1) <tex>\mathrm{ZPP} \subset \mathrm{ZPP}_1</tex>.
| |
− |
| |
− | Пусть <tex>X</tex> — случайная величина, равная времени работы программы <tex>p</tex> для <tex>\mathrm{ZPP}</tex>, <tex>X > 0</tex>. Запишем [http://ru.wikipedia.org/wiki/Неравенство_Маркова неравенство Маркова]:
| |
− |
| |
− | <tex>\operatorname{P}(X > k \operatorname{E}[X]) \le 1/k</tex>.
| |
− |
| |
− | Подставим <tex>k = 2</tex>. Тогда, если запустить программу <tex>p</tex> для <tex>\mathrm{ZPP}</tex> с ограничением по времени <tex>2E[X]</tex>, она не успеет завершиться с вероятностью, не превышающей <tex>1/2</tex>. Опишем программу <tex>q</tex> для <tex>\mathrm{ZPP}_1</tex>. Она будет возвращать <tex>?</tex>, если <tex>p</tex> не успеет завершиться, а иначе — результат работы программы <tex>p</tex>. Заметим, что <tex>q</tex> работает полиномиальное время, так как <tex>E[X]</tex> ограничено некоторым полиномом по определению класса <tex>\mathrm{ZPP}</tex>.
| |
− |
| |
− | 2) <tex>\mathrm{ZPP_1} \subset \mathrm{ZPP}</tex>.
| |
− | Будем запускать программу <tex>p</tex> для <tex>\mathrm{ZPP_1}</tex>, пока не получим ответ, отличный от <tex>?</tex>. Математическое ожидание количества запусков <tex>p</tex> не превышает <tex>\sum\limits_{k = 0}^\infty \frac{k}{2^k} = 2</tex>. Значит, новая программа будет в среднем работать за полиномиальное время, что и требуется для класса <tex>\mathrm{ZPP}</tex>.
| |
− |
| |
− | 2. Теперь покажем, что <tex>\mathrm{ZPP}_1 = \mathrm{RP} \cap \mathrm{coRP}</tex>.
| |
− |
| |
− | 1) <tex>\mathrm{ZPP}_1 \subset \mathrm{RP}</tex>. Достаточно вместо <tex>?</tex> возвращать <tex>0</tex>.
| |
− |
| |
− | 2) <tex>\mathrm{ZPP}_1 \subset\mathrm{coRP}</tex>. Достаточно вместо <tex>?</tex> возвращать <tex>1</tex>.
| |
− |
| |
− | 3) <tex>\mathrm{ZPP}_1 \supset \mathrm{RP} \cap \mathrm{coRP}</tex>.
| |
− | Пусть программа <tex>p_1</tex> удовлетворяет ограничениям <tex>\mathrm{RP}</tex> и ошибается на словах из языка <tex>L</tex> с вероятностью не более <tex>1/2</tex>, а программа <tex>p_2</tex> удовлетворяет ограничениям <tex>\mathrm{coRP}</tex> и ошибается на словах не из языка <tex>L</tex> с аналогичной вероятностью. Построим программу <tex>q</tex> для <tex>\mathrm{ZPP}_1</tex>:
| |
− | <tex>q</tex>(x)
| |
− | '''if''' <tex>p_2</tex>(x) = 0
| |
− | '''return''' 0
| |
− | '''if''' <tex>p_1</tex>(x) = 1
| |
− | '''return''' 1
| |
− | '''return''' ?
| |
− |
| |
− | Вероятность вывести <tex>?</tex> есть <tex>\operatorname{P}(p_2(x) = 1, p_1(x) = 0) \le 1/2</tex>.
| |
− | }}
| |
− |
| |
| {{Теорема | | {{Теорема |
| |statement = <tex>\mathrm{RP} \subset \mathrm{NP} \subset \mathrm{PP} \subset \mathrm{PS}</tex>. | | |statement = <tex>\mathrm{RP} \subset \mathrm{NP} \subset \mathrm{PP} \subset \mathrm{PS}</tex>. |
Вероятностные вычисления — один из подходов в теории вычислительной сложности, в котором программы получают доступ, говоря неформально, к генератору случайных чисел. Мы рассмотрим классы сложности, для которых программы могут работать за полиномиальное время и делать односторонние, двусторонние ошибки или работать за полиномиальное время лишь в среднем случае.
Основные определения
Определение: |
Вероятностная лента — бесконечная в одну сторону последовательность битов, распределение которых подчиняется некоторому вероятностному закону (обычно считают, что биты в различных позициях независимы и вероятность нахождения [math]0[/math] или [math]1[/math] в каждой позиции равна [math]1/2[/math]). |
Определение: |
Вероятностная машина Тьюринга (ВМТ) — детерминированная машина Тьюринга, имеющая вероятностную ленту. Переходы в ВМТ могут осуществляться с учетом информации, считанной с вероятностной ленты. |
Используя тезис Черча-Тьюринга, ВМТ можно сопоставить программы, имеющие доступ к случайным битам. Обращение к очередному биту можно трактовать как вызов специальной функции random(). При этом также будем предполагать, что вероятностная лента является неявным аргументом программы или ВМТ, т.е. [math]p(x) = p(x, r)[/math], где [math]r[/math] — вероятностная лента.
Введем вероятностное пространство [math](\Omega, \Sigma, \operatorname{P})[/math], где пространство элементарных исходов [math]\Omega[/math] — множество всех вероятностных лент, [math]\Sigma[/math] — сигма-алгебра подмножеств [math]\Omega[/math], [math]\operatorname{P}[/math] — вероятностная мера, заданная на [math]\Sigma[/math]. Будем считать, что [math]\Sigma[/math] порождена событиями, зависящими лишь от конечного числа бит вероятностной ленты (то есть существующими в дискретных вероятностных пространствах). Покажем, что любой предикат от ВМТ является событием.
Теорема: |
Пусть [math]m[/math] — ВМТ. Тогда для любых [math]x[/math] и [math]A[/math] — предиката от [math]m[/math] выполняется [math]R = \{r \bigm| A(m(x, r))\} \in \Sigma[/math], т.е. [math]R[/math] измеримо. |
Доказательство: |
[math]\triangleright[/math] |
[math]R = \bigcup\limits_{i = 0}^\infty R_i[/math], где [math]R_i = \{r \bigm| A(m(x, r)), m[/math] прочитала ровно [math]i[/math] первых символов с [math]r\}[/math]. Это верно, поскольку мы рассматриваем только завершающиеся ВМТ. Кроме того, из определения [math]R_i[/math] следует, что они дизъюнктны.
[math]R_i \in \Sigma[/math] как зависящие от [math]i[/math] первых битов вероятностной ленты, [math]\operatorname{P}(R_i) = \frac{1}{2^i} \cdot |\{s \bigm| |s| = i, s[/math] — префикс [math]r \in R_i\}|[/math].
[math]R \in \Sigma[/math] как счетное объединение событий, при этом из их дизъюнктности следует, что [math]\operatorname{P}(R) = \sum\limits_{i = 0}^{\infty} \operatorname{P}(R_i)[/math]. |
[math]\triangleleft[/math] |
Вероятностные классы сложности
Определение: |
[math]\mathrm{RP}[/math] (от randomized polynomial) — множество языков [math]L[/math], для которых [math]\exists p \forall x[/math]:
- [math]x \notin L \Rightarrow \operatorname{P}(p(x) = 0) = 1[/math];
- [math]x \in L \Rightarrow \operatorname{P}(p(x) = 1) \ge 1/2[/math];
- [math]\forall r \operatorname{T}(p, x) \le poly(|x|).[/math]
|
[math]\mathrm{RP}[/math] — сложностный класс, допускающий ошибки программ на словах из [math]L[/math].
Заметим, что константа [math]1/2[/math] в пункте 2 определения [math]\mathrm{RP}[/math] может быть заменена на любую другую из промежутка [math](0, 1)[/math], поскольку требуемой вероятности можно добиться множественным запуском программы.
[math]\mathrm{RP}[/math] можно рассматривать как вероятностный аналог класса [math]\mathrm{NP}[/math], предполагая, что вероятность угадать сертификат в случае его существования не менее [math]1/2[/math].
Определение: |
[math]\mathrm{coRP} = \{L \bigm| \overline L \in \mathrm{RP}\}[/math]. |
Класс [math]\mathrm{coRP}[/math] допускает ошибки программ на словах, не принадлежащих [math]L[/math].
Определение: |
[math]\mathrm{PP}[/math] (от probabilistic polynomial) — множество языков [math]L[/math], для которых [math]\exists p \forall x[/math]:
- [math]\operatorname{P}(p(x) = [x \in L]) \gt 1/2[/math];
- [math]\forall r \operatorname{T}(p, x) \le poly(|x|)[/math].
|
[math]\mathrm{PP}[/math] также допускает двусторонние ошибки, но является более широким по сравнению с [math]\mathrm{BPP}[/math].
Соотношение вероятностных классов
Теорема: |
[math]\mathrm{RP} \subset \mathrm{NP} \subset \mathrm{PP} \subset \mathrm{PS}[/math]. |
Доказательство: |
[math]\triangleright[/math] |
1. [math]\mathrm{RP} \subset \mathrm{NP}[/math]. Если в программе для [math]L \in \mathrm{RP}[/math] заменить все вызовы random() на недетерминированный выбор, то получим программу для [math]L[/math] с ограничениями [math]\mathrm{NP}[/math].
2. [math]\mathrm{NP} \subset \mathrm{PP}[/math]. Приведем программу [math]q[/math] с ограничениями класса [math]\mathrm{PP}[/math], которая разрешает [math]L \in \mathrm{NP}[/math]. Пусть функция infair_coin() моделирует нечестную монету, а именно возвращает единицу с вероятностью [math]1/2 - \varepsilon[/math], где [math]\varepsilon[/math] мы определим позже, и ноль с вероятностью [math]1/2 + \varepsilon[/math]. Пусть также [math]V[/math] — верификатор сертификатов для [math]L[/math]. Тогда [math]q[/math] будет выглядеть следующим образом:
[math]q[/math](x)
c <- случайный сертификат
if [math]V[/math](x, c)
return 1
return infair_coin()
Необходимо удовлетворить условию [math]\operatorname{P}(q(x) = [x \in L]) \gt 1/2[/math].
Пусть [math]x \notin L[/math]. В этом случае [math]V(x, c)[/math] вернет [math]0[/math] и результат работы программы будет зависеть от нечестной монеты. Она вернет [math]0[/math] с вероятностью [math]1/2 + \varepsilon \gt 1/2[/math].
Пусть [math]x \in L[/math]. Тогда по формуле полной вероятности [math]\operatorname{P}(q(x) = 1) = p_0 + (1 - p_0) (1/2 - \varepsilon)[/math], где [math]p_0[/math] — вероятность угадать правильный сертификат. Заметим, что поскольку длина всех сертификатов ограничена некоторым полиномом [math]s(n), n = |x|[/math] и существует хотя бы один правильный сертификат, [math]p_0 \ge 2^{-s(n)}[/math]. Найдем [math]\varepsilon[/math] из неравенства [math]\operatorname{P}(q(x) = 1) \gt 1/2[/math]:
[math]p_0 + 1/2 - \varepsilon - p_0 / 2 + p_0 \varepsilon \gt 1/2[/math];
[math]p_0 / 2 + (p_0 - 1)\varepsilon \gt 0[/math];
[math]\varepsilon \lt \frac{p_0}{2 (1 - p_0)}[/math].
Достаточно взять [math]\varepsilon \le p_0 / 2[/math]. Из сделанного выше замечания следует, что работу функции infair_coin() можно смоделировать с помощью не более чем [math]s(n) + 1[/math] вызовов random(). Также учтем, что длина сертификата и время работы [math]V[/math] полиномиальны относительно [math]|x|[/math]. Таким образом, мы построили программу [math]q[/math], удовлетворяющую ограничениям класса [math]\mathrm{PP}[/math].
3. [math]\mathrm{PP} \subset \mathrm{PS}[/math]. Пусть [math]p[/math] — программа для языка [math]L \in \mathrm{PP}[/math]. Она используют не более чем полиномиальное количество вероятностных бит, так как сама работает за полиномиальное время. Тогда программа для [math]\mathrm{PS}[/math] будет перебирать все участки вероятностных лент нужной полиномиальной длины и запускать на них [math]p[/math]. Ответом будет [math]0[/math] или [math]1[/math] в зависимости от того, каких ответов [math]p[/math] оказалось больше. |
[math]\triangleleft[/math] |
Теорема: |
[math]\mathrm{RP} \cup \mathrm{coRP} \subset \mathrm{BPP}[/math]. |
Доказательство: |
[math]\triangleright[/math] |
Пусть [math]p[/math] — программа для [math]L \in \mathrm{RP}[/math]. Программу [math]q[/math] для [math]\mathrm{BPP}[/math] определим следующим образом:
[math]q[/math](x)
u <- [math]p[/math](x)
v <- [math]p[/math](x)
return u or v
Пусть [math]x \in L[/math]. В этом случае вероятность ошибки равна [math]\operatorname{P}(u = 0, v = 0) = \operatorname{P}(u = 0) \cdot \operatorname{P}(v = 0) \le 1/4[/math].
Пусть [math]x \notin L[/math]. Тогда с вероятностью [math]1[/math] будет верно [math]u = 0, v = 0[/math] и [math]q[/math] вернет правильный ответ.
Аналогично доказывается, что [math]\mathrm{coRP} \subset \mathrm{BPP}[/math]. |
[math]\triangleleft[/math] |
См. также
Литература