通常の言語で単語を達成するために文字をスケジュールできるかどうかをテストする


23

私は修正し、正規言語 アルファベットに、と私は呼んでいることを、次の問題を考慮して、文字のスケジュールのために。非公式には、入力は各文字の文字と間隔(つまり、最小位置と最大位置)を提供し、私の目標は2つの文字が同じ位置にマッピングされないように各文字をその間隔に配置することです結果の文字の単語はます。正式に:LΣLnnL

  • 入力:トリプルと整数でありますn(ai,li,ri)aiΣ1lirin
  • 出力:全単射があるよう全て用、及び。f:{1,,n}{1,,n}lif(i)riF - 11 F - 1N Liaf1(1)af1(n)L

明らかに、この問題はNPにあり、全単射を推測し、PTIMEでメンバーシップをチェックします。私の質問:正規言語のありのための文字スケジューリング問題ような NP困難であるが?fLLL

いくつかの初期観察:

  • スケジューリングでは同様の問題が研究されているようです:開始日と終了日を考慮しながら、単一のマシンで単位コストのタスクをスケジューリングすることとして問題を見ることができました。しかし、後者の問題は明らかに貪欲なアプローチでPTIMEにあり、タスクがラベル付けされており、ターゲットの正規言語で単語を達成したい場合のスケジューリングに関する文献には何も見当たりません。
  • この問題を見るもう1つの方法は、2部構成の最大一致問題(文字と位置の間)の特殊なケースとしてですが、やはりなければならないという制約を表現するのは困難です。L
  • がいくつかの固定単語の形式言語である特定の場合(たとえば)、文字スケジューリング問題は簡単な欲張りアルゴリズムを使用したPTIMEにあります。左から右へ、それぞれの位置に、使用可能な文字のうち、関連して正しく、時間が最小のものを1つ入れます。(正しい正しい文字がない場合は失敗します。)ただし、これは任意の通常言語一般化されません。そのような言語では、使用する文字の種類を選択できるためです。Luu(ab)LLriL
  • 動的なアルゴリズムは機能するように見えますが、実際にはそれほど単純ではありません。これまでに受け取った文字のセットを記憶する必要があるようです。確かに、左から右に単語を構築するとき、位置に到達したとき、あなたの状態はこれまでにどの文字を消費したかに依存します。指数関数的に多くの状態が存在するため、セット全体を記憶することはできません。しかし、それを「要約」するのはそれほど簡単ではありません(たとえば、各文字のコピーの数によって)。どのコピーを使用したかを知るには、いつそれらを消費したかを覚えておく必要があるようです。それら、より多くの手紙が利用可能でした)。でも似た言語で、a b | b a a bi(ab|ba)abおよび後で必要になる文字と、その文字が利用可能になる時期に応じてを選択する必要がある場合。ba
  • しかし、通常の言語は固定されており、それほど多くの情報を記憶できないため、NP困難な問題を見つけるのに苦労しています。L

PTIMEで一部のLのNP完全性を取得できますか?
ランスフォートナウ

3
@LanceFortnow確かに。3CNFをパディングして、すべての変数が偶数個のリテラルで発生し、2回連続して発生するたびに否定されるようにすることができます。をまたはにエンコードすると、レタースケジューリングインスタンスではシンボルが固定され、残りは半分のと半分のなります。多項式時間では、文字列がtrueと評価されるパディングされた3CNFをエンコードしているかどうかを確認できます。0 I 1 I0xi0i1i(,),,01
ウィラード

問題を「任意の位置」(1..nに限定されない)に一般化することもできます。硬さを証明する方が簡単かもしれません(硬い場合)。
マルツィオ

@MarzioDeBiasi:文字の位置が間隔ではなく任意のサブセットになる可能性があるということですか?これが難しいかどうかはわかりませんが(完全に完全に一致する問題に少し似てきます)、間隔のあるバージョンでは、場合に貪欲なアルゴリズムが許可されるため、もっと簡単になる可能性があります。L=u
a3nm

@ a3nm:いいえ、制約削除を一般化できるということです。範囲少なくとも1つの文字があるLの単語を要求します。つまり、長さ単語全体を「構築」するのではなく、許可された範囲内の指定された文字を含む任意の長さの単語を要求します。これにより問題の複雑さが変わるかどうかはわかりませんが、この場合は、入力の長さによって多項式で制限されていない可能性がある「インデックス」に直面する必要があります。I [ L Ir i ] nrinai[li..ri]n
マルツィオ

回答:


7

