Menyortir sebagai program linier

24

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 adalahP

  1. Apa program linier yang akan mengurutkan array bilangan real?n
  2. Berapa waktu berjalan algoritma sorting yang dikurangi ke LP dan pecahkan?

  1. Algoritma oleh S. Dasgupta, C. Papadimitriou dan U. Vazirani (2006)
Joe
sumber
3
Jika Anda sudah tahu jawabannya, mengapa Anda mengajukan pertanyaan?
Yuval Filmus
2
@ Jo Tidak apa-apa untuk memposting materi yang menarik bahkan jika Anda tahu jawabannya. Cara konvensional untuk melakukannya adalah menjawab pertanyaan Anda sendiri dengan mengambil (menguraikan) (alih-alih memposting tautan ke beberapa dokumen, yang mungkin rusak).
Raphael
@ Raphael Jika tidak ada orang lain yang menulis jawaban, maka saya akan melakukannya ketika saya punya waktu.
Joe
@YuvalFilmus mengajukan pertanyaan yang Anda tahu jawabannya secara eksplisit didorong pada pertukaran tumpukan .
Joe

Jawaban:

23

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=i=1kαiPσiαi=1

Perhatikan bahwa matriks stochastic ganda didefinisikan oleh ketidaksetaraan

j : n i = 1 M i j = 1 i , j : M i j0

i:j=1nMij=1
j:i=1nMij=1
i,j:Mij0

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σ)=i=1niaσ(i)
  • σσ(a)σ(a)

Dan voila, Anda memiliki program linear untuk menyortir. Tampaknya konyol untuk menyortir, tetapi ini sebenarnya metode yang ampuh dalam optimasi.

Sasho Nikolov
sumber
1
a
1
Ketika ada beberapa solusi optimal, beberapa mungkin bukan matriks permutasi (tetapi selalu beberapa solusi optimal akan menjadi matriks permutasi). Jika fungsi objektif konstan, maka semua solusi yang layak adalah optimal.
Sasho Nikolov
1
@ Turbo program linier sepenuhnya ditulis dalam jawaban ini. Jelas itu tidak memiliki kendala integralitas. Saya tidak akan mencoba menjawab pertanyaan kedua Anda. Duduk dan coba tuliskan GI sebagai mengoptimalkan fungsi linear dari matriks stokastik ganda, seperti yang saya lakukan di sini untuk menyortir. Lihat sendiri di mana ia gagal.
Sasho Nikolov
1
a
1
a