Beim Versuch, meinen eigenen Sortieralgorithmus zu entwickeln, suche ich nach dem optimalen Benchmark, mit dem ich ihn vergleichen kann. Was ist ein effizienter Weg, um bei einer unsortierten Anordnung der Elemente A und einer sortierten Anordnung B die optimale Anzahl von Transpositionen zu berechnen, die von A nach B gelangen ?
Eine Transposition ist definiert als das Umschalten der Position von 2 Elementen in der Liste, zum Beispiel
1 2 4 3
hat eine Transposition (Transposition 4 und 3), um es zu machen
1 2 3 4
Etwas wie
1 7 2 5 9 6
erfordert 4 Transpositionen (7, 2), (7, 6), (6,5), (9, 7)
Update (07.09.11): Die Frage wurde dahingehend geändert, dass "Transposition" anstelle von "Swaps" für nicht benachbarte Börsen verwendet wird.
Antworten:
Wenn Sie nur mit Permutationen von Elementen arbeiten, benötigen Sie genau Swaps, wobei die Anzahl der Zyklen in der disjunkten Zykluszerlegung von . Da diese Distanz bi-invariant ist, erfordert die Transformation von in (oder von in oder umgekehrt) solche Bewegungen.n - c ( π ) c ( π ) π π σ A B n - C ( σ - 1 ∘ π )n n−c(π) c ( π) π π σ EIN B n - c ( σ- 1∘ π)
quelle
Der Swap-Abstand kann auch isometrisch in den euklidischen Raum eingebettet werden. Konstruieren Sie für jede Zeichenkette s eine Matrix wobei M i j = 1 ist, wenn i vor j auftritt und andernfalls Null ist. Dann ist der Frobenius-Abstand ‖ M ( s ) - M ( s ′ ) ‖ 2 der Tauschabstand d ( s , s ′ ) . (aus Graham Cormodes Dias ). Nicht so elegant wie Anthonys Antwort, aber recht einfach zu berechnen.M( s ) Mich j= 1 ich j ∥ M( s ) - M( s′) ∥2 d( s , s′)
Update: Bitte beachten Sie Oleksandrs Kommentare
quelle