回答:
簡単にするために、はい/いいえの答えがある「決定」問題のみを検討することから始めます。関数の問題はほぼ同じように機能しますが、yes / noの代わりに、各入力語に関連付けられた特定の出力語があります。
言語:言語は、単なる文字列のセットです。などのアルファベットがある場合 、はシンボルのみを含むすべての単語のセットです。たとえば、は、任意の長さのすべてのバイナリシーケンスのセットです。ただし、アルファベットはバイナリである必要はありません。単項、三項などになります。
アルファベット上の言語は、サブセットです。
問題:問題とは、回答したい入力に関する質問です。具体的には、決定問題とは、「与えられた入力がプロパティ満たしているか?」という質問です。
言語とは、問題の正式な実現です。決定問題について理論的に推論したい場合、対応する言語をよく調べます。問題場合、対応する言語は次のとおりです。
、入力の符号化である問題に、入力に対する回答問題のために「はい」である
決定問題への入力に対する答えが「はい」であるかどうかを判断することは、その入力のアルファベット上のエンコードが対応する言語であるかどうかを判断することと同等です。
アルゴリズム:アルゴリズムは、問題を解決するための段階的な方法です。アルゴリズムは多くの方法と多くの言語で表現でき、特定の問題を解決する多くの異なるアルゴリズムがあることに注意してください。
チューリングマシン:チューリングマシンは、アルゴリズムの正式なアナログです。特定のアルファベットに対するチューリングマシンは、単語ごとに、受け入れ状態で停止するか、停止しません。したがって、各チューリングマシンには、対応する言語があります。
は入力受け入れ状態で停止します。
(すべての入力で停止し、yes入力で停止するチューリングマシンには微妙な違いがあります。これは、複雑度クラスとの違いを定義します。)
言語とチューリングマシンの関係は次のとおりです。
すべてのチューリングマシンは1つの言語のみを受け入れます
特定の言語を受け入れる複数のチューリングマシンが存在する場合があります
特定の言語を受け入れるチューリングマシンがない場合があります。
アルゴリズムと問題についてはほぼ同じことが言えます。すべてのアルゴリズムが単一の問題を解決しますが、特定の問題を解決するアルゴリズムは0個または多数存在する場合があります。
時間の複雑さ:アルゴリズムと問題の混乱の最も一般的な原因の1つは、複雑さのクラスに関するものです。正しい割り当ては次のように要約できます。
アルゴリズムには、一定の時間の複雑さがあります。アルゴリズムは、サイズ入力最大でもステップで停止する場合、最悪の場合の上限の複雑さがあると言い ます。f (n )n
問題は実際に実行される特定のアルゴリズムに関連付けられていないため、問題にはランタイムがありません。代わりに、私たちはそこに存在する場合、問題は、複雑性クラスに属していることを言って、いくつかの特定の時間複雑でその問題を解決するアルゴリズムを。
P X X P X X Pなどはすべて複雑なクラスです。これは、アルゴリズムではなく問題が含まれていることを意味します。アルゴリズムをに入れることはできませんが、与えられた問題解く多項式時間アルゴリズムがある場合、はます。またそこに受け入れ指数時間アルゴリズムの束とすることができる、しかし受け入れる単一の多項式時間アルゴリズムが存在するので、それがである。