問題は、 NPハードです。ここで、は次の単語を含む有限言語です。 AL=AA

  • 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}(1i,l,r)
  • 場合及び、インスタンスのいずれかの中に存在する両方のトリプルである、またはまたはと。α 'L 'R '、L < L 'R ' < RのL ' < L R < R '(α,l,r)(α,l,r)l<lr<rl<lr<rL = L < r = r {α,α}={0,1}l=l<r=r
  • 場合、次いで、トリプルトリプルの数であると正確である。α 'L 'R 'L L 'R 'RのR - L + 1(α,l,r)(α,l,r)llrrrl+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 + 1i1i+201i2i+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<rlri(0,l,r)(1,l,r)(0,l,r)(1,l,r)01)次の4つの間隔、、、。間隔が悪い方法で重ならないことに注意してください!(この変更後、2つの間隔が重なる場合、一方は厳密に他方の内側にあります。)さらに、からへのエッジは、からクロスオーバー頂点へのエッジに置き換えられ、そこからへのエッジが続きます。これらの2つのエッジは、一方が指し示され、もう一方が指し示されるように、交差頂点でペアになります。言い換えると、2つのエッジは一緒になって、置き換えられる1つのエッジのように動作します。i + 2 r l i (l,i1)(i+2,r)(l,i2)l r l r(i+1,r)lrlr

ある意味では、このクロスオーバー頂点を「交差していない」2つのエッジ(間隔がオーバーラップしている)に入れると。クロスオーバー頂点を追加しても、追加のエッジが交差することはありません。したがって、十分なクロスオーバー頂点を挿入することにより、交差エッジのすべてのペアをクロス解除できます。最終結果は依然としてグラフの向きインスタンスに対応していますが、トリプルのリストは有効になりました(プロパティはすべての交差エッジを「交差させていない」ことを確認するのが簡単になりました)。 、および対応は実際には同等です。つまり、この削減は正しいです。


補題の証明

補題:トリプルの有効なリストの場合、文字、、およびは、トリプルで示されているとおりに配置する必要があり、トリプルのペアおよびには、そのトリプルの2文字は、インデックスと配置する必要があります。y cxyc1 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 α 'kk(i,l,r)r=l+k1i{0,1}(1i,l,r)L L 'R 'R R - L + 1 =(α,l,r)llrr0 L R 1 L R K ' - 2 + 1 、R + 1 0 l r 1 l r rl+1=k(0,l,r)(1,l,r)k2、L < L 'R ' < RのK ' LのL個のR(α,l,r)l<lr<r。これらの他のトリプルはすべてより小さい間隔長を持っているため、すべてのトリプルは、レンマで指定されたとおりに文字を配置する必要があります。これが発生する唯一の方法は、これらのトリプルがインデックスで始まりインデックスで終わるすべてのインデックスに文字を配置する場合です。したがって、2つのトリプルとは、補助定理で説明されているように、誘導ケースを終了するインデックスと文字を配置する必要があります。kl+1r+1(0,l,r)(1,l,r)lr

帰納法により、補題は正しい。


この精巧な証明に感謝し、非常にシンプルな言語で!私はそれが正しいと思いますが、私が確信していない唯一のことは、「クロスオーバー頂点を追加しても追加のエッジが交差することはない」という主張です。間隔がである他の間隔を含み、現在はとが交差しますか?間隔が小さくなるため、プロセスはまだ収束する必要があるように見えますが、クロスオーバー頂点の挿入のため、それも完全には明確ではありません。どうすれば見れますか?L "R "L L "R "R L (l,r)(l,r)llrrI + 2 R (l,i1)(i+2,r)
a3nm

場合は、あなたはすぐの右側に新しいクロスオーバー頂点のための新たな指標を挿入することができます。これにより、新しいインデックス(少し)がを含むために使用された正確な間隔になります。クロスオーバー頂点を追加すると、新しいインデックスが他の間隔にある場合にのみ、他の間隔で新しい交差点を追加できることが簡単にわかるはずです。場合、新しいインデックスはインターバルに分類されない。場合、新しいインデックスは間隔に陥るかもしれない、ll<l<r<r I ± L ' 、L ' < L " < R " < R 'L "R "L < L " < R " < R L "R "L li±ll<l<r<r(l,r)l<l<r<r(l,r)l
ミハイルルドーイ

(続き)間隔。この場合、実際には新しい交差点を作成するのではなく、古い間隔古い交差点を間隔新しい交差点に変更するだけですi + 何かr (l,r)(i+something,r)
Mikhail Rudoy

2番目のメッセージでは、「」ではなく、「古い間隔」を意味していると思いますか?しかし、わかりました。交差する頂点を追加すると、唯一の悪いケースは、対応する間隔と重ならずに新しい間隔と重なる間隔なります。これは、またはスーパーセットでは発生しません。新しい間隔とオーバーラップする場合、古い間隔と​​オーバーラップします。同様に、またはサブセットについても、説明した理由によります。したがって、この証明が私にとって正しいように見えることに同意します。再度、感謝します!L R I L R L 'R 'L R L 'R '(l,r)(l,r)I(l,r)(l,r)(l,r)(l,r)
a3nm

2

@MikhailRudoyは最初にNP硬さを示しましたが、Louisと私は別のアイデアを持っていました。CNFのブール充足可能性問題である CNF -SATから直接削減し ます。これと引き換えに、使用する通常の言語はより複雑です。L

