私は複雑なコースを取っているのですが、NPCの問題を減らすのに苦労しています。問題間の削減を見つけるにはどうすればよいですか?使用できる一般的なトリックはありますか?問題がNPCであることを証明するように要求する問題にどのようにアプローチすればよいですか?
私は複雑なコースを取っているのですが、NPCの問題を減らすのに苦労しています。問題間の削減を見つけるにはどうすればよいですか?使用できる一般的なトリックはありますか?問題がNPCであることを証明するように要求する問題にどのようにアプローチすればよいですか?
回答:
魔法の弾丸はありません。NP硬度の証明は困難です。ただし、このような証明にはすべて一般的なフレームワークがあります。NP硬さの証明に苦労している多くの学生は、彼らが何をすべきかについて混乱しており、それは明らかにそれを行う方法を理解することを不可能にします。そこで、NPハードの問題を証明するために何をすべきかを説明します。
まず、宿題をしているのでなければ、どのNP困難問題を自分の問題に還元するかを決定する必要があります。これは主に「におい」の問題です。問題のステートメントのどこかに数字3が現れる場合は、またはまたはから減らしてみてください。(はい、私は真剣です。)あなたの問題が最適なサブシーケンスまたは順列またはパスを見つけることを伴う場合、またはから減らしてみてください。問題が特定のプロパティを持つ最小のサブセットを要求する場合は、試してください。特定のプロパティを持つ最大のサブセットを要求する場合は、試してください3 C o l o r 3 P a r t i t i o n H a m i l t o n i a n C y c l e H a m i l t o n i a n P a t h C l i q u e I n d e。問題が飛行機内で何かをすることを伴う場合、または試してください。等々。問題が何かのように「におい」を感じない場合は、おそらくまたはが最善の策です。P l a n a r T S P 3 S A T C i r c u i t S A T
明らかに、これらすべての問題がどのように定義されているかを正確に 知る必要があり、問題を単純化するほど良い。結果が最終的に見えるかもしれないので、またはまたはまたはから減らすことはお勧めしません。
第二に、実際の削減。問題X(あなたが知っているものはNP-hard)を問題Y(あなたが証明しようとしているものはNP-hardです)を減らすために、Xの任意のインスタンスをYの正当なインスタンスに変換するアルゴリズムを記述する必要がありますリダクションアルゴリズムは、Xインスタンスの各「機能」に特定の処理を行う必要があり、各「機能」の出力部分は通常ガジェットと呼ばれます。
しかし、機能とは何ですか?それは問題Xに依存します。例えば:
インスタンスを変換するには、各式および入力式の各句にガジェットが必要です。各変数ガジェットには、「true」と「false」に対応する2つの「状態」が必要です。また、各句ガジェットには複数の「状態」が必要であり、それぞれが何らかの形でその句のリテラルの少なくとも1つをtrueに強制します。(状態は、リダクションアルゴリズムの出力の一部ではありません。)
インスタンスを変換するには、入力グラフの各頂点と各エッジのガジェットと、3色を定義する別のガジェットが必要です。
インスタンスを変換するには、各入力、各ワイヤ、および入力回路の各ゲートにガジェットが必要です。
ガジェットの実際の形は問題Y、あなたが減少しているものに依存します。たとえば、グラフに関する問題を減らす場合、ガジェットは小さなサブグラフになります。ウィキペディアの記事を参照してください。スケジューリングに関する問題を軽減する場合、各ガジェットはスケジュールされるジョブのセットになります。マリオに関する問題に取り掛かっている場合、各ガジェットはブロックとレンガとクッパのセットになります。
両方の問題が同じ種類のオブジェクトに関係している場合、これは混乱を招く可能性があります。たとえば、XとYの両方がグラフに関する問題である場合、アルゴリズムは1つのグラフ(Xのインスタンス)を別のグラフ(Yのインスタンス)に変換します。これらの2つのグラフを混同しないように、表記法を賢明に選択してください。また、複数色のインクを使用することを強くお勧めします。
最後に、リダクションアルゴリズムは3つのプロパティを満たしている必要があります。
多項式時間で実行されます。(これは通常簡単です。)
削減アルゴリズムに入力としてXの正のインスタンスが与えられた場合、出力としてYの正のインスタンスが生成されます。
リダクションアルゴリズムが出力としてYの正のインスタンスを生成する場合、入力としてXの正のインスタンスが与えられている必要があります。
ここには重要な微妙さがあります。あなたの縮小アルゴリズムは、一つの方向に働くから Xのインスタンスに Yのインスタンスが、アルゴリズムが正しい証明することは両方向の変換についての推論が必要です。また、リダクションアルゴリズムは、Xの特定のインスタンスが正か負かを判断できないことを覚えておく必要があります。これは、多項式時間でNP困難問題を解く必要があります。
それが何だ。どのようにはちょうど練習が付属しています。
JeffEは、最も一般的な戦略の概要を説明します。多くのNP完全問題を理解し、非常にうまく適合する問題を見つけ、簡単に削減します。
別の有効な戦略は、常に 3SAT(またはその他の問題)を使用することです。これにより、いくつかの削減がより複雑になる可能性がありますが、利点は、他のタイプの問題で充足可能性を表現する経験が豊富にあることです。そのため、良い行き止まりパートナー(行き止まりを含む)を見つける時間を節約し、あなたの経験が、たとえそれがより困難であったとしても、すぐに減らしを行えるようになることを望みます。
このアプローチにはメタメタの美しさもあります。(3)SATは、NP完全性が(ほぼ)直接証明されている数少ない問題の1つです。したがって、その証明のみに依存すると、「証明ツリー」が平らに保たれ、長い連鎖の削減が回避されます。