Ordinamento come programma lineare


24

Un numero sorprendente di problemi ha riduzioni abbastanza naturali della programmazione lineare (LP). Vedi il capitolo 7 di [1] per esempi come flussi di rete, abbinamento bipartito, giochi a somma zero, percorsi più brevi, una forma di regressione lineare e persino valutazione del circuito!

Poiché la valutazione del circuito si riduce alla programmazione lineare, qualsiasi problema in deve avere una formulazione di programmazione lineare. Pertanto, abbiamo un "nuovo" algoritmo di ordinamento, tramite riduzione a un programma lineare. Quindi, le mie domande lo sonoP

  1. Qual è il programma lineare che ordinerà una matrice di numeri reali?n
  2. Qual è il tempo di esecuzione dell'algoritmo di ordinamento Riduci a LP e risolvi?

  1. Algorithms di S. Dasgupta, C. Papadimitriou e U. Vazirani (2006)


3
Se conosci già la risposta, perché stai ponendo la domanda?
Yuval Filmus,

2
@Joe Va bene pubblicare materiale interessante anche se conosci la risposta. Il modo convenzionale per farlo è quello di rispondere alla tua domanda con un take (elaborato) (invece di pubblicare un link ad un documento, che potrebbe rompersi).
Raffaello

@Raphael Se nessun altro scrive una risposta, lo farò quando avrò tempo.
Joe,

@YuvalFilmus che fa una domanda a cui conosci la risposta è esplicitamente incoraggiato nello scambio di stack .
Joe,

Risposte:


23

La seguente risposta è sostanzialmente equivalente a quella che già conosci, ma può sembrare un po 'meno "magica". D'altra parte, è più tecnico, ma credo che la tecnica generale "scrivere il tuo problema come ottimizzazione sulle matrici di permutazione e invocare Birkhoff-von Neumann" sia ottima da sapere.

Per una permutazione di { 1 , , n } definire la matrice di permutazione P σ come la matrice 0-1 in modo tale che P i j = 1 se j = σ ( i ) e P i j = 0 altrimenti. Questa è semplicemente la matrice che consente le coordinate di un vettore x secondo σ : se y = P σ x allora y i = x σσ{1,,n}PσPij=1j=σ(i)Pij=0xσy=Pσx . Denoteròy= P σ xcomeσ(x)da ora in poi.yi=xσ(i)y=Pσxσ(x)

Un'altra definizione: una matrice non negativa M è doppiamente stocastica se ciascuna delle sue righe e ciascuna delle sue colonne si somma a 1.n×nM

E un fatto che è molto importante nell'ottimizzazione combinatoria: il teorema di Birkhoff-von Neumann:

Una matrice è doppiamente stocastica se e solo se è una combinazione convessa di matrici di permutazione, cioè se e solo se esistono permutazioni σ 1 , , σ k e reali positivi α 1 , , α k tale che M = k i = 1 α i P σ i e α i = 1 .Mσ1,,σkα1,,αkM=i=1kαiPσiαi=1

Si noti che una matrice doppiamente stocastica è definita dalle disuguaglianze

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

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

Tutte queste disuguaglianze prese insieme determinano un politopo , e il teorema di Birkhoff-von Neumann afferma che i punti estremi (vertici) di questo politopo sono tutte matrici di permutazione. Dalla programmazione lineare di base, sappiamo che questo implica che qualsiasi programma lineare che abbia le suddette disuguaglianze come i suoi vincoli (e nessun altro vincolo) avrà una matrice di permutazione come soluzione ottimale.P

Quindi, dato un input da ordinare, dobbiamo solo trovare un obiettivo lineare f a ( M ) per il quale:a=(a1,,an)fa(M)

  • se σ ( a ) è ordinato ma τ ( a ) no.fa(Pτ)<fa(Pσ)σ(a)τ(a)

Quindi formulare un programma lineare con l'obiettivo di massimizzare e le disuguaglianze sopra come vincoli, e si è sicuri che una soluzione ottimale sia la matrice di permutazione P σ per σ tale che σ ( a ) sia ordinato. Naturalmente, è facile "leggere" σ da P σ .fa(M)Pσσσ(a)σPσ

fa(M)vTMav=(1,,n)

  • M
  • Pσfa(Pσ)=i=1niaσ(i)
  • σσ(a)σ(a)

E voilà, hai un programma lineare per l'ordinamento. Sembra sciocco per l'ordinamento, ma questo è in realtà un potente metodo di ottimizzazione.


1
a

1
Quando ci sono più soluzioni ottimali alcune potrebbero non essere matrici di permutazione (ma sempre una soluzione ottimale sarà una matrice di permutazione). Se la funzione obiettivo è costante, tutte le soluzioni possibili sono ottimali.
Sasho Nikolov,

1
@Turbo il programma lineare è completamente scritto in questa risposta. Ovviamente non ha vincoli di integralità. Non tenterò di rispondere alla tua seconda domanda. Siediti e prova a scrivere GI come ottimizzare una funzione lineare su matrici doppiamente stocastiche, come ho fatto qui per l'ordinamento. Guarda tu stesso dove non riesce.
Sasho Nikolov,

1
a

1
a
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.