Вероятностные вычисления. Вероятностная машина Тьюринга — различия между версиями
Строка 1: | Строка 1: | ||
{{В разработке}} | {{В разработке}} | ||
[[Категория: Теория сложности]] | [[Категория: Теория сложности]] | ||
− | '''Вероятностные вычисления''' — один из подходов в теории вычислительной сложности, в котором программы получают доступ к | + | '''Вероятностные вычисления''' — один из подходов в теории вычислительной сложности, в котором программы получают доступ, говоря неформально, к генератору случайных чисел. Мы рассмотрим классы сложности, для которых программы могут работать за полиномиальное время и делать односторонние, двусторонние ошибки или работать за полиномиальное время лишь в среднем случае. |
== Основные определения == | == Основные определения == | ||
{{Определение | {{Определение | ||
|definition = | |definition = | ||
− | '''Вероятностная лента''' — бесконечная последовательность битов, распределение которых подчиняется некоторому вероятностному закону (обычно считают, что вероятность нахождения <tex>0</tex> или <tex>1</tex> в каждой позиции равна <tex>1/2</tex>). | + | '''Вероятностная лента''' — бесконечная в одну сторону последовательность битов, распределение которых подчиняется некоторому вероятностному закону (обычно считают, что биты в различных позициях независимы и вероятность нахождения <tex>0</tex> или <tex>1</tex> в каждой позиции равна <tex>1/2</tex>). |
}} | }} | ||
{{Определение | {{Определение | ||
|definition = | |definition = | ||
− | '''Вероятностная машина Тьюринга''' (ВМТ) — | + | '''Вероятностная машина Тьюринга''' (ВМТ) — детерминированная машина Тьюринга, имеющая вероятностную ленту. Переходы в ВМТ могут осуществляться с учетом информации, считанной с вероятностной ленты. |
}} | }} | ||
Строка 17: | Строка 17: | ||
Введем вероятностное пространство <tex>(\Omega, \Sigma, \operatorname{P})</tex>, где пространство элементарных исходов <tex>\Omega</tex> — множество всех вероятностных лент, <tex>\Sigma</tex> — сигма-алгебра подмножеств <tex>\Omega</tex>, <tex>\operatorname{P}</tex> — вероятностная мера, заданная на <tex>\Sigma</tex>. Покажем, что любой предикат от ВМТ является событием. | Введем вероятностное пространство <tex>(\Omega, \Sigma, \operatorname{P})</tex>, где пространство элементарных исходов <tex>\Omega</tex> — множество всех вероятностных лент, <tex>\Sigma</tex> — сигма-алгебра подмножеств <tex>\Omega</tex>, <tex>\operatorname{P}</tex> — вероятностная мера, заданная на <tex>\Sigma</tex>. Покажем, что любой предикат от ВМТ является событием. | ||
{{Теорема | {{Теорема | ||
− | |statement= <tex>\forall A</tex> — предикат от | + | |statement= Пусть <tex>m</tex> — ВМТ. Тогда <tex>\forall x, \forall A</tex> — предикат от <tex>m</tex>: <tex>R = \{r | A(m(x, r))\} \in \Sigma</tex>, т.е. <tex>R</tex> измеримо. |
|proof= | |proof= | ||
− | |||
− | |||
<tex>R = \bigcup\limits_{i = 0}^\infty R_i</tex>, <tex>R_i = \{r | A(m(x, r)), m</tex> прочитала ровно <tex>i</tex> первых символов с вероятностной ленты<tex>\}</tex>. | <tex>R = \bigcup\limits_{i = 0}^\infty R_i</tex>, <tex>R_i = \{r | A(m(x, r)), m</tex> прочитала ровно <tex>i</tex> первых символов с вероятностной ленты<tex>\}</tex>. | ||
− | <tex>R_i \in \Sigma</tex>, <tex>\operatorname{P}(R_i) = \frac{1}{2^i} \cdot |\{s : |s| = i, s</tex> — префикс <tex>r \in R_i\}|</tex>. | + | <tex>R_i \in \Sigma</tex>, <tex>\operatorname{P}(R_i) = \frac{1}{2^i} \cdot |\{s : |s| = i, s</tex> — префикс <tex>r \in R_i\}|</tex>, <tex>R_i</tex> дизъюнктны. |
<tex>R \in \Sigma</tex> как счетное объединение множеств, при этом <tex>\operatorname{P}(R) = \sum\limits_{i = 0}^{\infty} \operatorname{P}(R_i)</tex>. | <tex>R \in \Sigma</tex> как счетное объединение множеств, при этом <tex>\operatorname{P}(R) = \sum\limits_{i = 0}^{\infty} \operatorname{P}(R_i)</tex>. | ||
Строка 32: | Строка 30: | ||
|definition = | |definition = | ||
<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{E}[\operatorname{T}(p(x))] = poly(|x|)</tex>.<br> | |
}} | }} | ||
Строка 39: | Строка 37: | ||
|definition = | |definition = | ||
<tex>\mathrm{RP}</tex> (от ''randomized polynomial'') — множество языков <tex>L</tex>, для которых <tex>\exists p \forall x</tex>: | <tex>\mathrm{RP}</tex> (от ''randomized polynomial'') — множество языков <tex>L</tex>, для которых <tex>\exists p \forall x</tex>: | ||
− | + | # <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>\forall r \operatorname{T}(p(x)) \le poly(|x|).</tex> | |
}} | }} | ||
Заметим, что константа <tex>1/2</tex> в пункте 2 определения <tex>\mathrm{RP}</tex> может быть заменена на любую другую из промежутка <tex>(0, 1)</tex>, поскольку требуемой вероятности можно добиться множественным запуском программы. | Заметим, что константа <tex>1/2</tex> в пункте 2 определения <tex>\mathrm{RP}</tex> может быть заменена на любую другую из промежутка <tex>(0, 1)</tex>, поскольку требуемой вероятности можно добиться множественным запуском программы. | ||
− | + | <tex>\mathrm{RP}</tex> можно рассматривать как вероятностный аналог класса <tex>\mathrm{NP}</tex>, предполагая, что вероятность угадать сертификат в случае его существования не менее <tex>1/2</tex>. | |
− | <tex>\mathrm{ | + | {{Определение |
+ | |definition = | ||
+ | <tex>\mathrm{coRP} = \{L | \overline L \in \mathrm{RP}\}</tex>. | ||
+ | }} | ||
{{Определение | {{Определение | ||
|definition = | |definition = | ||
<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>;<br> | |
− | + | # <tex>\forall r \operatorname{T}(p(x)) \le poly(|x|)</tex>. | |
}} | }} | ||
− | Аналогично сделанному выше замечанию, константу <tex>2/3</tex> можно заменить на любое число из промежутка <tex>(1/2, 1)</tex>. Замена константы на <tex>1/2</tex> сделало бы данный класс равным <tex>\Sigma^*</tex>. | + | Аналогично сделанному выше замечанию, константу <tex>2/3</tex> можно заменить на любое число из промежутка <tex>(1/2, 1)</tex>. Замена константы на <tex>1/2</tex> сделало бы данный класс равным <tex>\Sigma^*</tex> (программа, возвращающая результат функции ''random''(), подошла бы для любого языка). |
{{Определение | {{Определение | ||
|definition = | |definition = | ||
<tex>\mathrm{PP}</tex> (от ''bounded probabilistic polynomial'') — множество языков <tex>L</tex>, для которых <tex>\exists p \forall x</tex>: | <tex>\mathrm{PP}</tex> (от ''bounded probabilistic polynomial'') — множество языков <tex>L</tex>, для которых <tex>\exists p \forall x</tex>: | ||
− | + | # <tex>\operatorname{P}(p(x) = [x \in L]) > 1/2</tex>;<br> | |
− | + | # <tex>\forall r \operatorname{T}(p(x)) \le poly(|x|)</tex>. | |
}} | }} | ||
Строка 68: | Строка 69: | ||
|statement = <tex>\mathrm{P} \subset \mathrm{ZPP} = \mathrm{RP} \cap \mathrm{coRP}</tex>. | |statement = <tex>\mathrm{P} \subset \mathrm{ZPP} = \mathrm{RP} \cap \mathrm{coRP}</tex>. | ||
|proof = | |proof = | ||
− | Утверждение <tex>\mathrm{P} \subset \mathrm{ZPP}</tex> является очевидным, так как программы, | + | Утверждение <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} = \mathrm{RP} \cap \mathrm{coRP}</tex>. | ||
Строка 75: | Строка 76: | ||
|definition = | |definition = | ||
<tex>\mathrm{ZPP}_1</tex> — множество языков <tex>L</tex>, для которых <tex>\exists p \forall x</tex>: | <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> | |
− | |||
− | |||
− | |||
}} | }} | ||
− | Сначала докажем, что <tex>\mathrm{ZPP} = \mathrm{ZPP}_1</tex>. | + | 1. Сначала докажем, что <tex>\mathrm{ZPP} = \mathrm{ZPP}_1</tex>. |
1) <tex>\mathrm{ZPP} \subset \mathrm{ZPP}_1</tex>. | 1) <tex>\mathrm{ZPP} \subset \mathrm{ZPP}_1</tex>. | ||
Строка 91: | Строка 89: | ||
<tex>\operatorname{P}(X > k \operatorname{E}[X]) \le 1/k</tex>. | <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>. Будем запускать программу p для <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} \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>. | ||
− | Теперь покажем, что <tex>\mathrm{ZPP}_1 = \mathrm{RP} \cap \mathrm{coRP}</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>. | 1) <tex>\mathrm{ZPP}_1 \subset \mathrm{RP}</tex>. Достаточно вместо <tex>?</tex> возвращать <tex>0</tex>. | ||
Строка 102: | Строка 101: | ||
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> | + | Пусть программа <tex>p_1</tex> удовлетворяет ограничениям <tex>RP</tex> и ошибается на словах из языка <tex>L</tex> с вероятностью не более <tex>1/2</tex>, а программа <tex>p_2</tex> удовлетворяет ограничениям <tex>coRP</tex> и ошибается на словах не из языка <tex>L</tex> с аналогичной вероятностью. Построим программу <tex>q</tex> для <tex>\mathrm{ZPP}_1</tex>: |
+ | q(x): | ||
+ | '''if''' p(x) = 0: | ||
+ | '''return''' 0 | ||
+ | '''if'' q(x) = 1: | ||
+ | '''return''' 1 | ||
+ | '''return''' ? | ||
+ | Вероятность вывести <tex>?</tex> есть <tex>\operatorname{P}(p(x) = 1, q(x) = 0) \le 1/2</tex>. | ||
}} | }} | ||
Версия 12:52, 31 мая 2012
Вероятностные вычисления — один из подходов в теории вычислительной сложности, в котором программы получают доступ, говоря неформально, к генератору случайных чисел. Мы рассмотрим классы сложности, для которых программы могут работать за полиномиальное время и делать односторонние, двусторонние ошибки или работать за полиномиальное время лишь в среднем случае.
Содержание
Основные определения
Определение: |
Вероятностная лента — бесконечная в одну сторону последовательность битов, распределение которых подчиняется некоторому вероятностному закону (обычно считают, что биты в различных позициях независимы и вероятность нахождения | или в каждой позиции равна ).
Определение: |
Вероятностная машина Тьюринга (ВМТ) — детерминированная машина Тьюринга, имеющая вероятностную ленту. Переходы в ВМТ могут осуществляться с учетом информации, считанной с вероятностной ленты. |
Используя тезис Черча-Тьюринга, ВМТ можно сопоставить программы, имеющие доступ к случайным битам. Обращение к очередному биту можно трактовать как вызов специальной функции random(). При этом также будем предполагать, что вероятностная лента является неявным аргументом программы или ВМТ, т.е. , где — вероятностная лента.
Введем вероятностное пространство
, где пространство элементарных исходов — множество всех вероятностных лент, — сигма-алгебра подмножеств , — вероятностная мера, заданная на . Покажем, что любой предикат от ВМТ является событием.Теорема: |
Пусть — ВМТ. Тогда — предикат от : , т.е. измеримо. |
Доказательство: |
, прочитала ровно первых символов с вероятностной ленты . , — префикс , дизъюнктны. как счетное объединение множеств, при этом . |
Вероятностные сложностные классы
Определение: |
Определение: |
Заметим, что константа
в пункте 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 ?Вероятность вывести есть . | ||
Теорема: |
. |
Доказательство: |
Покажем, что . Если в разрешающей программе для заменить все вызовы random() на недетерминированный выбор, то получим программу с ограничениями , разрешающую .Покажем, что . Пусть — разрешающая программа для языка . Она используют не более чем полиномиальное количество вероятностных бит, так как сама работает за полиномиальное время. Тогда программа для будет перебирать все участки вероятностных лент нужной полиномиальной длины и запускать на них . Ответом будет или в зависимости от того, каких ответов оказалось больше.Теперь докажем, что . Приведем программу с ограничениями класса , которая разрешает . Пусть функция infair_coin() моделирует нечестную монету, а именно возвращает единицу с вероятностью , где мы определим позже, и ноль с вероятностью . Пусть также — верификатор сертификатов для . Тогда будет выглядеть следующим образом:q(x): c <- случайный сертификат (полиномиальной длины) return V(x, c) ? 1 : infair_coin() Необходимо удовлетворить условию .Пусть . В этом случае вернет и результат работы программы будет зависеть от нечестной монеты. Она вернет с вероятностью .Пусть . Тогда по формуле полной вероятности , где — вероятность угадать правильный сертификат. Заметим, что поскольку все сертификаты имеют полиномиальную длину и существует хотя бы один правильный сертификат, не более чем экспоненциально мала. Найдем из неравенства :; ; Достаточно взять . . Из сделанного выше замечания следует, что работу функции infair_coin() можно смоделировать с помощью полиномиального количества вызовов random(). Таким образом, мы построили программу , удовлетворяющую ограничениям класса . |
Теорема: |
1. ;2. . |
Доказательство: |
Пусть — программа для . Программу для определим следующим образом:q(x): u <- p(x) v <- p(x) return u or v Пусть . В этом случае вероятность ошибки равна .Пусть Аналогично доказывается, что . Тогда и вернет правильный ответ. . |