NTM M
が受け入れる文字列はの言語ですM
。L(M)
私たちがいることを言ってみましょうM
任意の入力のために、すべての枝に止まって保証するものではありません。その場合、M
明らかに決定者になることはできず、したがって単なる認識者です。M
すべての文字列の言語を認識します。すべての文字列のブランチはM
受け入れ状態にあります。
M
は認識エンジンなので、文字列がにある場合にのみ、文字列を受け入れることが保証されL(M)
ます。にない文字列が指定されL(M)
た場合、文字列が拒否されるか、永久にループする可能性があります。すべてのNTMはDTMでシミュレートできますが、NTMが言語のみを認識する場合L
、同等のDTMも認識しL
ます。
NTMがディサイダーである入力に対してすべてのブランチで停止した場合、同等のDTMは同じことを行うため、ディサイダーにもなります。
検証者はあなたが探しているものではありません。Sipsersの本「Introduction to the Theory of Computation」では、アルゴリズムの複雑性と複雑性のクラスについて説明するときにベリファイアが導入されL
ています。
言語の検証は、L
入力として文字列を取るw
にはL
、証明書は、c
(問題の解決策として、証明書を考えるw
)と証明書が実際に作る正解、であることを確認w
して嘘をL
。
例:
言語について
L = { w | w is an integer for which the product of some of the digits equals 12000 }
あなたは、検証することができますV
文字列を受け取り、w
中にL
、証明書c
、および検証w
に実際にあるL
証明書を使用しますc
。の積が12000となるc
整数を示すバイナリ文字列にすることができますw
。
たとえばV
、入力を拒否する必要があります1923423343, 0010111011
。2*4*2*3*4*3 = 576 != 12000
多くの問題について、入力サイズの指数時間で実行されている問題を解くことができるアルゴリズムしか知りません。検証者が興味深いのはこのためです。多くの場合、私たちが解決策を与えたときに、その解決策が正しいか間違っているかをすばやく判断できることが多いからです。