Die folgende Antwort entspricht im Wesentlichen der, die Sie bereits kennen, scheint jedoch etwas weniger "magisch" zu sein. Auf der anderen Seite ist es technischer, aber ich glaube, dass die allgemeine Technik "Schreiben Sie Ihr Problem als Optimierung für Permutationsmatrizen und rufen Sie Birkhoff-von Neumann auf" eine großartige Technik ist.
Für eine Permutation von { 1 , ... , n } definiert die Permutationsmatrix P σ als die 0-1 - Matrix derart , daß P i j = 1 , wenn j = σ ( i ) und P i j = 0 sonst. Dies ist einfach die Matrix, die die Koordinaten eines Vektors x gemäß σ permutiert : Wenn y = P σ x, dann ist y i = x σσ{1,…,n}PσPij=1j=σ(i)Pij=0xσy=Pσx . Ich werdevon nun any= P σ xalsσ(x) bezeichnen.yi=xσ(i)y=Pσxσ(x)
Noch eine Definition: Eine nicht negative Matrix M ist doppelt stochastisch, wenn jede ihrer Zeilen und jede ihrer Spalten zu 1 summiert.n×nM
Und eine Tatsache, die für die kombinatorische Optimierung sehr wichtig ist - das Birkhoff-von-Neumann-Theorem:
Eine Matrix ist genau dann doppelt stochastisch, wenn es sich um eine konvexe Kombination von Permutationsmatrizen handelt, dh wenn Permutationen σ 1 , … , σ k und positive Reelle α 1 , … , α k existieren, so dass M = ∑ k i = 1 α i P σ i und ∑ α i = 1 .Mσ1,…,σkα1,…,αkM=∑ki=1αiPσi∑αi=1
Beachten Sie, dass eine doppelt stochastische Matrix durch die Ungleichungen definiert wird
∀ j : n Σ i = 1 M i j = 1 ∀ i , j : M i j ≥ 0
∀i:∑j=1nMij=1
∀j:∑i=1nMij=1
∀i,j:Mij≥0
Alle diese Ungleichungen zusammen ergeben ein Polytop , und das Birkhoff-von-Neumann-Theorem besagt, dass die Extrempunkte (Eckpunkte) dieses Polytops alle Permutationsmatrizen sind. Aus der linearen Grundprogrammierung wissen wir, dass jedes lineare Programm, das die obigen Ungleichungen als Nebenbedingungen (und keine anderen Nebenbedingungen) aufweist, eine Permutationsmatrix als optimale Lösung hat.P
Wenn also eine Eingabe sortiert werden soll, müssen wir nur ein lineares Objektiv f a ( M ) aufstellen, für das:a=(a1,…,an)fa(M)
- fa(Pτ)<fa(Pσ)σ(a)τ(a)
fa(M)Pσσσ(a)σPσ
fa(M)vTMav=(1,…,n)
- M
- Pσfa(Pσ)=∑ni=1iaσ(i)
- σσ(a)σ(a)
Und voila, du hast ein lineares Programm zum Sortieren. Scheint albern für das Sortieren, aber dies ist in der Tat eine leistungsfähige Methode zur Optimierung.