Gegeben sei eine ganze Zahl und eine Menge von Tripletts unterschiedlicher Ganzzahlen finde einen Algorithmus, der entweder eine Permutation der Menge so dass oder bestimmt korrekt, dass keine solche Permutation existiert. Weniger formal wollen wir die Zahlen 1 bis neu ordnen ; Jedes Tripel in zeigt an, dass in der neuen Reihenfolge vor erscheinen muss , aber darf nicht zwischen erscheinenS ⊆ { ( i , j , k ) ∣ 1 ≤ i , j , k ≤ n , i ≠ j , j ≠ k , i ≠ k } , π { 1 , 2 , … , n } ( i , j , k ) ∈ S.
Beispiel 1
Angenommen, und . DannS = { ( 1 , 2 , 3 ) , ( 2 , 3 , 4 ) }
ist keine gültige Permutation, weil , sondern .π ( 1 ) > π ( 3 )
ist keine gültige Permutation, da aber .
ist eine gültige Permutation.
Beispiel 2
Wenn und , gibt es keine gültige Permutation. Ebenso gibt es keine gültige Permutation, wenn und ( Ich denke, vielleicht hat hier ein Fehler gemacht.S = { ( 1 ,
Bonus: Welche Eigenschaften von bestimmen, ob eine praktikable Lösung existiert?
quelle
Antworten:
Hier ist ein naiver Algorithmus. Es beruht letztendlich auf roher Gewalt, kann aber manchmal in Ordnung sein.
Jede Einschränkung aus zwei Konjunktionen besteht; Nennen wir sie Typ , und Typ , . Jede Einschränkung vom Typ kann äquivalent als Disjunktion , wobei auf die Tatsache zurückgegriffen wird, dass .(σmi,σmj,σmk)∈S⟹i<k∧¬(i<j<k) A i<k B ¬(i<j<k) B i>j∨j>k i≠j,j≠k
Mein bevorzugter Ansatz wäre es, ihn in eine Reihe von Einschränkungen zu codieren und einen Einschränkungslöser wie Choco zu verwenden. Ich würde ganzzahlige Variablen im Bereich einführen und verlangen, dass sie alle verschieden sind. Dann würde ich jede der oben genannten Einschränkungen direkt als Einschränkungen codieren und dann Choco das Geschäft machen lassen.x i [ 0 , n - 1 ]n xi [0,n−1]
quelle
Hier ist eine teilweise Antwort:
Wenn Sie die Einschränkung für jedes Tripel entfernen, wird Ihr Problem zum Non-Betweeness-Problem, das vollständig ist, und es sind keine effizienten Algorithmen für solche Probleme bekannt. Mit der Einschränkung kann jedoch eine nette Struktur erzwungen werden, die ausgenutzt werden kann, um einen Polynomzeitalgorithmus für Ihr Problem zu finden.N P i < ki<k NP i<k
quelle