難しさを示す鍵は、単語を推測して複数回繰り返すことができる言語を設計することです。具体的には、変数の数と節の数 について、 形成可能なすべての単語がアルファベット の長さ任意の単語で始まることを保証する間隔を構築します(変数の評価の推測を直感的にエンコードする)、そしてこの単語が回繰り返されます(推測された評価によって各句が満たされることを後でテストするために使用します)。 k個のM W L ' uはkは{ 0 1 } U MLkmwLuk{0,1}um

これを達成するために、アルファベットと言語を修正します:。正式な主張はもう少し複雑です:L '= 0 | 1 *A={0,1,#,0,1}L:=(0|1)(#(00|11))#(0|1)

主張:数値について、PTIMEに一連の間隔を構築し、これらの間隔で形成できるの単語が正確になるようにします。L 'k,mNL

{u(#(u~u~)#(uu))m#u~u{0,1}k}

ここで順序逆転の結果示しし、スワッピング 「sおよび『のを、内のすべての文字にプライム加算の結果示し 、そして二つの単語のための長さののは、から1文字とから1文字を交互に使用して形成される長さの単語です。 U01、U'、U、XY、X、Y、P2、PのXのYu~u01uuxyxyp2pxy

これを証明するために使用する構造の直感的な説明を次に示します。初期推測をエンコードする間隔から始めます。以下は、(左)のガジェットと、可能な解決策(右)です。n = 4un=4

選択ガジェット

次の観察結果を表示するのは簡単です(現時点ではを無視します)。これらの間隔で形成できる単語は、正確にです。これは最長のものへの最短間隔から誘導によって、MikhailRudoyの答え@に本質的補題のように示される:中心位置が含まれている必要があります、隣接する二つの位置が1含まれている必要がありますと1などを、 U ULu#u~0 1u{0,1}k#01

推測の仕方は見てきましたが、今度はそれを複製する方法を見てみましょう。このために、に依存し、さらに間隔を追加します。以下は例です。 k = 3Lk=3

複製ガジェット

とりあえず取ります。最初の過ぎて、プライムされていない文字とプライムされた文字を交互に列挙する方法を観察します。したがって、間隔のダッシュなしの三角形については、上記の観察結果はそのままです。これらの間隔は最初の右側により多くのスペースがあるように見えますが、2つのうち1つの位置しか使用できません。破線の間隔にも同じ主張が当てはまります。ここで、さらに、プライミングされていない文字を列挙するときに、それに続くプライム文字が同じでなければならないことを強制します。:それは可能な単語が正確であることを確認するために簡単ですので、のため。L U UUL:=(0|1)(#(00|11))#(0|1)##L、U { 0 1 } ku#(u~u~)#uu{0,1}k

さて、主張を示すために、この構成を回繰り返すだけです。次に、クレームのステートメント上にある実際の定義を使用して、および例を示します。mm = 2 L k=3m=2L

複製ガジェット、繰り返し

前と同じように、(帰納法により)可能な単語は次のとおりであることが示されますのため。したがって、この構造は、クレームによって約束されたものを達成します。U UU 'U U ' 2U U { 0 1 } Kmu(#u~u~#uu)2#u~u{0,1}k

この主張のおかげで、変数の評価の推測をエンコードし、評価を複数回繰り返すことができることがわかっています。唯一欠けているのは、評価が式を満たしていることを確認する方法を説明することです。出現ごとに1つの句をチェックすることでこれを行います。これを行うために、一般性を失うことなく、単語の各文字が入力として提供される記号によって注釈付けされていると仮定できることを観察します。(より正式には、問題では入力として長さ単語も提供すると仮定できます。また、間隔ががような単語形成できるかどうかを尋ねます、W 、N 、U 、W U LuwnuwuL。)これを仮定できる理由は、各間隔のサイズを2倍にし、奇数位置に単位間隔(画像の下部)を追加して、対応する偶数位置の注釈を保持できるためです。

ユニット注釈

この観察のおかげで、節を確認するために、通常の言語を2つの言語の共通部分として定義します。最初の言語は、偶数位置のサブワードがワードであることを強制します。つまり、注釈を無視する場合、そのワードはでなければなりません。したがって、クレームの構成を使用して注釈を追加できます。2番目の言語は、句が満たされていることを確認します。これを行うには、注釈として使用する3つの文字をアルファベットに追加します:、、および。句では、我々はによって注釈に単位間隔を追加の位置を L LLLL + - ε 1 I M + I U 、I - εL+ϵ1im+i節で正に発生する変数に対応する反復、およびby〜に注釈を付ける負に発生する変数に対応する位置 〜他のすべてに注釈を付けます。これは、ことが明らかになりました連続した各対の間で、ことを確認することによって、推測の評価を満たすことを公式に確認することができますの発生含まれている記号(すなわち、2のうち1組)を、いくつかのリテラルがありますつまり、サブワードまたはサブワードが1回出現する必要があります。uiϵU + 1 - 0L#u+10

これにより、CNF-SATからの削減が終わり、言語文字スケジューリング問題のNP困難性が示されます。L

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