Вероятностные вычисления. Вероятностная машина Тьюринга — различия между версиями
(→Вероятностные сложностные классы) |
|||
Строка 30: | Строка 30: | ||
<tex>\mathrm{ZPP}</tex> (от ''zero-error probabilistic polynomial'') — множество языков <tex>L</tex>, для которых <tex>\exists p \forall x</tex>: | <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{P}(p(x) \ne [x \in L]) = 0</tex>;<br> | ||
− | # <tex>\operatorname{E}[\operatorname{T}(p | + | # <tex>\operatorname{E}[\operatorname{T}(p, x)] = poly(|x|)</tex>.<br> |
}} | }} | ||
<tex>\mathrm{ZPP}</tex> — сложностный класс, такой что программы, удовлетворяющие его ограничениям, не могут делать ошибок, но работают за полиномиальное время только в среднем случае. | <tex>\mathrm{ZPP}</tex> — сложностный класс, такой что программы, удовлетворяющие его ограничениям, не могут делать ошибок, но работают за полиномиальное время только в среднем случае. | ||
Строка 41: | Строка 41: | ||
# <tex>x \notin L \Rightarrow \operatorname{P}(p(x) = 0) = 1</tex>;<br> | # <tex>x \notin L \Rightarrow \operatorname{P}(p(x) = 0) = 1</tex>;<br> | ||
# <tex>x \in L \Rightarrow \operatorname{P}(p(x) = 1) \ge 1/2</tex>;<br> | # <tex>x \in L \Rightarrow \operatorname{P}(p(x) = 1) \ge 1/2</tex>;<br> | ||
− | # <tex>\forall r \operatorname{T}(p | + | # <tex>\forall r \operatorname{T}(p, x) \le poly(|x|).</tex> |
}} | }} | ||
<tex>\mathrm{RP}</tex> — сложностный класс, допускающий ошибки программ на словах из <tex>L</tex>. | <tex>\mathrm{RP}</tex> — сложностный класс, допускающий ошибки программ на словах из <tex>L</tex>. | ||
Строка 58: | Строка 58: | ||
<tex>\mathrm{BPP}</tex> (от ''bounded probabilistic polynomial'') — множество языков <tex>L</tex>, для которых <tex>\exists p \forall x</tex>: | <tex>\mathrm{BPP}</tex> (от ''bounded probabilistic polynomial'') — множество языков <tex>L</tex>, для которых <tex>\exists p \forall x</tex>: | ||
# <tex>\operatorname{P}(p(x) = [x \in L]) \ge 2/3</tex>; | # <tex>\operatorname{P}(p(x) = [x \in L]) \ge 2/3</tex>; | ||
− | # <tex>\forall r \operatorname{T}(p | + | # <tex>\forall r \operatorname{T}(p, x) \le poly(|x|)</tex>. |
}} | }} | ||
<tex>\mathrm{BPP}</tex> — сложностный класс, допускающий двусторонние ошибки. | <tex>\mathrm{BPP}</tex> — сложностный класс, допускающий двусторонние ошибки. | ||
Строка 67: | Строка 67: | ||
<tex>\mathrm{PP}</tex> (от ''probabilistic polynomial'') — множество языков <tex>L</tex>, для которых <tex>\exists p \forall x</tex>: | <tex>\mathrm{PP}</tex> (от ''probabilistic polynomial'') — множество языков <tex>L</tex>, для которых <tex>\exists p \forall x</tex>: | ||
# <tex>\operatorname{P}(p(x) = [x \in L]) > 1/2</tex>; | # <tex>\operatorname{P}(p(x) = [x \in L]) > 1/2</tex>; | ||
− | # <tex>\forall r \operatorname{T}(p | + | # <tex>\forall r \operatorname{T}(p, x) \le poly(|x|)</tex>. |
}} | }} | ||
<tex>\mathrm{PP}</tex> также допускает двусторонние ошибки, но является более широким по сравнению с <tex>\mathrm{BPP}</tex>. | <tex>\mathrm{PP}</tex> также допускает двусторонние ошибки, но является более широким по сравнению с <tex>\mathrm{BPP}</tex>. | ||
Строка 85: | Строка 85: | ||
# <tex>p(x) \ne \enskip? \Rightarrow p(x) = [x \in L]</tex>; | # <tex>p(x) \ne \enskip? \Rightarrow p(x) = [x \in L]</tex>; | ||
# <tex>\operatorname{P}(p(x) = \enskip?) \le 1/2</tex>; | # <tex>\operatorname{P}(p(x) = \enskip?) \le 1/2</tex>; | ||
− | # <tex>\forall r \operatorname{T}(p | + | # <tex>\forall r \operatorname{T}(p, x) \le poly(|x|).</tex> |
}} | }} | ||
1. Сначала докажем, что <tex>\mathrm{ZPP} = \mathrm{ZPP}_1</tex>. | 1. Сначала докажем, что <tex>\mathrm{ZPP} = \mathrm{ZPP}_1</tex>. | ||
Строка 108: | Строка 108: | ||
3) <tex>\mathrm{ZPP}_1 \supset \mathrm{RP} \cap \mathrm{coRP}</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>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>: | ||
− | q(x) | + | <tex>q</tex>(x) |
'''if''' <tex>p_2</tex>(x) = 0 | '''if''' <tex>p_2</tex>(x) = 0 | ||
'''return''' 0 | '''return''' 0 | ||
Строка 124: | Строка 124: | ||
2. <tex>\mathrm{NP} \subset \mathrm{PP}</tex>. Приведем программу <tex>q</tex> с ограничениями класса <tex>\mathrm{PP}</tex>, которая разрешает <tex>L \in \mathrm{NP}</tex>. Пусть функция ''infair_coin''() моделирует нечестную монету, а именно возвращает единицу с вероятностью <tex>1/2 - \varepsilon</tex>, где <tex>\varepsilon</tex> мы определим позже, и ноль с вероятностью <tex>1/2 + \varepsilon</tex>. Пусть также <tex>V</tex> — верификатор сертификатов для <tex>L</tex>. Тогда <tex>q</tex> будет выглядеть следующим образом: | 2. <tex>\mathrm{NP} \subset \mathrm{PP}</tex>. Приведем программу <tex>q</tex> с ограничениями класса <tex>\mathrm{PP}</tex>, которая разрешает <tex>L \in \mathrm{NP}</tex>. Пусть функция ''infair_coin''() моделирует нечестную монету, а именно возвращает единицу с вероятностью <tex>1/2 - \varepsilon</tex>, где <tex>\varepsilon</tex> мы определим позже, и ноль с вероятностью <tex>1/2 + \varepsilon</tex>. Пусть также <tex>V</tex> — верификатор сертификатов для <tex>L</tex>. Тогда <tex>q</tex> будет выглядеть следующим образом: | ||
− | q(x) | + | <tex>q</tex>(x) |
− | c <- случайный сертификат | + | c <- случайный сертификат |
− | '''if''' V(x, c) | + | '''if''' <tex>V</tex>(x, c) |
'''return''' 1 | '''return''' 1 | ||
'''return''' infair_coin() | '''return''' infair_coin() | ||
Строка 141: | Строка 141: | ||
<tex>\varepsilon < \frac{p_0}{2 (1 - p_0)}</tex>. | <tex>\varepsilon < \frac{p_0}{2 (1 - p_0)}</tex>. | ||
− | Достаточно взять <tex>\varepsilon \le p_0 / 2</tex>. Из сделанного выше замечания следует, что работу функции ''infair_coin''() можно смоделировать с помощью не более чем <tex>s(n) + 1</tex> вызовов ''random''(). Таким образом, мы построили программу <tex>q</tex>, удовлетворяющую ограничениям класса <tex>\mathrm{PP}</tex>. | + | Достаточно взять <tex>\varepsilon \le p_0 / 2</tex>. Из сделанного выше замечания следует, что работу функции ''infair_coin''() можно смоделировать с помощью не более чем <tex>s(n) + 1</tex> вызовов ''random''(). Также учтем, что длина сертификата и время работы <tex>V</tex> полиномиальны относительно <tex>|x|</tex>. Таким образом, мы построили программу <tex>q</tex>, удовлетворяющую ограничениям класса <tex>\mathrm{PP}</tex>. |
3. <tex>\mathrm{PP} \subset \mathrm{PS}</tex>. Пусть <tex>p</tex> — программа для языка <tex>L \in \mathrm{PP}</tex>. Она используют не более чем полиномиальное количество вероятностных бит, так как сама работает за полиномиальное время. Тогда программа для <tex>\mathrm{PS}</tex> будет перебирать все участки вероятностных лент нужной полиномиальной длины и запускать на них <tex>p</tex>. Ответом будет <tex>0</tex> или <tex>1</tex> в зависимости от того, каких ответов <tex>p</tex> оказалось больше. | 3. <tex>\mathrm{PP} \subset \mathrm{PS}</tex>. Пусть <tex>p</tex> — программа для языка <tex>L \in \mathrm{PP}</tex>. Она используют не более чем полиномиальное количество вероятностных бит, так как сама работает за полиномиальное время. Тогда программа для <tex>\mathrm{PS}</tex> будет перебирать все участки вероятностных лент нужной полиномиальной длины и запускать на них <tex>p</tex>. Ответом будет <tex>0</tex> или <tex>1</tex> в зависимости от того, каких ответов <tex>p</tex> оказалось больше. | ||
Строка 151: | Строка 151: | ||
|proof = | |proof = | ||
Пусть <tex>p</tex> — программа для <tex>L \in \mathrm{RP}</tex>. Программу <tex>q</tex> для <tex>\mathrm{BPP}</tex> определим следующим образом: | Пусть <tex>p</tex> — программа для <tex>L \in \mathrm{RP}</tex>. Программу <tex>q</tex> для <tex>\mathrm{BPP}</tex> определим следующим образом: | ||
− | q(x) | + | <tex>q</tex>(x) |
− | u <- p(x) | + | u <- <tex>p</tex>(x) |
− | v <- p(x) | + | v <- <tex>p</tex>(x) |
'''return''' u '''or''' v | '''return''' u '''or''' v | ||
Пусть <tex>x \in L</tex>. В этом случае вероятность ошибки равна <tex>\operatorname{P}(u = 0, v = 0) = \operatorname{P}(u = 0) \cdot \operatorname{P}(v = 0) \le 1/4</tex>. | Пусть <tex>x \in L</tex>. В этом случае вероятность ошибки равна <tex>\operatorname{P}(u = 0, v = 0) = \operatorname{P}(u = 0) \cdot \operatorname{P}(v = 0) \le 1/4</tex>. |
Версия 20:03, 4 июня 2012
Вероятностные вычисления — один из подходов в теории вычислительной сложности, в котором программы получают доступ, говоря неформально, к генератору случайных чисел. Мы рассмотрим классы сложности, для которых программы могут работать за полиномиальное время и делать односторонние, двусторонние ошибки или работать за полиномиальное время лишь в среднем случае.
Содержание
Основные определения
Определение: |
Вероятностная лента — бесконечная в одну сторону последовательность битов, распределение которых подчиняется некоторому вероятностному закону (обычно считают, что биты в различных позициях независимы и вероятность нахождения | или в каждой позиции равна ).
Определение: |
Вероятностная машина Тьюринга (ВМТ) — детерминированная машина Тьюринга, имеющая вероятностную ленту. Переходы в ВМТ могут осуществляться с учетом информации, считанной с вероятностной ленты. |
Используя тезис Черча-Тьюринга, ВМТ можно сопоставить программы, имеющие доступ к случайным битам. Обращение к очередному биту можно трактовать как вызов специальной функции random(). При этом также будем предполагать, что вероятностная лента является неявным аргументом программы или ВМТ, т.е. , где — вероятностная лента.
Введем вероятностное пространство , где пространство элементарных исходов — множество всех вероятностных лент, — сигма-алгебра подмножеств , — вероятностная мера, заданная на . Будем считать, что порождена событиями, зависящими лишь от конечного числа бит вероятностной ленты (то есть существующими в дискретных вероятностных пространствах). Покажем, что любой предикат от ВМТ является событием.
Теорема: |
Пусть — ВМТ. Тогда для любых и — предиката от выполняется , т.е. измеримо. |
Доказательство: |
, где прочитала ровно первых символов с . Это верно, поскольку мы рассматриваем только завершающиеся ВМТ. Кроме того, из определения следует, что они дизъюнктны. как зависящие от первых битов вероятностной ленты, — префикс . как счетное объединение событий, при этом из их дизъюнктности следует, что . |
Вероятностные классы сложности
Определение: |
— сложностный класс, такой что программы, удовлетворяющие его ограничениям, не могут делать ошибок, но работают за полиномиальное время только в среднем случае.
Напомним, что математическое ожидание является усреднением по вероятностным лентам, а не по входу
.
Определение: |
— сложностный класс, допускающий ошибки программ на словах из . Заметим, что константа в пункте 2 определения может быть заменена на любую другую из промежутка , поскольку требуемой вероятности можно добиться множественным запуском программы.
можно рассматривать как вероятностный аналог класса , предполагая, что вероятность угадать сертификат в случае его существования не менее .
Определение: |
. |
Класс
допускает ошибки программ на словах, не принадлежащих .
Определение: |
| (от bounded probabilistic polynomial) — множество языков , для которых :
— сложностный класс, допускающий двусторонние ошибки. Аналогично сделанному выше замечанию, константу можно заменить на любое число из промежутка . Замена константы на сделало бы данный класс равным (программа, возвращающая результат функции random(), подошла бы для любого языка).
Определение: |
| (от probabilistic polynomial) — множество языков , для которых :
также допускает двусторонние ошибки, но является более широким по сравнению с .
Соотношение вероятностных классов
Теорема: | ||
. | ||
Доказательство: | ||
Утверждение является очевидным, так как программы, удовлетворяющие ограничениям , также удовлетворяют ограничениям класса .Покажем, что . Для этого определим вспомогательный класс .
1. Сначала докажем, что .1) .Пусть неравенство Маркова: — случайная величина, равная времени работы программы для , . Запишем. Подставим . Тогда, если запустить программу для с ограничением по времени , она не успеет завершиться с вероятностью, не превышающей . Опишем программу для . Она будет возвращать , если не успеет завершиться, а иначе — результат работы программы . Заметим, что работает полиномиальное время, так как ограничено некоторым полиномом по определению класса .2) . Будем запускать программу для , пока не получим ответ, отличный от . Математическое ожидание количества запусков не превышает . Значит, новая программа будет в среднем работать за полиномиальное время, что и требуется для класса .2. Теперь покажем, что .1) . Достаточно вместо возвращать .2) . Достаточно вместо возвращать .3) . Пусть программа удовлетворяет ограничениям и ошибается на словах из языка с вероятностью не более , а программа удовлетворяет ограничениям и ошибается на словах не из языка с аналогичной вероятностью. Построим программу для :Вероятность вывести (x) if (x) = 0 return 0 if (x) = 1 return 1 return ? есть . | ||
Теорема: |
. |
Доказательство: |
1. . Если в программе для заменить все вызовы random() на недетерминированный выбор, то получим программу для с ограничениями .2. . Приведем программу с ограничениями класса , которая разрешает . Пусть функция infair_coin() моделирует нечестную монету, а именно возвращает единицу с вероятностью , где мы определим позже, и ноль с вероятностью . Пусть также — верификатор сертификатов для . Тогда будет выглядеть следующим образом:(x) c <- случайный сертификат if (x, c) return 1 return infair_coin() Необходимо удовлетворить условию .Пусть . В этом случае вернет и результат работы программы будет зависеть от нечестной монеты. Она вернет с вероятностью .Пусть по формуле полной вероятности , где — вероятность угадать правильный сертификат. Заметим, что поскольку длина всех сертификатов ограничена некоторым полиномом и существует хотя бы один правильный сертификат, . Найдем из неравенства : . Тогда; ; . Достаточно взять 3. . Из сделанного выше замечания следует, что работу функции infair_coin() можно смоделировать с помощью не более чем вызовов random(). Также учтем, что длина сертификата и время работы полиномиальны относительно . Таким образом, мы построили программу , удовлетворяющую ограничениям класса . . Пусть — программа для языка . Она используют не более чем полиномиальное количество вероятностных бит, так как сама работает за полиномиальное время. Тогда программа для будет перебирать все участки вероятностных лент нужной полиномиальной длины и запускать на них . Ответом будет или в зависимости от того, каких ответов оказалось больше. |
Теорема: |
. |
Доказательство: |
Пусть — программа для . Программу для определим следующим образом:(x) u <- (x) v <- (x) return u or v Пусть . В этом случае вероятность ошибки равна .Пусть Аналогично доказывается, что . Тогда с вероятностью будет верно и вернет правильный ответ. . |