Классы L, NL, coNL. NL-полнота задачи о достижимости — различия между версиями

Материал из Викиконспекты
Перейти к: навигация, поиск
(Новая страница: «{{Определение |definition='''Класс <tex>L</tex>''' — множество языков, разрешимых на детерминированно...»)
 
(Теорема Иммермана)
Строка 62: Строка 62:
 
| proof =  
 
| proof =  
 
Решим задачу <tex>\text{NCONN} = \{\langle G, s, t \rangle</tex> : в графе G нет пути из s в t<tex>\}</tex>. Очевидно, что этот язык является дополнением языка CONN.
 
Решим задачу <tex>\text{NCONN} = \{\langle G, s, t \rangle</tex> : в графе G нет пути из s в t<tex>\}</tex>. Очевидно, что этот язык является дополнением языка CONN.
Чтобы показать, что NCONN <tex>\in</tex> NL, придумаем недетерминированый алгоритм, использующий <tex>O(\log |G|)</tex> памяти, который проверяет достижима ли вершина t из s.
+
Чтобы показать, что NCONN <tex>\in</tex> NL, придумаем недетерминированый алгоритм, использующий <tex>O(\log |G|)</tex> памяти, который проверяет, достижима ли вершина t из s.
 +
 
 +
Определим <tex>R_i</tex> = {<tex>v:</tex> существует путь из <tex>s</tex> в <tex>v</tex> длиной <tex>\leq i</tex>}.
 +
Другими словами это множество всех вершин, достижимых из <tex>s</tex> не более чем за <tex>i</tex> шагов.
 +
Обозначим <tex>|R_i|</tex> за <tex>r_i</tex>.
 +
Если <tex>t \notin R_{n-1}</tex>, где <tex>n = |V|</tex>, то не существует путь из <tex>s</tex> в <tex>t</tex> в графе <tex>G</tex>, то есть <tex><G, s, t> \in </tex> NCONN.
 
}}
 
}}

Версия 20:39, 29 апреля 2012

Определение:
Класс [math]L[/math] — множество языков, разрешимых на детерминированной машине Тьюринга с использованием [math]O(\log n)[/math] дополнительной памяти для входа длиной [math]n[/math]. [math]L = DSPACE(O(\log n))[/math]


Определение:
Класс [math]NL[/math] — множество языков, разрешимых на недетерминированной машине Тьюринга с использованием [math]O(\log n)[/math] дополнительной памяти для входа длиной [math]n[/math]. [math]NL = NSPACE(O(\log n))[/math]


Определение:
Класс [math]coNL[/math] — множество языков, дополнение до которых принадлежит [math]NL[/math].


Теорема:
[math]L \in NL \in P.[/math]
Доказательство:
[math]\triangleright[/math]

1. Детерминированная машина Тьюринга есть частный случай недетерминированной, поэтому [math]L \in NL[/math].

2. Число конфигураций машины, использующей [math]O(\log n)[/math] памяти не превышает [math]2^{O(\log n)} = n^{O(1)} = poly(n)[/math], а, следовательно, машина завершает свою работу за [math]O(poly(n))[/math] времени. Следовательно, [math]NL \in P.[/math]
[math]\triangleleft[/math]

NL-полнота

Определение:
Язык [math]X[/math]называют [math]NL[/math]-полным, если [math]X \in NL[/math] и [math]\forall Y : Y \in NL, Y \leq_L X[/math].


Теорема:
Задача существования пути между двумя заданными вершинами в данном графе NL-полна.
Доказательство:
[math]\triangleright[/math]

Задача [math]\text{CONN} = \{\langle G, s, t \rangle[/math] : в графе G [math]\exists [/math] путь из s в t[math]\}[/math].

Докажем, что CONN[math] \in[/math] NL. Для доказательства необходимо предъявить алгоритм для недетерминированной машины Тьюринга, который использует конечное число переменных, каждая из которых занимает [math] O(\log n) [/math] памяти, где [math] n [/math] - размер входа для задачи и за время порядка [math] O(poly(n)) [/math] решает эту задачу.

