Классы RP и coRP — различия между версиями
м (→Определения) |
(→Теорема об эквивалентности определений) |
||
Строка 23: | Строка 23: | ||
|statement=<tex>\mathrm{RP}=\mathrm{RP_{weak}}=\mathrm{RP_{strong}}</tex> | |statement=<tex>\mathrm{RP}=\mathrm{RP_{weak}}=\mathrm{RP_{strong}}</tex> | ||
|proof= | |proof= | ||
− | |||
− | |||
− | |||
− | |||
<tex>\mathrm{RP_{weak}} \subset \mathrm{RP}\colon</tex><br/> | <tex>\mathrm{RP_{weak}} \subset \mathrm{RP}\colon</tex><br/> | ||
Рассмотрим язык <tex>L \in \mathrm{RP_{weak}}</tex>. Этому языку соответсвует программа <tex>m_{\mathrm{RP_{weak}}}</tex>. Для доказательства утверждения необходимо написать программу <tex>m_{\mathrm{RP}}</tex>, которая будет удолетворять ограничениям сложностного класса <tex>\mathrm{RP}</tex>. | Рассмотрим язык <tex>L \in \mathrm{RP_{weak}}</tex>. Этому языку соответсвует программа <tex>m_{\mathrm{RP_{weak}}}</tex>. Для доказательства утверждения необходимо написать программу <tex>m_{\mathrm{RP}}</tex>, которая будет удолетворять ограничениям сложностного класса <tex>\mathrm{RP}</tex>. | ||
Строка 34: | Строка 30: | ||
'''then return''' <tex>1</tex> | '''then return''' <tex>1</tex> | ||
'''return''' <tex>0</tex> | '''return''' <tex>0</tex> | ||
− | Если слово <tex>x \notin L</tex>, то <tex>m_{\mathrm{RP_{weak}}}(x)</tex> всегда возвращает <tex>0</tex>. Тогда <tex>P(m_{\mathrm{RP}}(x) = 0) = 1</tex>, при <tex>x \notin L</tex>. Если хотя бы один вызов программы <tex>m_{\mathrm{RP_{weak}}}(x)</tex> вернёт <tex>1</tex>, то слово <tex>x \in L</tex>. Вероятность ошибки программы <tex>m_{\mathrm{ | + | Если слово <tex>x \notin L</tex>, то <tex>m_{\mathrm{RP_{weak}}}(x)</tex> всегда возвращает <tex>0</tex>. Тогда <tex>P(m_{\mathrm{RP}}(x) = 0) = 1</tex>, при <tex>x \notin L</tex>. Если хотя бы один вызов программы <tex>m_{\mathrm{RP_{weak}}}(x)</tex> вернёт <tex>1</tex>, то слово <tex>x \in L</tex>. Вероятность ошибки программы <tex>m_{\mathrm{RP_{weak}}}</tex> равна <tex>1-\frac{1}{q(|x|)}</tex>, то есть вероятность ошибки программы <tex>m_{\mathrm{RP}}</tex> равна <tex>(1-\frac{1}{q(|x|)})^k</tex>. <tex>k</tex> надо выбрать таким, что вероятность ошибки программы <tex>m_{\mathrm{RP}}</tex> при <tex>x \in L</tex> была меньше <tex>\frac {1}{2}</tex>. Получается неравенство <tex>(1-\frac{1}{q(|x|)})^k < \frac{1}{2}</tex>. Логарифмируя, получаем: <tex>k\ ln(1-\frac{1}{q(|x|)}) < ln(\frac{1}{2})</tex>. Разложив логарифм в ряд Тейлора, получаем <tex>k(-\frac{1}{q(|x|)} + o(\frac{1}{q(|x|)})) < -ln(2)</tex>. Отсюда <tex>k > q(|x|)ln(2)</tex>. |
+ | |||
+ | <tex>\mathrm{RP} \subset \mathrm{RP_{weak}}\colon</tex><br/> | ||
+ | Доказательство аналогично предыдущему пункту. | ||
+ | <tex>m_{\mathrm{RP_{weak}}}(x)</tex> | ||
+ | '''for''' <tex>i = 1 \ldots k</tex> // <tex>k</tex> будет определено позже | ||
+ | '''if''' <tex>m_{\mathrm{RP}}(x)</tex> | ||
+ | '''then return''' <tex>1</tex> | ||
+ | '''return''' <tex>0</tex> | ||
+ | Но здесь <tex>k</tex> выбирается так, чтобы выполнялось неравенство <tex>(\frac{1}{2})^k < \frac{1}{q(|x|)}</tex>. Из него получается, что <tex>k > log_2(q(|x|))</tex>. | ||
+ | |||
<tex>\mathrm{RP} \subset \mathrm{RP_{strong}}\colon</tex><br/> | <tex>\mathrm{RP} \subset \mathrm{RP_{strong}}\colon</tex><br/> | ||
− | + | Напишем программу <tex>m_{\mathrm{RP_{strong}}}</tex>, удолетворяющую ограничениям сложностного класса <tex>\mathrm{RP_{strong}}</tex>. | |
+ | <tex>m_{\mathrm{RP_{strong}}}(x)</tex> | ||
+ | '''for''' <tex>i = 1 \ldots k</tex> // <tex>k</tex> будет определено позже | ||
+ | '''if''' <tex>m_{\mathrm{RP}}(x)</tex> | ||
+ | '''then return''' <tex>1</tex> | ||
+ | '''return''' <tex>0</tex> | ||
+ | В этом случае <tex>k</tex> необходимо выбрать таким, что должно выполняться неравенство <tex>(\frac{1}{2})^k < 1 - \frac{1}{2^{q(|x|)}} \Leftrightarrow k > -log_{2}(1-\frac{1}{2^{q(|x|)}})</tex>. Разложив в ряд Тейлора получаем, что <tex>-log_{2}(1-\frac{1}{2^{q(|x|)}}) = \frac{2^{-q(|x|)}}{ln(2)} + o(2^{-q(|x|)}) = \frac{(1+q(|x|)+o(q(|x|)))^{ln(\frac{1}{2})}}{ln(2)} < \frac{1+q(|x|)}{ln(2)}</tex>. То есть <tex>k</tex> надо взять больше, чем <tex>\frac{1+q(|x|)}{ln(2)}</tex>. | ||
+ | |||
+ | <tex>\mathrm{RP_{strong}} \subset \mathrm{RP}\colon</tex><br/> | ||
+ | Для доказательства утверждения необходимо написать программу <tex>m_{\mathrm{RP}}</tex>, которая будет удолетворять ограничениям сложностного класса <tex>\mathrm{RP}</tex>. | ||
+ | <tex>m_{\mathrm{RP}}(x)</tex> | ||
+ | '''for''' <tex>i = 1 \ldots k</tex> // <tex>k</tex> будет определено позже | ||
+ | '''if''' <tex>m_{\mathrm{RP_{strong}}}(x)</tex> | ||
+ | '''then return''' <tex>1</tex> | ||
+ | '''return''' <tex>0</tex> | ||
+ | <tex>k</tex> надо выбрать таким, чтобы выполнялось неравенство <tex>(\frac{1}{2^{q(|x|)}})^k < \frac{1}{2}</tex>. Отсюда <tex>k > \frac{1}{q(|x|)}</tex>. | ||
}} | }} | ||
== См. также == | == См. также == | ||
*[[Вероятностные вычисления. Вероятностная машина Тьюринга]] | *[[Вероятностные вычисления. Вероятностная машина Тьюринга]] |
Версия 21:41, 30 мая 2012
Определения
Определение: |
Сложностный класс
| состоит из языков таких, что существует программа , которая работает за полиномиальное время, и:
Определение: |
Сложностный класс
| состоит из языков таких, что существует программа , которая работает за полиномиальное время, и:
Определение: |
Сложностный класс
| состоит из языков таких, что существует программа , которая работает за полиномиальное время, и:
Теорема об эквивалентности определений
Теорема: |
Доказательство: |
for // будет определено позже if then return return Если слово , то всегда возвращает . Тогда , при . Если хотя бы один вызов программы вернёт , то слово . Вероятность ошибки программы равна , то есть вероятность ошибки программы равна . надо выбрать таким, что вероятность ошибки программы при была меньше . Получается неравенство . Логарифмируя, получаем: . Разложив логарифм в ряд Тейлора, получаем . Отсюда .
for // будет определено позже if then return return Но здесь выбирается так, чтобы выполнялось неравенство . Из него получается, что .
for // будет определено позже if then return return В этом случае необходимо выбрать таким, что должно выполняться неравенство . Разложив в ряд Тейлора получаем, что . То есть надо взять больше, чем .
for // будет определено позже if then return return надо выбрать таким, чтобы выполнялось неравенство . Отсюда . |