NL-полнота — различия между версиями
Ulyantsev (обсуждение | вклад) (→Доказательство) |
м (rollbackEdits.php mass rollback) |
||
(не показаны 3 промежуточные версии 3 участников) | |||
Строка 13: | Строка 13: | ||
Рассмотрим язык <tex>B</tex> из класса '''NL'''. | Рассмотрим язык <tex>B</tex> из класса '''NL'''. | ||
− | Для каждого слова <tex>x</tex> необходимо определять его принадлежность <tex | + | Для каждого слова <tex>x</tex> необходимо определять его принадлежность <tex>B</tex> используя лишь детерминированные выборы и ''O''(log ''n'') дополнительной памяти. |
Так как <tex>A</tex> '''NL'''-полон, то существует такая функция <tex>f</tex> (использующая ''O''(log ''n'') дополнительной памяти), что <tex>x \in B \Leftrightarrow f(x) \in A</tex>. | Так как <tex>A</tex> '''NL'''-полон, то существует такая функция <tex>f</tex> (использующая ''O''(log ''n'') дополнительной памяти), что <tex>x \in B \Leftrightarrow f(x) \in A</tex>. | ||
Строка 26: | Строка 26: | ||
[[2-SAT]] | [[2-SAT]] | ||
+ | |||
+ | [[Категория:Классы сложности]] |
Текущая версия на 11:44, 1 сентября 2022
В классе NL выделяют подкласс полных в этом классе задач.
Определение
Язык свести по Карпу к , притом сведение будет использовать логарифмическое количество памяти. То есть сведение не может сохранить входные данные, но может неограниченно писать на выходную ленту и читать со входной.
является NL-полным (NLC), если он принадлежит классу NL и любой другой язык из NL можноТеорема
Если в классе L существует такой язык , что он NL-полон, то NL = L.
Доказательство
Рассмотрим язык
из класса NL. Для каждого слова необходимо определять его принадлежность используя лишь детерминированные выборы и O(log n) дополнительной памяти.Так как
NL-полон, то существует такая функция (использующая O(log n) дополнительной памяти), что . принадлежит L, поэтому мы можем определить принадлежность языку с необходимыми условиями.Однако, результат работы функции
сохранить невозможно, так как он может занимать более O(log n) памяти. Но ограничение по времени отсутствует, поэтому для определения некоторого элемента результата работы функции (который запрашивает детерминированная машина Тьюринга, соответствующая языку , для определения истинности ) будем просто перезапускать функцию и запоминать лишь необходимый элемент ее результата.