Алгоритм

1. Начиная с вершины [math] s [/math] недетерминированно переходим в одну из вершин, смежных с ней. (Очевидно, для этого необходимо конечное число переменных)

2. Проверяем, правда ли, что текущая вершина совпадает с [math] t [/math]. Если это так, возвращает TRUE.

3. Отдельно считаем количество пройденных вершин. Как только это число превышает количество вершин в графе, возвращаем FALSE, так как посетили некоторую вершину дважды.

Таким образом в каждый момент алгоритму достаточно хранить текущую вершину, количество посещенных вершин, финальную вершину [math] t [/math] и некоторое число вспомогательных переменных, для совершения переходов. Все эти переменные принимают значения не более, чем максимальный номер вершины, то есть как раз занимают [math] O(\log n) [/math] памяти.

Теперь докажем, что любая задача из класса NL сводится к задаче CONN с использованием не более чем логарифмической памяти.

Необходимо по данной задаче из NL построить тройку [math] \langle G, s, t \rangle [/math], решение задачи CONN для которой будет эквивалентно решению данной задачи.

Любая машина Тьюринга, которая принимает некоторый язык L из NL, использует не более чем логарифмическое количество ячеек на рабочей ленте, и таким образом возможных мгновенных описаний этой машины Тьюринга [math] O(poly(n)) [/math]. Каждому возможному мгновенному описанию машины Тьюринга будет соответствовать некоторая вершина в [math] G [/math], а каждому переходу из этого описания в другое (которых в недетерминированной машине Тьюринга конечное число) — ребро в графе [math] G [/math]. За вершину [math] s [/math] принимается вершина, соответствующая начальному состоянию машины, а из каждой вершины, соответствующей некоторому допускающему состоянию, добавляется переход в выделенную вершину [math] t [/math].

Очевидно, что для любого слова из языка L, то есть принимаемого данной машиной Тьюринга, будет существовать путь из [math] s [/math] в [math] t [/math] в построенном графе [math] G [/math]. А если для некоторого слова не из L в [math] G [/math] существует путь из [math] s [/math] в [math] t [/math], то он соответствует некоторой корректной последовательности переходов в изначальной машине, таким образом слово должно было приниматься этой недетерминированной машиной.

Такое построение графа [math] G [/math] по данной машине Тьюринга можно выполнить с использованием конечного числа переменных, которые будут перебирать всевозможные мгновенные состояния машины (их [math] O(poly(n)) [/math], потому переменная, перебирающая его занимает [math] O(\log n) [/math] памяти), переходы из него и проверка возможности перехода.
[math]\triangleleft[/math]


Теорема Иммермана

Теорема:
[math]NL = coNL.[/math]
Доказательство:
[math]\triangleright[/math]

Решим задачу [math]\text{NCONN} = \{\langle G, s, t \rangle[/math] : в графе G нет пути из s в t[math]\}[/math]. Очевидно, что этот язык является дополнением языка CONN. Чтобы показать, что NCONN [math]\in[/math] NL, придумаем недетерминированый алгоритм, использующий [math]O(\log |G|)[/math] памяти, который проверяет, достижима ли вершина t из s.

Определим [math]R_i[/math] = {[math]v:[/math] существует путь из [math]s[/math] в [math]v[/math] длиной [math]\leq i[/math]}. Другими словами это множество всех вершин, достижимых из [math]s[/math] не более чем за [math]i[/math] шагов. Обозначим [math]|R_i|[/math] за [math]r_i[/math].

Если [math]t \notin R_{n-1}[/math], где [math]n = |V|[/math], то не существует путь из [math]s[/math] в [math]t[/math] в графе [math]G[/math], то есть [math]\lt G, s, t\gt \in [/math] NCONN.
[math]\triangleleft[/math]