Вероятностные вычисления. Вероятностная машина Тьюринга — различия между версиями
 (→Соотношение вероятностных классов)  | 
				|||
| Строка 105: | Строка 105: | ||
     '''if''' p(x) = 0:  |      '''if''' p(x) = 0:  | ||
       '''return''' 0  |        '''return''' 0  | ||
| − |      '''if'' q(x) = 1:  | + |      '''if''' q(x) = 1:  | 
       '''return''' 1  |        '''return''' 1  | ||
     '''return''' ?  |      '''return''' ?  | ||
| Строка 115: | Строка 115: | ||
|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>.  | ||
|proof =  | |proof =  | ||
| − | + | 1. <tex>\mathrm{RP} \subset \mathrm{NP}</tex>. Если в программе для <tex>L \in \mathrm{RP}</tex> заменить все вызовы ''random''() на недетерминированный выбор, то получим программу для <tex>L</tex> с ограничениями <tex>\mathrm{NP}</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):  |    q(x):  | ||
     c <- случайный сертификат (полиномиальной длины)  |      c <- случайный сертификат (полиномиальной длины)  | ||
| − |      '''  | + |      '''if''' V(x, c):  | 
| + |       '''return''' 1  | ||
| + |     '''return''' infair_coin()  | ||
Необходимо удовлетворить условию <tex>\operatorname{P}(p(x) = [x \in L]) > 1/2</tex>.  | Необходимо удовлетворить условию <tex>\operatorname{P}(p(x) = [x \in L]) > 1/2</tex>.  | ||
Пусть <tex>x \notin L</tex>. В этом случае <tex>V(x, c)</tex> вернет <tex>0</tex> и результат работы программы будет зависеть от нечестной монеты. Она вернет <tex>0</tex> с вероятностью <tex>1/2 + \varepsilon > 1/2</tex>.  | Пусть <tex>x \notin L</tex>. В этом случае <tex>V(x, c)</tex> вернет <tex>0</tex> и результат работы программы будет зависеть от нечестной монеты. Она вернет <tex>0</tex> с вероятностью <tex>1/2 + \varepsilon > 1/2</tex>.  | ||
| − | Пусть <tex>x \in L</tex>. Тогда по формуле полной вероятности <tex>\operatorname{P}(p(x) = 1) = p_0 + (1 - p_0) (1/2 - \varepsilon)</tex>, где <tex>p_0</tex> — вероятность угадать правильный сертификат. Заметим, что поскольку все сертификаты имеют полиномиальную длину и существует хотя бы один правильный сертификат, <tex>p_0</tex> не более чем экспоненциально мала. Найдем <tex>\varepsilon</tex> из неравенства <tex>\operatorname{P}(p(x) = 1) > 1/2</tex>:  | + | Пусть <tex>x \in L</tex>. Тогда [[Формула полной вероятности|по формуле полной вероятности]] <tex>\operatorname{P}(p(x) = 1) = p_0 + (1 - p_0) (1/2 - \varepsilon)</tex>, где <tex>p_0</tex> — вероятность угадать правильный сертификат. Заметим, что поскольку все сертификаты имеют полиномиальную длину и существует хотя бы один правильный сертификат, <tex>p_0</tex> не более чем экспоненциально мала. Найдем <tex>\varepsilon</tex> из неравенства <tex>\operatorname{P}(p(x) = 1) > 1/2</tex>:  | 
| − | |||
| − | |||
| − | <tex>p_0 / 2 + (p_0 - 1)\varepsilon > 0</tex>;  | + | <tex>p_0 + 1/2 - \varepsilon - p_0 / 2 + p_0 \varepsilon > 1/2</tex>; <tex>p_0 / 2 + (p_0 - 1)\varepsilon > 0</tex>; <tex>\varepsilon < \frac{p_0}{2 (1 - p_0)}</tex>.  | 
| − | <tex>\varepsilon < p_0 (  | + | Достаточно взять <tex>\varepsilon < p_0 / 2</tex>. Из сделанного выше замечания следует, что работу функции ''infair_coin''() можно смоделировать с помощью полиномиального количества вызовов ''random''(). Таким образом, мы построили программу <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> оказалось больше.  | |
}}  | }}  | ||
{{Теорема  | {{Теорема  | ||
|statement =  | |statement =  | ||
| − | + | # <tex>\mathrm{RP} \subset \mathrm{BPP}</tex>;<br>  | |
| − | + | # <tex>\mathrm{coRP} \subset \mathrm{BPP}</tex>.  | |
|proof =  | |proof =  | ||
Пусть <tex>p</tex> — программа для <tex>L \in RP</tex>. Программу <tex>q</tex> для <tex>\mathrm{BPP}</tex> определим следующим образом:  | Пусть <tex>p</tex> — программа для <tex>L \in RP</tex>. Программу <tex>q</tex> для <tex>\mathrm{BPP}</tex> определим следующим образом:  | ||
| Строка 150: | Строка 148: | ||
Пусть <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>.  | ||
| − | Пусть <tex>x \notin L</tex>. Тогда <tex>u = 0, v = 0</tex> и <tex>q</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>.  | Аналогично доказывается, что <tex>\mathrm{coRP} \subset \mathrm{BPP}</tex>.  | ||
Версия 13:24, 31 мая 2012
Вероятностные вычисления — один из подходов в теории вычислительной сложности, в котором программы получают доступ, говоря неформально, к генератору случайных чисел. Мы рассмотрим классы сложности, для которых программы могут работать за полиномиальное время и делать односторонние, двусторонние ошибки или работать за полиномиальное время лишь в среднем случае.
Содержание
Основные определения
| Определение: | 
| Вероятностная лента — бесконечная в одну сторону последовательность битов, распределение которых подчиняется некоторому вероятностному закону (обычно считают, что биты в различных позициях независимы и вероятность нахождения или в каждой позиции равна ). | 
| Определение: | 
| Вероятностная машина Тьюринга (ВМТ) — детерминированная машина Тьюринга, имеющая вероятностную ленту. Переходы в ВМТ могут осуществляться с учетом информации, считанной с вероятностной ленты. | 
Используя тезис Черча-Тьюринга, ВМТ можно сопоставить программы, имеющие доступ к случайным битам. Обращение к очередному биту можно трактовать как вызов специальной функции random(). При этом также будем предполагать, что вероятностная лента является неявным аргументом программы или ВМТ, т.е. , где  — вероятностная лента.
Введем вероятностное пространство , где пространство элементарных исходов — множество всех вероятностных лент, — сигма-алгебра подмножеств , — вероятностная мера, заданная на . Покажем, что любой предикат от ВМТ является событием.
| Теорема: | 
Пусть  — ВМТ. Тогда  — предикат от : , т.е.  измеримо.  | 
| Доказательство: | 
| 
 , прочитала ровно первых символов с вероятностной ленты. , — префикс , дизъюнктны. как счетное объединение множеств, при этом . | 
Вероятностные сложностные классы
| Определение: | 
 (от zero-error probabilistic polynomial) — множество языков , для которых :
  | 
| Определение: | 
 (от randomized polynomial) — множество языков , для которых :
  | 
Заметим, что константа в пункте 2 определения может быть заменена на любую другую из промежутка , поскольку требуемой вероятности можно добиться множественным запуском программы.
можно рассматривать как вероятностный аналог класса , предполагая, что вероятность угадать сертификат в случае его существования не менее .
| Определение: | 
| . | 
| Определение: | 
 (от bounded probabilistic polynomial) — множество языков , для которых :
  | 
Аналогично сделанному выше замечанию, константу можно заменить на любое число из промежутка . Замена константы на сделало бы данный класс равным (программа, возвращающая результат функции random(), подошла бы для любого языка).
| Определение: | 
 (от bounded probabilistic polynomial) — множество языков , для которых :
  | 
Соотношение вероятностных классов
| Теорема: | ||
.  | ||
| Доказательство: | ||
| 
 Утверждение является очевидным, так как программы, удовлетворяющие ограничениям , также удовлетворяют ограничениям класса . Покажем, что . Для этого определим вспомогательный класс . 
 1. Сначала докажем, что . 1) . Пусть — случайная величина, равная времени работы программы для , . Запишем неравенство Маркова: . Подставим . Тогда, если запустить программу для с ограничением по времени , она не успеет завершиться с вероятностью, не превышающей . Опишем программу для . Она будет возвращать , если не успеет завершиться, а иначе — результат работы программы . Заметим, что работает полиномиальное время, так как ограничено некоторым полиномом по определению класса . 2) . Будем запускать программу для , пока не получим ответ, отличный от . Математическое ожидание количества запусков не превышает . Значит, новая программа будет в среднем работать за полиномиальное время, что и требуется для класса . 2. Теперь покажем, что . 1) . Достаточно вместо возвращать . 2) . Достаточно вместо возвращать . 3) . Пусть программа удовлетворяет ограничениям и ошибается на словах из языка с вероятностью не более , а программа удовлетворяет ограничениям и ошибается на словах не из языка с аналогичной вероятностью. Построим программу для :  q(x):
   if p(x) = 0:
     return 0
   if q(x) = 1:
     return 1
   return ?
