В теории вычислительной сложности теорема Сэвича , доказанная Уолтером Сэвичем в 1970 году, устанавливает связь между детерминированной и недетерминированной сложностью пространства . Она утверждает, что для любой функции ,
Другими словами, если недетерминированная машина Тьюринга может решить задачу, используя пространство, то детерминированная машина Тьюринга может решить ту же задачу в квадрате этой ограниченной области пространства. [1] Хотя кажется, что недетерминизм может давать экспоненциальный выигрыш во времени (как формализовано в недоказанной гипотезе экспоненциального времени ), теорема Сэвича показывает, что он имеет заметно более ограниченное влияние на требования к пространству. [2]
Доказательство основано на алгоритме для STCON , задачи определения, существует ли путь между двумя вершинами в ориентированном графе , которая выполняется в пространстве для вершин. Основная идея алгоритма заключается в рекурсивном решении несколько более общей задачи, проверяя существование пути от вершины к другой вершине , которая использует не более ребер, для параметра, заданного в качестве входных данных. STCON является особым случаем этой задачи, где установлено достаточно большим, чтобы не накладывать ограничений на пути (например, равным общему числу вершин в графе или любому большему значению). Для проверки пути -ребра от до , детерминированный алгоритм может перебрать все вершины и рекурсивно искать пути половины длины от до и от до . Этот алгоритм можно выразить в псевдокоде (в синтаксисе Python ) следующим образом:
def stcon ( s , t ) -> bool : """Проверка существования пути любой длины от s до t""" return k_edge_path ( s , t , n ) # n — количество вершин def k_edge_path ( s , t , k ) -> bool : """Проверка существования пути длиной не более k из s в t""" if k == 0 : return s == t if k == 1 : return ( s , t ) in sides for u in vertices : if k_edge_path ( s , u , floor ( k / 2 )) and k_edge_path ( u , t , ceil ( k / 2 )): return True return False
Поскольку каждый рекурсивный вызов делит параметр пополам , число уровней рекурсии равно . Каждый уровень требует бит памяти для своих аргументов функции и локальных переменных : а вершины , , и требуют бит каждая. Общая сложность вспомогательного пространства, таким образом, равна . Входной граф считается представленным в отдельной памяти только для чтения и не вносит вклад в эту границу вспомогательного пространства. В качестве альтернативы он может быть представлен как неявный граф . Хотя выше он описан в виде программы на языке высокого уровня, тот же алгоритм может быть реализован с той же асимптотической границей пространства на машине Тьюринга .
Этот алгоритм может быть применен к неявному графу, вершины которого представляют конфигурации недетерминированной машины Тьюринга и ее ленты, работающей в заданном ограниченном пространстве . Ребра этого графа представляют недетерминированные переходы машины, устанавливаются в начальную конфигурацию машины и устанавливаются в специальную вершину, представляющую все принимающие состояния остановки. В этом случае алгоритм возвращает true, когда машина имеет недетерминированный принимающий путь, и false в противном случае. Количество конфигураций в этом графе равно , из чего следует, что применение алгоритма к этому неявному графу использует пространство . Таким образом, определяя связность в графе, представляющем недетерминированные конфигурации машины Тьюринга, можно определить принадлежность к языку, распознаваемому этой машиной, в пространстве, пропорциональном квадрату пространства, используемого машиной Тьюринга.
Некоторые важные следствия теоремы включают в себя: