Sejumlah masalah mengejutkan memiliki pengurangan yang cukup alami untuk pemrograman linier (LP). Lihat Bab 7 dari [1] untuk contoh-contoh seperti aliran jaringan, pencocokan bipartit, permainan zero-sum, jalur terpendek, bentuk regresi linier, dan bahkan evaluasi sirkuit!
Karena evaluasi rangkaian dikurangi menjadi pemrograman linier, setiap masalah dalam harus memiliki formulasi pemrograman linier. Oleh karena itu, kami memiliki algoritme pengurutan "baru", melalui reduksi ke program linier. Jadi, pertanyaan saya adalah
- Apa program linier yang akan mengurutkan array bilangan real?
- Berapa waktu berjalan algoritma sorting yang dikurangi ke LP dan pecahkan?
- Algoritma oleh S. Dasgupta, C. Papadimitriou dan U. Vazirani (2006)
Jawaban:
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=1 j=σ(i) Pij=0 x σ 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×n M
Dan satu fakta yang sangat penting dalam optimasi kombinatorial - teorema Birkhoff-von Neumann:
Perhatikan bahwa matriks stochastic ganda didefinisikan oleh ketidaksetaraan
∀ j : n ∑ i = 1 M i j = 1 ∀ i , j : M i j ≥ 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)
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) vTMa v=(1,…,n)
Dan voila, Anda memiliki program linear untuk menyortir. Tampaknya konyol untuk menyortir, tetapi ini sebenarnya metode yang ampuh dalam optimasi.
sumber