Соотношение вероятностных классов — различия между версиями
(Новая страница: «{{Теорема |statement = <tex>\mathrm{RP} \subset \mathrm{NP} \subset \mathrm{PP} \subset \mathrm{PS}</tex>. |proof = 1. <tex>\mathrm{RP} \subset \mathrm{NP}...») |
|||
| Строка 1: | Строка 1: | ||
| + | {{Теорема | ||
| + | |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 = \mathrm{RP} \cap \mathrm{coRP}</tex>. Тогда из <tex>\mathrm{ZPP} = \mathrm{ZPP}_1</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>. | ||
| Строка 25: | Строка 49: | ||
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> оказалось больше. | ||
| + | }} | ||
| + | |||
| + | {{Теорема | ||
| + | |statement = | ||
| + | <tex>\mathrm{RP} \cup \mathrm{coRP} \subset \mathrm{BPP}</tex>. | ||
| + | |proof = | ||
| + | Пусть <tex>p</tex> — программа для <tex>L \in \mathrm{RP}</tex>. Программу <tex>q</tex> для <tex>\mathrm{BPP}</tex> определим следующим образом: | ||
| + | <tex>q</tex>(x) | ||
| + | u <- <tex>p</tex>(x) | ||
| + | v <- <tex>p</tex>(x) | ||
| + | '''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 \notin L</tex>. Тогда с вероятностью <tex>1</tex> будет верно <tex>u = 0, v = 0</tex> и <tex>q</tex> вернет правильный ответ. | ||
| + | |||
| + | Аналогично доказывается, что <tex>\mathrm{coRP} \subset \mathrm{BPP}</tex>. | ||
}} | }} | ||
== Литература == | == Литература == | ||
* [http://www.cs.princeton.edu/theory/complexity/ Sanjeev Arora, Boaz Barak. Computational Complexity: A Modern Approach] | * [http://www.cs.princeton.edu/theory/complexity/ Sanjeev Arora, Boaz Barak. Computational Complexity: A Modern Approach] | ||
Версия 23:46, 4 июня 2012
| Теорема: |
. |
| Доказательство: |
|
Утверждение является очевидным, так как программы, удовлетворяющие ограничениям , также удовлетворяют ограничениям класса . Докажем, что . Для этого, покажем, что . Тогда из будет следовать требуемое. 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() Необходимо удовлетворить условию . Пусть . В этом случае вернет и результат работы программы будет зависеть от нечестной монеты. Она вернет с вероятностью . Пусть . Тогда по формуле полной вероятности , где — вероятность угадать правильный сертификат. Заметим, что поскольку длина всех сертификатов ограничена некоторым полиномом и существует хотя бы один правильный сертификат, . Найдем из неравенства : ; ; . Достаточно взять . Из сделанного выше замечания следует, что работу функции infair_coin() можно смоделировать с помощью не более чем вызовов random(). Также учтем, что длина сертификата и время работы полиномиальны относительно . Таким образом, мы построили программу , удовлетворяющую ограничениям класса . 3. . Пусть — программа для языка . Она используют не более чем полиномиальное количество вероятностных бит, так как сама работает за полиномиальное время. Тогда программа для будет перебирать все участки вероятностных лент нужной полиномиальной длины и запускать на них . Ответом будет или в зависимости от того, каких ответов оказалось больше. |
| Теорема: |
. |
| Доказательство: |
|
Пусть — программа для . Программу для определим следующим образом: (x) u <- (x) v <- (x) return u or v Пусть . В этом случае вероятность ошибки равна . Пусть . Тогда с вероятностью будет верно и вернет правильный ответ. Аналогично доказывается, что . |