NL-полнота задачи о достижимости в графе — различия между версиями

Материал из Викиконспекты
Перейти к: навигация, поиск
Строка 9: Строка 9:
  
 
=== Доказательство принадлежности задачи STCON классу NL ===
 
=== Доказательство принадлежности задачи STCON классу NL ===
 +
 +
Для доказательства необходимо предъявить алгоритм для недетерминированной машины Тьюринга, который использует конечное число переменных, каждая из которых занимает <tex> O(log n) </tex> памяти, где <tex> n </tex> - размер входа для задачи и за время порядка <tex> O(poly(n)) </tex> решает эту задачу.
 +
 +
Алгоритм:
 +
 +
1. Начиная с вершины <tex> s </tex> недетерминированно переходит в одну из вершин, смежных с ней. (Очевидно, для этого необходимо конечное число переменных)
 +
 +
2. Проверяет, правда ли, что текущая вершина совпадает с <tex> t </tex>. Если это так, возвращает TRUE.
 +
 +
3. Отдельно считает количество пройденных вершин. Как только это число превышает количество вершин в графе, то алгоритм возвращает FALSE, так как посетил некоторую вершину дважды.
 +
 +
Таким образом в каждый момент алгоритму достаточно хранить текущую вершину, количество посещенных вершин, финальную вершину <tex> t </tex> и некоторое число вспомогательных переменных, для совершения переходов. Все эти переменные принимают значения не более, чем максимальный номер вершины, то есть как раз занимают <tex> O(log n) </tex> памяти.
 +
 +
Так как, если из <tex> s </tex> существует путь в <tex> t </tex>, то он имеет длину не более, чем количество вершин в графе, то алгоритм корректно возвращает FALSE.
  
 
=== Доказательство NL-трудности задачи STCON ===
 
=== Доказательство NL-трудности задачи STCON ===

Версия 14:48, 6 апреля 2010

Формулировка задачи

Даны ориентированный граф [math] G = \langle V, E \rangle [/math] и две вершины [math] s, t[/math] в нем. Необходимо проверить, правда ли, что в графе [math] G [/math] существует путь из вершины [math] s [/math] в вершину [math] t [/math]. Эту задачу принято называть [math] st-connectivity [/math] или [math] STCON [/math].

Утверждение

Задача [math] STCON [/math] NL-полна.

Доказательство

Для доказательства NL-полноты необходимо показать, что эта задача NL-трудная и принадлежит классу NL.

Доказательство принадлежности задачи STCON классу 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] памяти.

Так как, если из [math] s [/math] существует путь в [math] t [/math], то он имеет длину не более, чем количество вершин в графе, то алгоритм корректно возвращает FALSE.

Доказательство NL-трудности задачи STCON