問題は、 NPハードです。ここで、は次の単語を含む有限言語です。 AL=A∗A
- x 000x111、、x000
- y 010 y 001y100、、、y010y001
- 01 c 10 10 c 01 11 c 0000c11、、、および01c1010c0111c00
これは、NP-hard(https://link.springer.com/article/10.1007/s00454-017-9884-9を参照)であることが知られているGraph Orientationの問題によるものです。この問題では、すべての頂点に「」または「」のラベルが付けられた3正規無向グラフが与えられます。目標は、すべての頂点のアウトディグリーがその頂点をラベル付けするセットに含まれるように、グラフのエッジを向けることです。{ 0 、3 }{1}{0,3}
削減では、入力としてGraph Orientationインスタンスを取得し、出力としてトリプルのリストを生成する必要があります。この削減では、出力するトリプルは常に特定の制約を満たします。これらの制約を以下にリストし、これらの制約を満たす場合にのみ有効なトリプルのリストを参照します。
- 文字、、およびは、1つのインデックスのみを含む間隔が与えられます。つまり、これらのキャラクターが配置されるたびに、特定の場所に配置されます。y cxyc
- インスタンスに存在するすべてのトリプルが場合、トリプルも存在します。I ∈ { 0 、1 } (1 - I 、L 、R )(i,l,r)i∈{0,1}(1−i,l,r)
- 場合及び、インスタンスのいずれかの中に存在する両方のトリプルである、またはまたはと。(α '、L '、R ')、L < L ' ≤ R ' < RのL ' < L ≤ R < R '(α,l,r)(α′,l′,r′)l<l′≤r′<rl′<l≤r<r′L = L ′ < r = r ′{α,α′}={0,1}l=l′<r=r′
- 場合、次いで、トリプルトリプルの数であると正確である。(α '、L '、R ')L ≤ L ' ≤ R ' ≤ RのR - L + 1(α,l,r)(α′,l′,r′)l≤l′≤r′≤rr−l+1
この投稿の終わりに証明された次の補題に注意してください。
補題:トリプルの有効なリストの場合、文字、、およびは、トリプルで示されているとおりに配置する必要があり、トリプルのペアおよびには、そのトリプルの2文字は、インデックスと配置する必要があります。y c (0 、l 、r )(1 、l 、r )l rxyc(0,l,r)(1,l,r)lr
削減のアイデアは次のとおりです。
トリプルのペアおよびを使用してエッジを表します。エッジは、インデックスとインデックスエンドポイント間を行き来します。トリプルの有効なリストを作成すると仮定すると、これらの2つのトリプルの文字はと配置する必要があるため、配置される順序をエッジの方向を示すものとして扱うことができます。ここで、はエッジの「ヘッド」であり、は「テール」です。つまり、が配置されている場合、エッジはからを指し、が配置されている場合(1 、l 、r )l r l r 1(0,l,r)(1,l,r)lrlr11 r l r 1 l r l01rlr1l次に、エッジはから指します。rl
頂点を表すには、または文字をインデックスに配置し、次の3文字を頂点に接触する3つのエッジの端点として使用します。を配置する場合、有限言語にある文字列のために、頂点の3つのエッジすべてが同じ方向(すべて頂点内または頂点外)を指している必要があることに注意してください。このような頂点には次数またはがあるため、とラベル付けされた頂点に正確にを配置します。を配置する場合、頂点の3つのエッジの1つは、の文字列のために同じ方向を指している必要がありますy x A 0 3 xxyxA03x、Y A 1 Y { 1 }{0,3}yA。このような頂点にはoutdegreeがあるため、というラベルの付いた頂点に対して正確に配置します。1y{1}
ある意味では、これで完了です。特に、このインスタンスを解決することとGraph Orientationインスタンスを解決することの間の対応は明確でなければなりません。残念ながら、生成されるトリプルのリストは有効ではない可能性があるため、説明されている「エッジ」が意図したとおりに機能しない場合があります。特に、トリプルの間隔は常にお互いを含む必要があるという条件が成立しない可能性があるため、トリプルのリストは有効ではない可能性があります。
これに対処するために、さらにインフラストラクチャを追加します。特に、「クロスオーバー頂点」を追加します。クロスオーバー頂点は次数頂点であり、そのペアは各ペア内で1つのエッジがクロスオーバー頂点を指し、1つが外側になるようにペアになっています。つまり、交差する頂点は、2つの「交差する」エッジと同じように動作します。文字をインデックス配置することにより、クロスオーバー頂点を表します。次に、言語との文字を反対(1と1)に、との文字を制約することに注意してください。c i A4ciAi + 2 0 1 i − 2 i + 1i−1i+201i−2i+1反対に。したがって、これらのインデックスをクロスオーバー頂点の4つのエッジのエンドポイントとして使用する場合、動作は正確に説明したとおりです。
これらのクロスオーバーを実際にどのように配置しますか?重複する2つの間隔とあるとします。WLOG、。クロスオーバーキャラクターを中央(と間)に追加します。(すべてのスペースを空けて、常に十分なスペースがあるとしましょう。最後に、未使用のスペースを削除します。)クロスオーバーキャラクターのインデックスをます。次に、4つのトリプル、、、および(l,r)l < l ′ < r < r ′ l ′ r i (0 、l 、r )(1 、l 、r )(0 、l ′、r ′)(1 、l ′、r ′)0 1 (l(l′,r′)l<l′<r<r′l′ri(0,l,r)(1,l,r)(0,l′,r′)(1,l′,r′)01)次の4つの間隔、、、。間隔が悪い方法で重ならないことに注意してください!(この変更後、2つの間隔が重なる場合、一方は厳密に他方の内側にあります。)さらに、からへのエッジは、からクロスオーバー頂点へのエッジに置き換えられ、そこからへのエッジが続きます。これらの2つのエッジは、一方が指し示され、もう一方が指し示されるように、交差頂点でペアになります。言い換えると、2つのエッジは一緒になって、置き換えられる1つのエッジのように動作します。(i + 2 、r )(l ′、i −(l,i−1)(i+2,r)(l′,i−2)l r l r(i+1,r′)lrlr
ある意味では、このクロスオーバー頂点を「交差していない」2つのエッジ(間隔がオーバーラップしている)に入れると。クロスオーバー頂点を追加しても、追加のエッジが交差することはありません。したがって、十分なクロスオーバー頂点を挿入することにより、交差エッジのすべてのペアをクロス解除できます。最終結果は依然としてグラフの向きインスタンスに対応していますが、トリプルのリストは有効になりました(プロパティはすべての交差エッジを「交差させていない」ことを確認するのが簡単になりました)。 、および対応は実際には同等です。つまり、この削減は正しいです。
補題の証明
補題:トリプルの有効なリストの場合、文字、、およびは、トリプルで示されているとおりに配置する必要があり、トリプルのペアおよびには、そのトリプルの2文字は、インデックスと配置する必要があります。y cxyc(1 、l 、r )l r(0,l,r)(1,l,r)lr
証明:
間隔の長さによるトリプルの帰納に進みます。特に、ステートメントは次のとおりです。任意の、一部のトリプルが間隔長持っている場合、そのトリプルの文字は、補題で説明されているように配置する必要があります。kkk
基本ケース:場合、トリプルは間隔内の単一のインデックスに文字、、またはを配置する必要があります。これは、補題で説明されているとおりです。x y ck=0xyc
帰納的ケース:ステートメントがより小さいについて成り立つと仮定する。ここで、区間長トリプルを考えます。そのトリプルは、およびの形式でなければなりません。トリプルも存在する必要があります。トリプルの数と正確である。これらのトリプルは、トリプル含むとだけでなく、形式の他のトリプルとk、K '(I 、L 、R )R = L + K ' - 1 I ∈ { 0 、1 } (1 - I 、L 、R )(α '、k′k′(i,l,r)r=l+k′−1i∈{0,1}(1−i,l,r)L ≤ L ' ≤ R ' ≤ R R - L + 1 =(α′,l′,r′)l≤l′≤r′≤r(0 、L 、R )(1 、L 、R )K ' - 2 ( + 1 、R + 1 (0 、l 、r )(1 、l 、r )r−l+1=k′(0,l,r)(1,l,r)k′−2、L < L ' ≤ R ' < RのK ' LのL個のR(α′,l′,r′)l<l′≤r′<r。これらの他のトリプルはすべてより小さい間隔長を持っているため、すべてのトリプルは、レンマで指定されたとおりに文字を配置する必要があります。これが発生する唯一の方法は、これらのトリプルがインデックスで始まりインデックスで終わるすべてのインデックスに文字を配置する場合です。したがって、2つのトリプルとは、補助定理で説明されているように、誘導ケースを終了するインデックスと文字を配置する必要があります。k′l+1r+1(0,l,r)(1,l,r)lr
帰納法により、補題は正しい。