計算複雑性理論 において、1970年にウォルター・サヴィッチによって証明されたサヴィッチの定理[ 1 ]は、決定論的空間複雑性と非決定論的空間複雑性の関係を示している。この定理は、任意の空間構成可能な関数に対して、次の関係が成り立つと述べている。[ 2 ]
言い換えれば、非決定性チューリングマシンが問題を解くことができる場合、空間が決定論的である場合、チューリングマシンは、その空間の上限の2乗で同じ問題を解決できます。[ 3 ] 非決定論は時間に関して指数関数的な利益をもたらす可能性があるように見えますが(証明されていない指数時間仮説で形式化されているように)、サビッチの定理は、空間要件への影響は著しく限定的であることを示しています。[ 4 ]
この定理は相対化できる。つまり、任意のオラクルに対して、すべての「チューリングマシン」を「オラクルチューリングマシン」に置き換えても、やはり定理となる。[ 5 ]
この証明は、有向グラフ内の2つの頂点間にパスが存在するかどうかを判定する問題であるSTCONのアルゴリズムに基づいており、実行時間はスペース頂点。アルゴリズムの基本的な考え方は、頂点からパスが存在するかどうかをテストする、やや一般的な問題を再帰的に解くことです。別の頂点へ最大で使用するエッジ、パラメータの場合入力として与えられます。STCON はこの問題の特殊なケースで、は、パスに制限を課さないほど十分に大きく設定されます(たとえば、グラフの頂点の総数、またはそれ以上の値)。-エッジパスからに決定論的アルゴリズムはすべての頂点を反復処理できます、そして、から半分の長さのパスを再帰的に検索しますにそしてに[ 6 ]このアルゴリズムは、擬似コード( Python構文) で次のように表現できます。
def stcon ( s , t ) -> bool : """s から t への任意の長さのパスが存在するかどうかをテストします""" return k_edge_path ( s , t , n ) # n は頂点の数ですdef k_edge_path ( s , t , k ) -> bool : """s から t までの長さが k 以下であるパスが存在するかどうかをテストします""" if k == 0 : return s == t if k == 1 : return s == t or ( s , t ) in edges 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再帰呼び出しごとにパラメータが半分になるため再帰のレベル数は各レベルには関数引数とローカル変数を格納するためのビット数:そして頂点、、 そして必要とするビットずつ。したがって、補助空間の総複雑度は[ 6 ]入力グラフは別の読み取り専用メモリに表現されているとみなされ、この補助的な空間制限には寄与しません。あるいは、暗黙のグラフとして表現することもできます。上記では高水準言語のプログラムの形で説明しましたが、同じアルゴリズムをチューリングマシン上で同じ漸近的な空間制限で実装することもできます。
このアルゴリズムは、与えられた空間制限内で動作する非決定性チューリングマシンとそのテープの構成を頂点とする暗黙的グラフに適用できる。このグラフのエッジは、機械の非決定論的な遷移を表しています。マシンの初期設定に設定され、は、すべての受理停止状態を表す特別な頂点に設定されます。この場合、アルゴリズムは、マシンが非決定的な受理パスを持つ場合に true を返し、そうでない場合は false を返します。このグラフの構成数はこのことから、この暗黙のグラフにアルゴリズムを適用すると空間が消費されることがわかる。。このように、非決定性チューリングマシンの構成を表すグラフの接続性を決定することで、チューリングマシンが使用する空間の二乗に比例する空間で、そのマシンが認識する言語への所属を決定できる。[ 6 ]
この定理の重要な系には以下のようなものがある。