Tri en tant que programme linéaire

24

Un nombre surprenant de problèmes ont des réductions assez naturelles de la programmation linéaire (LP). Voir le chapitre 7 de [1] pour des exemples tels que les flux de réseau, la correspondance bipartite, les jeux à somme nulle, les chemins les plus courts, une forme de régression linéaire et même une évaluation de circuit!

Puisque l'évaluation du circuit se réduit à une programmation linéaire, tout problème dans P doit avoir une formulation de programmation linéaire. Par conséquent, nous avons un "nouvel" algorithme de tri, via la réduction à un programme linéaire. Donc, mes questions sont

  1. Quel est le programme linéaire qui triera un tableau de n nombres réels?
  2. Quel est le temps d'exécution de l'algorithme de tri de réduction en LP et de résolution?

  1. Algorithmes de S. Dasgupta, C. Papadimitriou et U. Vazirani (2006)
Joe
la source
3
Si vous connaissez déjà la réponse, pourquoi posez-vous la question?
Yuval Filmus
2
@Joe C'est bien de poster du matériel intéressant même si vous connaissez la réponse. La manière conventionnelle de le faire est de répondre à votre propre question avec une prise (élaborée) (au lieu de publier des liens vers un document qui pourrait se casser).
Raphael
@Raphael Si personne d'autre n'écrit une réponse, je le ferai quand j'aurai le temps.
Joe
@YuvalFilmus poser une question dont vous connaissez la réponse est explicitement encouragé lors de l'échange de pile .
Joe

Réponses:

23

La réponse suivante est fondamentalement équivalente à celle que vous connaissez déjà, mais peut sembler un peu moins "magique". D'un autre côté, c'est plus technique, mais je pense que la technique générale "écrire votre problème comme une optimisation sur les matrices de permutation et invoquer Birkhoff-von Neumann" est une bonne méthode à connaître.

Pour une permutation de { 1 , , n }, définissez la matrice de permutation P σ comme la matrice 0-1 telle que P i j = 1 si j = σ ( i ) et P i j = 0 sinon. C'est simplement la matrice qui permute les coordonnées d'un vecteur x selon σ : si y = P σ x alors y i = x σσ{1,,n}PσPij=1j=σ(i)Pij=0xσy=Pσx . Je dénoteraiyi=xσ(i) que σ ( x ) à partirmaintenant.y=Pσxσ(x)

Encore une définition: une matrice non négative M est doublement stochastique si chacune de ses lignes et chacune de ses colonnes totalisent 1.n×nM

Et un fait qui est très important dans l'optimisation combinatoire - le théorème de Birkhoff-von Neumann:

Une matrice est doublement stochastique si et seulement si elle est une combinaison convexe de matrices de permutation, c'est-à-dire si et seulement s'il existe des permutations σ 1 , , σ k et des réels positifs α 1 , , α k tels que M = k i = 1 α i P σ i et α i = 1 .Mσ1,,σkα1,,αkM=i=1kαiPσiαi=1

Notez qu'une matrice doublement stochastique est définie par les inégalités

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

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

Toutes ces inégalités prises ensemble déterminent un polytope P

a=(a1,,an)fa(M) pour lequel:

  • fa(Pτ)<fa(Pσ)σ(a)τ(a) ne l'est pas.

fa(M)Pσσσ(a)σPσ .

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

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

Et voila, vous avez un programme linéaire de tri. Semble idiot pour le tri, mais c'est en fait une méthode puissante d'optimisation.

Sasho Nikolov
la source
1
a
1
Lorsqu'il existe plusieurs solutions optimales, certaines peuvent ne pas être des matrices de permutation (mais toujours une solution optimale sera une matrice de permutation). Si la fonction objectif est constante, toutes les solutions possibles sont optimales.
Sasho Nikolov, le
1
@Turbo le programme linéaire est complètement écrit dans cette réponse. Évidemment, il n'a pas de contraintes d'intégralité. Je ne vais pas tenter de répondre à votre deuxième question. Asseyez-vous et essayez d'écrire l'IG comme optimisant une fonction linéaire sur des matrices doublement stochastiques, comme je l'ai fait ici pour le tri. Voyez par vous-même où cela échoue.
Sasho Nikolov
1
En pratique, vous voudrez probablement utiliser le simplexe, mais en théorie, vous pouvez obtenir un algorithme de temps polynomial en utilisant un solveur de temps polynomial LP, par exemple une méthode de point intérieur ou la méthode ellipsoïde. Cela vous donnera un polynôme temporel dans la complexité des bits deune. Lorsque la matrice de contraintes est TUM (comme c'est le cas ici), il existe aussi des solveurs fortement polytemporaires cstheory.stackexchange.com/questions/4454/… .
Sasho Nikolov
1
Et oui, la chose la plus simple à faire est de vous assurer d'avoir une solution optimale unique, ce que vous pouvez faire en ajoutant une petite perturbation aléatoire à une.
Sasho Nikolov