Вероятность вывести  есть .  | ||
| Теорема: | 
.  | 
| Доказательство: | 
| 
 1. . Если в программе для заменить все вызовы random() на недетерминированный выбор, то получим программу для с ограничениями . 2. . Приведем программу с ограничениями класса , которая разрешает . Пусть функция infair_coin() моделирует нечестную монету, а именно возвращает единицу с вероятностью , где мы определим позже, и ноль с вероятностью . Пусть также — верификатор сертификатов для . Тогда будет выглядеть следующим образом:  q(x):
   c <- случайный сертификат (полиномиальной длины)
   if V(x, c):
     return 1
   return infair_coin()
Необходимо удовлетворить условию . Пусть . В этом случае вернет и результат работы программы будет зависеть от нечестной монеты. Она вернет с вероятностью . Пусть . Тогда по формуле полной вероятности , где — вероятность угадать правильный сертификат. Заметим, что поскольку все сертификаты имеют полиномиальную длину и существует хотя бы один правильный сертификат, не более чем экспоненциально мала. Найдем из неравенства : ; ; . Достаточно взять . Из сделанного выше замечания следует, что работу функции infair_coin() можно смоделировать с помощью полиномиального количества вызовов random(). Таким образом, мы построили программу , удовлетворяющую ограничениям класса . 3. . Пусть — программа для языка . Она используют не более чем полиномиальное количество вероятностных бит, так как сама работает за полиномиальное время. Тогда программа для будет перебирать все участки вероятностных лент нужной полиномиальной длины и запускать на них . Ответом будет или в зависимости от того, каких ответов оказалось больше. | 
| Теорема: | 
# ; 
  | 
| Доказательство: | 
| 
 Пусть — программа для . Программу для определим следующим образом: q(x): u <- p(x) v <- p(x) return u or v Пусть . В этом случае вероятность ошибки равна . Пусть . Тогда с вероятностью будет верно и вернет правильный ответ. Аналогично доказывается, что . |