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=∑ki=1α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 j ≥ 0
∀i:∑j=1nMij=1
∀j:∑i=1nMij=1
∀i,j:Mij≥0
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σ)=∑ni=1iaσ(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.