概観
この問題はNP困難です。より正確には、関連する決定問題(トライデントターゲット数が与えられた sのすべてをカバーできるかどうかを尋ねる)はNP困難です。この決定問題を数値トライデントカバー問題と呼びます。kxi
数値トライデントカバー問題がNP困難であることを証明するために、グリッドトライアングルカバー問題と呼ぶ次の中間問題を紹介します。
入力:有限集合整数対整数値座標。S⊂Z+×Z+k
出力:YesまたはNo、もしイエスの出力とのセットが存在する場合にのみ、とようになりますT⊂Z×Z|T|≤kS⊆⋃(x,y)∈T{(x,y),(x,y+1),(x+1,y)}
グラフィカルこの問題について考え、我々は整数格子のサブセットを所与とこのサブセット内の全ての点をカバーするように求められ側長さ-、特に特定の向きに直角三角形(これらの三角形は、、、および)の形式の頂点を持つ必要があります。これが可能である場合に限り、「はい」と答えるよう求められます。k(1,1,2–√)(x,y)(x,y+1)(x+1,y)
数値トライデントカバーがNPハードであることを示すために、2つの削減を提供します。平面3SATからグリッドトライアングルカバーへの削減と、グリッドトライアングルカバーから数値トライデントカバーへの削減です。これらを組み合わせると、NP困難な問題であるPlanar 3SATから数値トライデントカバー問題への削減になり、数値トライデントカバーがNPハードであることを意味します。
数値トライデントカバー問題では実数を使用しているため、エンコードと入力サイズの問題が発生することに注意してください。Numerical Trident Coverインスタンスで常にという形式の数値を使用することでこの問題を回避し、をとしてエンコードするだけで効率的なエンコードを可能にします。実際、数値をさらに整数に制限しても問題はさらに困難ですが、その削減にはもう少し作業が必要なので、ここでは省略します。p+q2–√p+q2–√(p,q)
削減1:グリッドトライアングルカバーから数値トライデントカバーへ。
集合と数値構成されるグリッドトライアングルカバー問題のインスタンスが与えられたとします。S⊆Z+×Z+k
次に、数値トライデントカバーのインスタンス(実数、ペア、およびターゲット数のトライデントのリストで構成される)を次のように作成します。x1,...,xNa,bk′
要素ましょあること。からまでの各せ。ましょう及び。最後に、ます。これは、数値トライデントカバーの出力インスタンスです。Ss1=(p1,q1),s2=(p2,q2),...,s|S|=(p|S|,q|S|)i1N=|S|xi=−pi+qi2–√a=1b=2–√k′=k
この削減は明らかに多項式時間演算であるため、残された唯一の事柄は、削減が解答保存であることです。
これを行うには、トライデントを配置する「合理的な」場所を検討してください。トライデントを配置して少なくとも1つのヒットできる場所は、、、またはの形式の場所だけです。のそれぞれについて、これら3つの値はすべて、一部の整数およびです。したがって、という形式の数値に注意を向けることができます。ルールすべてののセットとすべての整数ペアのセットの間の全単射定義しますxixixi+axi−bxi−va+vb2–√vavb−va+vb2–√fp+q2–√f(−va+vb2–√)=(va,vb)。はをマップすることに注意してください。fxisi
また、トライデントが場合、その3つの突起は、-、および。つまり、下の3つのプロングのイメージは、ポイント、、およびます。下のトライデントの画像−p+q2–√−(p+1)+q2–√−p+q2–√−p+(q+1)2–√f(p,q)(p+1,q)(p,q+1)fSf−1f
f{x1,...,x|S|}fS={s1,...,s|S|}={f(x1),...,f(x|S|)}f(1,12–√)xikSk(1,12–√)
削減2:Planar 3SATからGrid Triangle Coverへ。
この削減のために、平面2部グラフの形式で3SATインスタンスが与えられます。一方の部分の頂点は変数に対応し、もう一方の部分の頂点はそれぞれ次数3で句に対応します。各エッジには正または負のラベルが付けられ、変数が句にどのように含まれるかを示します(正または負)。
(S,k)Sk
まず、ワイヤーについて説明します。ワイヤーは奇数個のポイント(整数ラティス内)のシーケンスで構成され、最初と最後がターミナルと呼ばれるため、三角形がワイヤー内の他のポイントにぶつかることなく三角形ですべての連続ペアをカバーできます。例として、次のワイヤーを考えてみましょう:
xoo x
o o
o ooo o
o o oooo
oo
pp+12
ここでは、上記の例をカバーする2つの方法を示します(同じ三角形でカバーされている場合、2つのポイントには同じ番号が付けられます)。
x11 9
2 9
2 556 8
3 4 6778
34
または
112 x
2 9
3 566 9
3 5 7788
44
1つの懸念は、2つの端子をワイヤで接続したいが、2つの端子間の「ワイヤ」の長さが均一になるため、接続できない場合があることです。ただし、そうではありません。ワイヤのルートを常に選択して、そのワイヤの長さを奇数にする(したがって、有効なワイヤにする)ことができます。長さ6のワイヤーの水平セグメントを次の長さ7ワイヤーセグメントに置き換えると、ワイヤー長のパリティを修正できます。
oo oo
ooo
次に、条項ガジェットを紹介します。節は、3つのワイヤの端子の1つを接続して、共有端子がカバーされるようにワイヤの1つが満たされている場合、その共有端子をカバーする三角形が他のワイヤからのポイントをカバーしないようにします。
o
o
o
ooox
ooo
共有端子をカバーするためには、3本のワイヤーの少なくとも1つが、ワイヤーを満たす三角形がワイヤーの非共有端子をカバーしないように満たす必要があります。
最後に、変数ガジェットを紹介します。可変ガジェットは、次のように3行ごとに側にオプションで端子が発生する(偶数長さの)大きなワイヤーのようなループです。
oo
o o
o ox
o o
o o
o ox
o o
o o
o ox
o o
o o
o ox
o o
oo
変数は、必要な数の端子に対応するために垂直に拡大できます。偶数パリティの行の端子は変数の正の発生に対応し、奇数パリティの行の端子は負の発生に対応します。ワイヤーと同様に、可変ガジェットの非終端点は、三角形の最小数(ループ内の点の数の半分)を使用して、正確に2つの方法で満たすことができます。これらの2つの設定は、変数ガジェットのすべての正の発生ターミナルまたはすべての負の発生ターミナルをカバーします。
すべてをまとめることは非常に明白です。変数ガジェット、句ガジェット(共有端子)、および端子を接続するワイヤを使用して、2部グラフを作成します。ワイヤと変数の非終端点をカバーするために必要な三角形の総数は、三角形の目標数になります。
明らかに、三角形全体でグリッド全体をカバーすることはできません。さらに、変数とワイヤはそれぞれ、説明されている2つの方法のいずれかで満たされるため、非終端点がそれぞれカバーされることが保証されます。したがって、唯一のタスクは、端末を満足させることです。
各変数では、すべての正またはすべての負の発生ターミナルが変数ガジェットによって満たされます。ガジェットの他の端子は、接続されているワイヤーで満たす必要があります。次に、すべての句が他の端子がまだワイヤを使い切っていない少なくとも1つのワイヤ(アタッチされた変数ガジェットによって他の端子が満たされたワイヤ)に接続されている場合にのみ、句の端子が満たされます。つまり、変数ガジェットの設定による変数の割り当てがすべての句を満たしている場合にのみ、端子はすべて満たされます。
ご覧のとおり、生成されたグリッドトライアングルカバーインスタンスは、入力Planar 3SATインスタンスがyesインスタンスである場合にのみ、yesインスタンスです。この削減は多項式時間でもあるため(すべてのガジェットは入力インスタンスのサイズで空間多項式を必要とします)、有効な削減があると結論付けます。