Теорема Бермана — Форчуна — различия между версиями
| Kirelagin (обсуждение | вклад)  (БЕСИТЕ вы меня) | AndrewD (обсуждение | вклад)  | ||
| Строка 1: | Строка 1: | ||
| {{Лемма | {{Лемма | ||
| |about=1 | |about=1 | ||
| − | |statement=<tex>L  | + | |statement=Язык <tex>L</tex> является <tex>\mathrm{coNP}</tex>-полным тогда и только тогда, когда <tex>\overline L</tex> является <tex>\mathrm{NP}</tex>-полным. | 
| − | |proof=Пусть <tex>L  | + | |proof=Пусть <tex>L</tex> {{---}} <tex>\mathrm{coNP}</tex>-полный. Тогда <tex>L \in \mathrm{coNP}</tex> и <tex>\overline L \in \mathrm{NP}</tex>. | 
| − | Рассмотрим произвольный язык <tex>L_1 \in \mathrm{NP}</tex>. Тогда <tex>\overline {L_1} \in \mathrm{coNP}</tex>. Так как <tex>L  | + | Рассмотрим произвольный язык <tex>L_1 \in \mathrm{NP}</tex>. Тогда <tex>\overline {L_1} \in \mathrm{coNP}</tex>. Так как <tex>L</tex> {{---}} <tex>\mathrm{coNP}</tex>-полный, то <tex>\overline {L_1} \le L</tex>, следовательно <tex>L_1 \le \overline L</tex> (по [[Сведение относительно класса функций. Сведение по Карпу. Трудные и полные задачи#Свойства сведения|лемме]]). | 
| Получили, что <tex>\overline L \in \mathrm{NP}</tex> и <tex>\forall L_1 \in \mathrm{NP} \Rightarrow L_1 \le \overline L</tex>. Значит <tex>\overline L \in \mathrm{NPC}</tex>. | Получили, что <tex>\overline L \in \mathrm{NP}</tex> и <tex>\forall L_1 \in \mathrm{NP} \Rightarrow L_1 \le \overline L</tex>. Значит <tex>\overline L \in \mathrm{NPC}</tex>. | ||
| Строка 33: | Строка 33: | ||
| Для начала напишем программу, разрешающую <tex>\mathrm{TAUT}</tex>: | Для начала напишем программу, разрешающую <tex>\mathrm{TAUT}</tex>: | ||
|   <tex>check(\phi, i)</tex>: |   <tex>check(\phi, i)</tex>: | ||
| − | + |       '''if''' <tex>\phi=0</tex> | |
| − | |||
| − | |||
|           '''return''' 0 |           '''return''' 0 | ||
| − | + |       '''if''' <tex>\phi=1</tex> | |
|           '''return''' 1 |           '''return''' 1 | ||
| − | + |       '''if''' <tex>memo[\phi] \ne -1</tex> | |
| + |          '''return''' <tex>memo[\phi]</tex> | ||
| + |     <tex>memo[\phi] \leftarrow check(\phi|_{x_i=0}, i+1) \wedge check(\phi|_{x_i=1}, i+1)</tex> | ||
|       '''return''' <tex>memo[\phi]</tex>       |       '''return''' <tex>memo[\phi]</tex>       | ||
| Ответом будет <tex>check(\phi, 1)</tex>. | Ответом будет <tex>check(\phi, 1)</tex>. | ||
| Строка 47: | Строка 47: | ||
| Оценим необходимый размер <tex>memo</tex>. Можно считать, что <tex>\mathrm{T}(f, \phi) \le q(n)</tex>, где <tex>n = |\phi|</tex>, а <tex>q</tex> {{---}} монотонно возрастающий полином. Тогда <tex>|f(\phi)| \le q(n)</tex>. Так как <tex>S \in \mathrm{SPARSE}</tex>, то <tex>|S \cap \Sigma^k| \le p(k)</tex>, где <tex>p</tex> {{---}} полином. Можно считать, что <tex>p</tex> монотонно возрастает. Тогда размер <tex>memo</tex> можно оценить сверху: <tex>memo.size() \le \sum\limits_{i=0}^{q(n)}p(i) \le (1+q(n)) \cdot p(q(n)) \le r(n)</tex>, где <tex>r(n)</tex> {{---}} полином. | Оценим необходимый размер <tex>memo</tex>. Можно считать, что <tex>\mathrm{T}(f, \phi) \le q(n)</tex>, где <tex>n = |\phi|</tex>, а <tex>q</tex> {{---}} монотонно возрастающий полином. Тогда <tex>|f(\phi)| \le q(n)</tex>. Так как <tex>S \in \mathrm{SPARSE}</tex>, то <tex>|S \cap \Sigma^k| \le p(k)</tex>, где <tex>p</tex> {{---}} полином. Можно считать, что <tex>p</tex> монотонно возрастает. Тогда размер <tex>memo</tex> можно оценить сверху: <tex>memo.size() \le \sum\limits_{i=0}^{q(n)}p(i) \le (1+q(n)) \cdot p(q(n)) \le r(n)</tex>, где <tex>r(n)</tex> {{---}} полином. | ||
|   <tex>check(\phi, i)</tex>: |   <tex>check(\phi, i)</tex>: | ||
| − | |||
| − | |||
|       '''if''' <tex>\phi=0</tex> |       '''if''' <tex>\phi=0</tex> | ||
|           '''return''' 0 |           '''return''' 0 | ||
|       '''if''' <tex>\phi=1</tex> |       '''if''' <tex>\phi=1</tex> | ||
|           '''return''' 1 |           '''return''' 1 | ||
| − |       <tex>memo[f(\phi)] \leftarrow check(\phi|_{x_i=0}, i+1) \wedge check(\phi|_{x_i=1}, i+1)</tex>        //(2) | + |       '''if''' <tex>memo[f(\phi)] \ne -1</tex>        //(1) | 
| + |          '''return''' <tex>memo[f(\phi)]</tex> | ||
| + |     <tex>memo[f(\phi)] \leftarrow check(\phi|_{x_i=0}, i+1) \wedge check(\phi|_{x_i=1}, i+1)</tex>        //(2) | ||
|       '''if''' <tex>memo.size() > r(n)</tex> |       '''if''' <tex>memo.size() > r(n)</tex> | ||
|           '''exit''' <tex>0</tex> |           '''exit''' <tex>0</tex> | ||
Версия 01:20, 3 июня 2012
| Лемма (1): | 
| Язык  является -полным тогда и только тогда, когда  является -полным. | 
| Доказательство: | 
| Пусть — -полный. Тогда и . Рассмотрим произвольный язык . Тогда . Так как — -полный, то , следовательно (по лемме). Получили, что и . Значит .В обратную сторону доказательство аналогично. | 
| Определение: | 
| — булева формула . | 
| Лемма (2): | 
| . | 
| Доказательство: | 
| , то есть . Тогда по лемме (1) . | 
| Определение: | 
| полином . | 
| Теорема (Берман, Форчун): | 
| . | 
| Доказательство: | 
| Пусть существует . Разрешим за полином. Для начала напишем программу, разрешающую : : if return 0 if return 1 if return return Ответом будет . Так как и , то , то есть . Поэтому, если в предыдущей программе заменить все обращения к , на , то полученная программа по-прежнему будет разрешать . Оценим необходимый размер . Можно считать, что , где , а — монотонно возрастающий полином. Тогда . Так как , то , где — полином. Можно считать, что монотонно возрастает. Тогда размер можно оценить сверху: , где — полином. : if return 0 if return 1 if //(1) return //(2) if exit return Рассмотрим двоичное дерево, получающееся в результате рекурсивных вызовов данной программы. Рассмотрим произвольный элемент . Заметим, что условие в ходе выполнения программы является ложным при обращении к элементу не более одного раза. Так как всего в не более элементов, то суммарно за все время выполнения программы условие принимает ложное значение не более раз. Отсюда следует, что присваивание выполняется не более раз, а значит в дереве не более внутренних вершин. Значит всего в дереве не более вершин, то есть данная программа работает за полиномиальное время.Итого, данная программа разрешает за полиномиальное время. А так как , то , то есть , откуда . |