NL-полнота — различия между версиями
Ulyantsev (обсуждение | вклад) |
Ulyantsev (обсуждение | вклад) |
||
| Строка 3: | Строка 3: | ||
===Определение=== | ===Определение=== | ||
| − | Язык | + | Язык <tex>A</tex> является <tex>NL</tex>-полным ('''NLC'''), если он принадлежит классу <tex>NL</tex> и любой другой язык <tex>A'</tex> из <tex>NL</tex> можно [[сведение по Карпу|свести по Карпу]] к <tex>A</tex>, притом сведение будет использовать логарифмическое количество памяти. |
| − | ==Примеры== | + | Язык ''A'' является '''NL'''-полным ('''NLC'''), если он принадлежит классу '''NL''' и любой другой язык <tex>A'</tex> из '''NL''' можно [[сведение по Карпу|свести по Карпу]] к <tex>A</tex>, притом сведение будет использовать логарифмическое количество памяти. |
| + | То есть сведение не может сохранить входные данные, но может неограниченно писать на выходную ленту и читать со входной. | ||
| + | |||
| + | ==Теорема== | ||
| + | |||
| + | Если в классе '''[[L]]''' существует такой язык <tex>A</tex>, что он '''NL'''-полон, то '''NL''' = '''L'''. | ||
| + | |||
| + | ===Доказательство=== | ||
| + | |||
| + | Рассмотрим язык ''B'' <tex>B</tex> из класса '''NL'''. | ||
| + | Для каждого слова ''x'' <tex>x</tex> необходимо определять его принадлежность ''B'' используя лишь детерминированные выборы и ''O''(log ''n'') дополнительной памяти. | ||
| + | |||
| + | Так как ''A'' '''NL'''-полон, то существует такая функция ''f'' <tex>f</tex> (использующая ''O''(log ''n'') дополнительной памяти), что <tex>x \in B \Leftrightarrow f(x) \in A</tex>. | ||
| + | |||
| + | Используя логарифмическое количество памяти ''B'' сводится к языку ''A'', который уже лежит в '''L'''. | ||
| + | |||
| + | Тонкость состоит в том, что мы не можем сохранить | ||
| + | |||
| + | ==Примеры NL-полных задач== | ||
[[NL-полнота задачи о достижимости в графе]] | [[NL-полнота задачи о достижимости в графе]] | ||
Версия 18:28, 8 апреля 2010
В классе NL выделяют подкласс полных в этом классе задач.
Определение
Язык является -полным (NLC), если он принадлежит классу и любой другой язык из можно свести по Карпу к , притом сведение будет использовать логарифмическое количество памяти.
Язык A является NL-полным (NLC), если он принадлежит классу NL и любой другой язык из NL можно свести по Карпу к , притом сведение будет использовать логарифмическое количество памяти. То есть сведение не может сохранить входные данные, но может неограниченно писать на выходную ленту и читать со входной.
Теорема
Если в классе L существует такой язык , что он NL-полон, то NL = L.
Доказательство
Рассмотрим язык B из класса NL. Для каждого слова x необходимо определять его принадлежность B используя лишь детерминированные выборы и O(log n) дополнительной памяти.
Так как A NL-полон, то существует такая функция f (использующая O(log n) дополнительной памяти), что .
Используя логарифмическое количество памяти B сводится к языку A, который уже лежит в L.
Тонкость состоит в том, что мы не можем сохранить