Jawaban berikut pada dasarnya setara dengan jawaban yang sudah Anda ketahui, tetapi mungkin tampak sedikit kurang "ajaib". Di sisi lain, ini lebih teknis, tetapi saya percaya teknik umum "menulis masalah Anda sebagai optimasi pada matriks permutasi dan memanggil Birkhoff-von Neumann" adalah teknik yang hebat untuk diketahui.
Untuk permutasi dari { 1 , … , n } mendefinisikan permutasi matriks P σ sebagai matriks 0-1 sehingga P i j = 1 jika j = σ ( i ) dan P i j = 0 sebaliknya. Ini hanyalah matriks yang memungkinkan koordinat vektor x menurut σ : jika y = P σ x maka y i = x σσ{1,…,n}PσPij=1j=σ(i)Pij=0xσy=Pσx . Saya akan menyatakany= P σ xsebagaiσ(x)mulai sekarang.yi=xσ(i)y=Pσxσ(x)
Satu definisi yang lebih: non-negatif matriks M adalah ganda-stokastik jika masing-masing baris dan masing-masing dari jumlah kolom untuk 1.n×nM
Dan satu fakta yang sangat penting dalam optimasi kombinatorial - teorema Birkhoff-von Neumann:
Sebuah matriks adalah stokastik ganda jika dan hanya jika itu adalah kombinasi cembung matriks permutasi, yaitu jika dan hanya jika terdapat permutasi σ 1 , ... , σ k dan real positif a 1 , ... , α k sehingga M = Σ k i = 1 α i P σ i dan ∑ α i = 1 .Mσ1,…,σkα1,…,αkM=∑ki=1αiPσi∑αi=1
Perhatikan bahwa matriks stochastic ganda didefinisikan oleh ketidaksetaraan
∀ 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
Semua ketidaksetaraan ini secara bersama-sama menentukan polytope , dan teorema Birkhoff-von Neumann menyatakan bahwa titik-titik ekstrem (simpul) dari polytope ini adalah semua matriks permutasi. Dari pemrograman linear dasar, kita tahu ini menyiratkan bahwa setiap program linear yang memiliki ketidaksetaraan di atas sebagai kendala (dan tidak ada kendala lain) akan memiliki matriks permutasi sebagai solusi optimal.P
Jadi diberi input untuk disortir, kita hanya perlu membuat tujuan linier f a ( M ) yang:a=(a1,…,an)fa(M)
- jika σ ( a ) diurutkan tetapi τ ( a ) tidak.fa(Pτ)<fa(Pσ)σ(a)τ(a)
Kemudian merumuskan program linier dengan tujuan untuk memaksimalkan dan ketidaksetaraan di atas sebagai kendala, dan Anda dijamin bahwa solusi optimal adalah matriks permutasi P σ untuk σ sehingga σ ( a ) diurutkan. Tentu saja, mudah untuk "membacakan" σ dari P σ .fa(M)Pσσσ(a)σPσ
Satu pilihan untuk adalah v T M a di mana v = ( 1 , … , n ) . Verifikasi itufa(M)vTMav=(1,…,n)
- ini linear dalam ;M
- untuk , f a ( P σ ) = ∑ n i = 1 i a σ ( i ) ;Pσfa(Pσ)=∑ni=1iaσ(i)
- σσ(a)σ(a)
Dan voila, Anda memiliki program linear untuk menyortir. Tampaknya konyol untuk menyortir, tetapi ini sebenarnya metode yang ampuh dalam optimasi.