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


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)∣1≤i,j,k≤n,i≠j,j≠k,i≠k},
π{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新しい順序で、ただしがiとkの間に現れてはなりません。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>j∨j>k)

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

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

3
Σ={1,2,…,n}

σ

回答:


3

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

(σmi,σmj,σmk)∈S⟹i<k∧¬(i<j<k)Ai<kB¬(i<j<k)Bi>j∨j>ki≠j,j≠k

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

nxi[0,n−1]


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