計算は簡単だが検証が難しい問題はありますか?


25

P NPであると仮定すると、NP完全問題は「解決が難しいが、確認しやすい答えがあります」。正反対、つまり、正しい答えを計算するのは簡単ですが、任意の目的のソリューションを検証するのは難しい問題を考慮することは意味がありますか?

このような問題は次のいずれかを意味すると思います。

  1. すべての正解を単純に計算することで検証を実行できるため、与えられた入力に対して指数関数的に多くの「正解」解答。

  2. 一部の「正しい」答えは簡単に計算できますが、他の答えは見つけるのが困難です。


2
疑わしい。答えが簡単に計算できる場合、証明書の選択は簡単です。問題のある答えを問題に提供し、問題を解決して答えを「チェック」し、意図した答えが実際に答えであるかどうかを確認します。
Patrick87

1
@ Patrick87-私は質問でこれに取り組んだと思う。値のセットI fx = { y 1y 2}を入力xに関連付ける多値関数はどうですか?と仮定する| I fx | = 2 | x | 、そしてそれから要素を選択するのは簡単だとI fはX が、与えられたZそれはかどうかを判断するのは難しいZ ffバツ={y1y2}バツ|fバツ|=2|バツ|fバツzzfバツ
rphv

2
@ Patrick87ソルバーは決定論的であり、既存のすべての回答の1つのみを出力する場合があります。次に、2つのソリューションが同等であるかどうかを効率的にチェックする方法が必要です。セットの等価性は、セットの問題を解決するよりも難しいのでしょうか?
ラファエル

私は実際にその部分を逃しました、ごめんなさい。それでも、私は前提を疑う傾向があります。私はそれについてもう少し考えて、もっと適切な考えがあれば戻ってきます。
Patrick87

1
証明書は通常、あなたは検証が簡単である証明書を提供する場合ので、定義によって、証拠を再構築する簡単な方法があることを意味します。証明書のないソリューションは難しいかもしれません。
ジル 'SO-悪であるのをやめる

回答:


24

人為的な問題に問題がなければ、たくさんの問題を作成できます。以下にいくつかを示します。

  • 単項の正の整数nが与えられた場合、n個のブール変数で満たされる3CNF式に答えます。
    1つの充足可能な3CNF式を与えるのは簡単ですが、特定の3CNF式が充足可能かどうかを判断することは3SATであり、よく知られたNP完全問題です。
  • 入力はありません。停止するチューリングマシンに応答するだけです(空の入力テープで実行した場合)。
    このようなチューリングマシンを1つ与えるのは簡単ですが、特定のチューリングマシンが停止するかどうかは決定できません。

追加:ところで、最後の段落で書いたことが成り立つとは思わない:

そうしないと、すべての正解を単純に計算するだけで検証を実行できるため、このような問題は、与えられた入力に対して指数関数的に多くの「正解」解答を意味すると考えます。

問題に1つの解決策がある場合、実際に答えを確認することは、正しい解決策を計算することほど難しくありません。ただし、問題に1つの簡単な解決策と1つの難しい解決策がある場合、すべての解決策を効率的に計算することはできません。そのような問題の1つを示します(非常に人為的なものです)。

  • チューリングマシンを考えるとM、真である次の文の回答1:「M用」、空の入力テープ上の停止「Mは、空の入力テープ上に停止していない」と「Mが。チューリングマシンである」
    一つの解を与えることは簡単です。 :常に「Mはチューリングマシンです」を選択できます。ただし、与えられた答えが正しいかどうかは決定できません。この問題では、インスタンスごとに2つのソリューションしかないことに注意してください。

そのような問題が「人工」であるとはどういう意味かを正式に定義する合理的な方法はありますか?(「計算」の定義は、それが意味すべきかの私たちの直感をキャプチャするというような、我々は広く合意できる何か、私は平均、「合理的」と。)
ジル「SO-停止されて悪」

@Gilles:いいえ、そうは思いません。だれかが最初にこれらの問題に遭遇し、次に1つの答えを出すのは簡単で、与えられた答えの候補の正しさを判断するのは難しいことがわかるため、これらの問題を「人工」と呼びました。しかし、この「人工性」は決して厳密な概念ではありません。
伊藤剛

@伊藤剛-ご回答ありがとうございます。あなたの洞察を反映するために最後の段落を編集しました。
rphv

1

伊藤剛の答えは「主要な」答えをカバーしていますが、私が追加したい2つの微妙なメモがありました。

  1. ソリューションの検証が困難な場合でも、短い証明文字列を使用してソリューションをチェックすることは簡単です。つまり、ソリューションに追加情報を少し拡張することで、簡単に確認できるようになります。検証は常にNPで行われます。これを確認する1つの方法は、ソリューションを計算するエージェントが使用するすべてのランダムビットを記録でき、検証者が同じランダム文字列を使用して同じ計算を実行できることです。(証明者はランダムビットを使用する必要があります。そうしないと、常に同じ答えが出力され、検証者は同じ方法で答えを計算することで常に簡単に確認できます。)

  2. 量子コンピューターの場合、これは非常に未解決の問題です。古典的なコンピューターの場合、検証者は常に証明者をシミュレートし、同じ答えが得られることを確認するようなことを行うことができます。いくつかのトリッキーな問題については、すべての(指数関数的に多くの)ソリューションにわたって均一な分布を生成する量子アルゴリズムが存在する可能性がありますが、検証は困難です。毎回異なる回答が返される可能性が高いため、証明者を再実行することはできません。

    同様の種類の問題の例として、Deutsch-Jozsa問題はこれに少し苦しんでいます。オラクルがバランスの取れた機能でない場合、量子コンピューターはこれが事実であるとすぐに判断できますが、古典的なコンピューターがこれを検証することを可能にする短い証拠はありません。(これは別の量子コンピューターでチェックできるため、「類似した」問題にすぎません。また、チェックはPではなくても古典的なBPPで行われます。)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.