|
|
Строка 33: |
Строка 33: |
| 2. <tex>\mathrm{ZPP_1} \subset \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>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>. |
− | }}
| |
− |
| |
− | {{Теорема
| |
− | |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>.
| |
| }} | | }} |
| | | |
| == Литература == | | == Литература == |
| * [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] |
Определение: |
[math]\mathrm{ZPP}[/math] (от zero-error probabilistic polynomial) — множество языков [math]L[/math], для которых [math]\exists p \forall x[/math]:
- [math]\operatorname{P}(p(x) \ne [x \in L]) = 0[/math];
- [math]\operatorname{E}[\operatorname{T}(p, x)] = poly(|x|)[/math].
|
[math]\mathrm{ZPP}[/math] — сложностный класс, такой что программы, удовлетворяющие его ограничениям, не могут делать ошибок, но работают за полиномиальное время только в среднем случае.
Напомним, что математическое ожидание является усреднением по вероятностным лентам, а не по входу [math]x[/math].
Для данного класса существует и другое определение. Ниже мы покажем, что оба определения эквивалентны.
Определение: |
[math]\mathrm{ZPP}_1[/math] — множество языков [math]L[/math], для которых [math]\exists p \forall x[/math]:
- [math]p(x) \in \{0, 1, ?\}[/math];
- [math]p(x) \ne \enskip? \Rightarrow p(x) = [x \in L][/math];
- [math]\operatorname{P}(p(x) = \enskip?) \le 1/2[/math];
- [math]\forall r \operatorname{T}(p, x) \le poly(|x|).[/math]
|
Утверждение: |
[math]\mathrm{ZPP} = \mathrm{ZPP}_1[/math]. |
[math]\triangleright[/math] |
1. [math]\mathrm{ZPP} \subset \mathrm{ZPP}_1[/math].
Пусть [math]X[/math] — случайная величина, равная времени работы программы [math]p[/math] для [math]\mathrm{ZPP}[/math], [math]X \gt 0[/math]. Запишем неравенство Маркова:
[math]\operatorname{P}(X \gt k \operatorname{E}[X]) \le 1/k[/math].
Подставим [math]k = 2[/math]. Тогда, если запустить программу [math]p[/math] для [math]\mathrm{ZPP}[/math] с ограничением по времени [math]2E[X][/math], она не успеет завершиться с вероятностью, не превышающей [math]1/2[/math]. Опишем программу [math]q[/math] для [math]\mathrm{ZPP}_1[/math]. Она будет возвращать [math]?[/math], если [math]p[/math] не успеет завершиться, а иначе — результат работы программы [math]p[/math]. Заметим, что [math]q[/math] работает полиномиальное время, так как [math]E[X][/math] ограничено некоторым полиномом по определению класса [math]\mathrm{ZPP}[/math].
2. [math]\mathrm{ZPP_1} \subset \mathrm{ZPP}[/math].
Будем запускать программу [math]p[/math] для [math]\mathrm{ZPP_1}[/math], пока не получим ответ, отличный от [math]?[/math]. Математическое ожидание количества запусков [math]p[/math] не превышает [math]\sum\limits_{k = 0}^\infty \frac{k}{2^k} = 2[/math]. Значит, новая программа будет в среднем работать за полиномиальное время, что и требуется для класса [math]\mathrm{ZPP}[/math]. |
[math]\triangleleft[/math] |
Литература