Теорема Ладнера — различия между версиями
Assaron (обсуждение | вклад) м (→Описание способа построения A) |
Assaron (обсуждение | вклад) (→Полиномиальность f) |
||
| Строка 107: | Строка 107: | ||
Покажем, что <tex>f \in \tilde{P}</tex>. Для упрощения будем считать, что алфавит <tex>\Sigma=\{0,1\}</tex>. | Покажем, что <tex>f \in \tilde{P}</tex>. Для упрощения будем считать, что алфавит <tex>\Sigma=\{0,1\}</tex>. | ||
| − | <tex>T(n) = T(n-1) + a(n)(b_1(n) + b_2(n) + b_3(n) + b_4(n)) + c_1(n) + | + | <tex>T(n) = T(n-1) + a(n)(b_1(n) + b_2(n) + b_3(n) + b_4(n)) + c_1(n) + c_2(n)</tex>, где: |
*<tex>T(n-1)</tex> идёт на вычисление <tex>f(n-1)</tex>; | *<tex>T(n-1)</tex> идёт на вычисление <tex>f(n-1)</tex>; | ||
*<tex>a(n)</tex> — время перебора всех слов <tex>x</tex> таких, что <tex>|x| < \log_2 n</tex>; | *<tex>a(n)</tex> — время перебора всех слов <tex>x</tex> таких, что <tex>|x| < \log_2 n</tex>; | ||
| Строка 117: | Строка 117: | ||
*<tex>c_2(n)</tex> — время, необходимое для построения функции <tex>f_i</tex>. | *<tex>c_2(n)</tex> — время, необходимое для построения функции <tex>f_i</tex>. | ||
| − | <tex>a(n) = O\left(2^{\log_2 n}\right) = O(n)</tex>, таким образом <tex>a(n) | + | <tex>a(n) = O\left(2^{\log_2 n}\right) = O(n)</tex>, таким образом <tex>a(n)</tex>. |
| − | <tex>b_1(n) = O\left(i(\log_2 n)^i\right) = O\left(f(n-1)(\log_2 n)^{f(n-1)}\right) = O\left(f(n-1)n\right) = O(n^2) | + | <tex>b_1(n) = O\left(i(\log_2 n)^i\right) = O\left(f(n-1)(\log_2 n)^{f(n-1)}\right) = O\left(f(n-1)n\right) = O(n^2)</tex> |
| − | <tex>b_2(n) = O \left( 2^{\log_2 n} \log_2 n\right) = O\left(n \log_2 n\right) = O\left(n^2\right) | + | <tex>b_2(n) = O \left( 2^{\log_2 n} \log_2 n\right) = O\left(n \log_2 n\right) = O\left(n^2\right)</tex> |
| − | <tex>b_3(n) = O \left(2^{\log_2 n} \log_2 n + \log_2 n\right) = O \left(n \log_2 n\right) = O\left(n^2\right) | + | <tex>b_3(n) = O \left(2^{\log_2 n} \log_2 n + \log_2 n\right) = O \left(n \log_2 n\right) = O\left(n^2\right)</tex> |
| − | <tex>b_4(n) = b_3(b_1(n)) = O\left(n^4\right) | + | <tex>b_4(n) = b_3(b_1(n)) = O\left(n^4\right)</tex> |
Чтобы построить программу <tex>p_i</tex> достаточно построить <tex>\tilde{p_i}</tex>. | Чтобы построить программу <tex>p_i</tex> достаточно построить <tex>\tilde{p_i}</tex>. | ||
Версия 16:23, 19 марта 2010
Теорема Ладнера (Ladner's Theorem) утверждает, что если P не совпадает с NP, то существует язык , принадлежащий , но не являющийся полиномиальным и NP-полным.
Содержание
Иллюстрация
Определим язык как множество таких формул , что чётно. Иными словами, — это язык формул с длинами, лежащими в промежутках Далее будем обозначать как .
Рассмотрим язык SAT всех удовлетворимых формул. Логично предположить, что как в , так и в лежит бесконечное множество элементов из , не распознаваемых за полиномиальное время, поэтому . Из и следует, что .
Осталось показать, что не является NP-полным. Пусть это не так. Тогда из NP-полноты следует, что существует полиномиальная функция , сводящая по Карпу к .
Возьмём формулу длиной . Она не лежит в и, следовательно, в . Функция не может перевести в промежуток или дальше, так как размер выхода полиномиальной функции не может быть экспоненциально больше длины входа. Значит, отображается в меньший промежуток, но в этом случае размер выхода экспоненциально меньше длины входа. Добавляя к этому то, что проверку на принадлежность к можно осуществить за (это следует из её принадлежности классу ), получаем программу, разрешающую за полином. Утверждение о том, что все формулы длиной принадлежат классу , скорее всего не верно, и, следовательно, язык не является NP-полным.
Заметим, что это объяснение не является доказательством!
Доказательство
Будем искать язык , удовлетворяющий следующим условиям:
- (что влечёт за собой );
- ;
- .
Если такой язык существует, то является искомым примером множества из .
Утверждение 1
Можно перечислить (возможно, с повторениями) все языки из .
Действительно, рассмотрим последовательность всех программ, упорядоченных по длине: Обозначим за программу, запускающую с таймером . Тогда среди встречаются только программы из , и для каждой полиномиальной программы , работающей за полином , существует номер такой, что для всех натуральных и делает то же самое, что и . Таким образом, распознает тот же язык, что и .
Утверждение 2
Можно перечислить все функции из .
Аналогично предыдущему доказательству, сначала построим последовательность , а затем, добавив таймер , получим последовательность .
Описание способа построения
Упорядочим все слова по возрастанию длины. Разобьем всё на множества так, что:
(то есть разбиение происходит по длинам, причем идут «подряд»),
- отличается от элементом
из ,
- для любого существует ,
для которого выполняются условия и .
Если мы сможем построить такие , то язык будет отличаться от любого полиномиального языка, и ни одна полиномиальная функция не будет сводить к .
Попытаемся построить такую полиномиальную функцию , что . Тогда и
Построение
Зададим . Затем рекурсивно определим . Для этого рассмотрим три случая:
- :
- ;
- :
- если существует такой, что и , то , иначе ;
- :
- если существует такой, что , и , то , иначе .
Заметим, что вызовы делаются для , для которых уже построена.
Первый случай позволяет сказать, что ограничена . Второй «ответственен» за множества для чётных , третий — для нечетных. Логарифм в условии необходим для полиномиальности .
Полиномиальность
Покажем, что . Для упрощения будем считать, что алфавит .
, где:
- идёт на вычисление ;
- — время перебора всех слов таких, что ;
- — время работы ;
- — время работы ;
- — время работы ;
- — время работы ;
- — время, необходимое для построения программы ;
- — время, необходимое для построения функции .
, таким образом .
Чтобы построить программу достаточно построить . Из того, что все упорядочены по длине, следует, что длина не превосходит (константа зависит от языка описания программы). Поэтому для построения i-ой программы достаточно перебрать все слов с длиной не больше и вывести i-ое, являющееся программой. Такой способ требует времени. Аналогично можно построить и . Из этого следует, что и тоже полиномиальны.
Получаем, что . Значит, . Поэтому и .
Таким образом, полиномиальна и .
Доказательство выполнения свойств
Предположим, что . Это значит, что фунция «застряла» в ветке «иначе» случая два, но из этого следует, что не отличается от . Это влечёт за собой принадлежность к , что противоречит предположению .
Аналогично, в случае, если . Тогда функция «застряла» в ветке «иначе» случая три. Следствием этого является то, что функцией сводится к конечному множеству, что тоже противоречит предположению .
Получается, что , но по построению если неограниченно растет, то не совпадает ни с каким языком и ни одна функция не сводит к . Следовательно, выполняются все три требуемых свойста, и является примером языка из .
Теорема доказана.
