一部の要素が他の要素の間に入らないように要素を順序付けする


10

整数所与と異なる整数のトリプレットの集合 S { I J K | 1 iがJ K N I J J K I K } そのいずれかのアルゴリズムを見つけます。発見A順列π組の{ 1 2 ... N }、その結果 In

S{(i,j,k)1i,j,kn,ij,jk,ik},
π{1,2,,n} または、そのような順列が存在しないと正しく判断します。あまり正式ではないが、1から nまでの番号を並べ替えたい。各トリプルI J K における Sは、ことを示している私が前に現れなければならないのk
(i,j,k)S(π(j)<π(i)<π(k))  (π(i)<π(k)<π(j))
n(i,j,k)Sik新しい順序で、ただしikの間に現れてはなりません。jik

例1

仮定及びS = { 1 2 3 2 3 4 }。その後n=5S={(1,2,3),(2,3,4)}

  • ない有効な順列、なぜなら1 2 3 Sが、 π 1 > π 3 π=(5,4,3,2,1)(1,2,3)Sπ(1)>π(3)

  • はない有効な順列、なぜなら1 2 3 Sが、 π 1 < π 3 < π 5 π=(1,2,4,5,3)(1,2,3)Sπ(1)<π(3)<π(5)

  • 有効な順列です。(2,4,1,3,5)

例2

n=5S={(1,2,3),(2,1,3)}n=5S={(1,2,3),(3,4,5),(2,5,3),(2,1,4)}

S


(σmi,σmj,σmk)S(i>jj>k)

ところで:この問題の動機は何ですか?
Dave Clarke

@DaveClarke私の編集を参照してください。この問題は、私が研究室で他の何人かの学生と話し合ったスケジューリングの問題に関する議論から抽象化されています。基本的には、多くのジョブがあり、そのいくつかは特定の順序で実行する必要があるという考えです。ただし、非常に微妙な理由により、一部のジョブがシーケンス内のジョブ間でスケジュールされないようにする必要があります。
Patrick87

3
Σ={1,2,,n}

σ

回答:


3

これが素朴なアルゴリズムです。最終的にはブルートフォースに依存しますが、大丈夫な場合もあります。

(σmi,σmj,σmk)Si<k¬(i<j<k)Ai<kB¬(i<j<k)Bi>jj>kij,jk

  1. AΘO(|S|)
  2. BΘΘBΘO(|S|2)
  3. BΘ|S|
    B
  4. AB

nxi[0,n1]


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