Emil Jerabekのコメントは素晴らしい要約ですが、多かれ少なかれ同じ概念を捉えるより明確な定義を持つ他のクラスがあることを指摘し、これらすべての関係を明確にしたかったのです。
[警告:定義は正しくなったと思うが、以下のいくつかは個人的な好みを反映している-それがどこにあったのかを明確にしようとした。]
決定論的な世界では、関数クラスは単なる関数の集まりです(通常、「関数」という単語の数学的意味、つまりマップΣ ∗ → Σ ∗)。特定の入力に対して「未定義」の出力を持つ「部分関数」を許可したい場合があります。(同様に、すべてではなくΣ ∗のサブセットで定義される関数。)Σ∗→Σ∗Σ∗
残念ながら、2つの異なる定義がありますF Pの周りに浮いは、と(彼らはあるけれども、「道徳的」と同等)私の知る限り、彼らは同じではありません。FP
- F P(定義1)は、多項式時間で計算できる関数のクラスです。F Pを見て、それが人々が F N P、T F N Pについて話している文脈にないときはいつでも、これは私が仮定する定義です。FPFPFNP,TFNP
非決定論的な世界では、物事は少しおかしくなります。そこでは、「部分的な複数値関数」を許可すると便利です。このようなことをバイナリ関係、つまりΣ ∗ × Σ ∗のサブセットとも呼ぶのは自然でしょう。しかし、複雑さの観点から、これらのことを「非決定的機能」と考えることは哲学的および精神的に有用であることがよくあります。これらの定義の多くは、次のクラスによって明確にされていると思います(これらの定義は、あまり知られていない場合でも完全に標準化されています)。Σ∗×Σ∗
N P M V:多項式時間で非決定的マシンによって計算可能な「部分的な多値関数」のクラス。これが意味することは、ポリタイムの非決定的マシンがあり、入力 xで、各非決定的ブランチで、出力を受け入れて出力するか、拒否して出力しないことを選択できます。入力の「多値」出力 xが与えられたときに、すべての非決定的分岐上のすべての出力の集合である Xを入力として。このセットは空にすることができるため、「多値関数」としてこれは部分的なものにすぎないことに注意してください。バイナリ関係の観点から考えると、これは関係 { (x 、y ):yに対応しますNPMVxxx 入力x }の計算の分岐によって出力されます 。{(x,y):y is output by some branch of the computation on input x}
N P M V Tにおける全「機能」: N P M V、すべての入力にされ、X、少なくとも一つの分岐が受け付け(したがって定義により、出力を行います)NPMVtNPMVx
N P S V: N P M Vの単一値(潜在的に部分的な)関数。ただし、ここには柔軟性がありますが、複数のブランチが受け入れられる場合がありますが、ブランチが受け入れられる場合は、受け入れられるすべてのブランチが同じ出力を行うことが保証される必要があります(実際に単一値になるように)。ただし、ブランチが受け入れられない可能性があるため、関数は「部分関数」のみです(つまり、すべての Σ ∗で定義されていない)。NPSVNPMVΣ∗
N P S V T:中の全機能を単一値 N P S V。これらは実際には、通常の意味での関数 Σ ∗ → Σ ∗です。その確認するために、あまりにも困難ではない運動である N P S Vと T = F P N P ∩ CのoをN P(上記FPためデフ1を使用して)。NPSVtNPSVΣ∗→Σ∗NPSVt=FPNP∩coNP
我々はおよそ潜在的に複数の値を持つ関数を語るとき、複雑さクラスの封じ込めについて話しても、より多くの本当に便利ではありません:N P M V ⊈ N P S V無条件という理由だけで、N P S Vは、任意の複数値「の機能が含まれていません「しかし、N P M Vはそうです。代わりに、⊆cで示される「c-containment」について説明します。(潜在的に部分的な多値)関数fは、次の場合に(潜在的に部分的な多値)関数gを改良します:(1)すべての入力xに対してgNPMV⊈NPSVNPSVNPMV⊆cfgxgfを出力し、(2)fの出力は常にgの出力のサブセットです。適切な質問は、すべてのN P M V「関数」にN P S Vの改良があるかどうかです。もしそうなら、私たちは書きN P M V ⊆ C N P S Vを。ffgNPMVNPSVNPMV⊆cNPSV
- P F(やや劣る標準)は、ポリタイムで計算可能な(潜在的に部分的な)関数のクラスです。つまり、関数である F :D → Σ *( D ⊆ Σ *)であり、 P Fポリ時間決定性機械そのような存在する場合、その入力上のx ∈ Dマシン出力 F (X )、及び入力に X ∉ Dマシンは何も出力せない(/拒否を/「いいえ」/しかし、あなたはフレーズそれにしたいと言います)。PFf:D→Σ∗D⊆Σ∗PFx∈Df(x)x∉D
F N Pは(関数のクラスではなく)「関数の問題」のクラスです。F N Pを「リレーショナルクラス」とも呼びますが、実際にそれを説明するために使用する言葉は、後で自分自身を明確にする必要があるため、この定義に特に偏ってはいません。任意のバイナリ関係に R ⊆ Σ * × Σ *がある関連する「機能の問題。」機能の問題とは何ですか?言語/機能/関係のように明確な数学的な定義がありません。むしろ、有効なソリューションとは何かによって定義されます。FNPFNPR⊆Σ∗×Σ∗Rf例えば、もし(∃ Y )[ R (X 、Y )]次に、F出力任意のそのようなY、及びさもなければFせる出力しません。F N Pは、関係に関連する機能の問題のクラスは、RようにR ∈ P(ペアの言語として考えられる)およびp-バランスです。だから、F N Pは、関数のクラス、また言語のクラスが、ここでは「問題は」大体、それはそれを解決するために何を意味するのかという観点で定義されている「機能の問題、」のクラスではありません。(∃y)[R(x,y)]fyfFNPRR∈PFNP
T F N Pは、その後の関数問題のクラスである F N Pは -関係によって定義された R、上記のように-そのような Rは、すべてのためにという意味で、合計で Xが存在する yのように R (X 、Y )。TFNPFNPRRxyR(x,y)
「すべてのF N P(またはT F N P)関数の問題にP F(または、上記の定義によるF P)の解決策がある場合、...」などのことを書く必要がないためにこのコンテキストでは、F Pの定義2を使用します。FNPTFNPPFFPFP
- F P(定義2)は F N Pの関数問題のクラスであり、ポリタイムソリューションを持ちます。一つは、溶液(=機能)ここで特殊な文字列ピッキングによって合計であると仮定することができ、Y 0は無効であり、 yのいずれかのために、Xを、関数出力を有する Y 0を、さもなければ有効な存在しないであろう場合、Y。(必要であれば、私たちは、関係変更することができます Rをあらゆる付加することで、Yを 1とし、次に取る Y 0は文字列0であることを、関係するこれは何の複雑さを変更しません)。FPFNPy0yxy0yRyy0
ここではこれらの様々な定義が互いにどのように関連するかだ、F N P ⊆ F P(それはそれはと比較されるのコンテキストにありますので、あなたがとるべきものである定義2、F N Pは)と等価であるN P M V ⊆ C P F。T F N P ⊆ F P(DEF 2)に相当するN P M のV T ⊆ C F P(DEF 1)。FNP⊆FPFNPNPMV⊆cPFTFNP⊆FPNPMVt⊆cFP