Vous êtes sur la page 1sur 5

Algorithme hongrois

L'algorithme hongrois ou mthode hongroise (parfois appel aussi algorithme de Kuhn-Munkres) est
un algorithme d'optimisation combinatoire, qui rsout le
problme d'aectation en temps polynomial. C'est donc
un algorithme qui permet de trouver un couplage parfait
de poids maximum dans un graphe biparti valu (ou un
couplage parfait de poids minimum).

pas de mthode constructive pour raliser cette tape. Les


tapes 1 et 2 vont permettre de slectionner le maximum
de zros indpendants.
tape 1
On parcourt tous les zros (non slectionns) et on slectionne chaque zro (en rouge ici) sil n'est pas dans la
mme ligne ou colonne qu'un zro dj slectionn.

Algorithme

Si l'on a slectionn n zros, alors on arrte l'algorithme.

Si l'on a slectionn au moins un zro supplmentaire au


On peut prsenter l'algorithme sous plusieurs formes. La
cours de cette tape, dcouvrez toutes les lignes et copremire donne est une prsentation assez combinatoire
lonnes, retirez tous les primes (voir plus bas).
utilisant des matrices, la seconde est une prsentation
dans le cadre de l'optimisation linaire.
tape 2

1.1

Couvrir chaque colonne ayant un zro slectionn.

Description matricielle

Choisissez successivement un zro non couvert,


marquez-le d'un prime, puis

Soit n projets et n quipes, et une matrice nn d'entiers


positifs, contenant le temps ncessaire chaque quipe
pour raliser chaque tche. On souhaite aecter chaque
tche une quipe an de minimiser le temps total de ralisation, c'est--dire la somme des temps pris pour chaque
tche.

S'il y a un zro slectionn sur sa ligne, alors


dcouvrez la colonne et couvrez la ligne.

On illustre ici l'algorithme avec une matrice de la forme


suivante :

a1
b1

c1
d1

a2
b2
c2
d2

a3
b3
c3
d3

a4
b4

c4
d4

S'il n'y a pas de zro slectionn sur sa ligne,


alors on n'a pas slectionn le nombre maximal
de zros indpendants, passez l'tape 2'

S'il n'y a plus de zro non couvert, alors d'aprs le


thorme de Knig on a slectionn le nombre maximal de zros indpendants, et on a le nombre minimum de lignes et colonnes qui couvrent tous les
zros. Passez l'tape 3.

La version prsente ici correspond essentiellement la


version de Munkres en O(n4 ) .
tape 0

tape 2'

Pour chaque ligne de la matrice, on retire l'ensemble de


la ligne la valeur minimale de celle-ci. La matrice a alors
au moins un zro par ligne. On rpte la mme opration
sur les colonnes. On obtient alors un problme quivalent
avec une matrice ayant un zro par ligne et par colonne.

On est dans le cas o l'on n'a pas slectionn le nombre


maximal de zros indpendants.

Soit z0 le seul 0' qui n'est pas couvert. Soit z1 le zro


slectionn sur la colonne de z0 (qui existe sinon z0 serait
slectionn l'tape 1). Soit alors, zi , i pair, le 0' sur la
Il faut ce moment slectionner le maximum possible de ligne de zi1 qui existe ncessairement ; et zi , i impair,
zros indpendants, c'est--dire de faon ce qu'il n'y ait le zro slectionn sur la colonne de zi1 sil existe (sinon
qu'un zro slectionn par ligne et par colonne. La proc- on arrte la suite).
dure pour trouver le nombre maximum de zros indpen- La suite zi comprend alors un 0' de plus que de zro sdants est explicite par Munkres, l o Kuhn n'apportait lectionn. On peut alors directement substituer ces 0' aux
1

1 ALGORITHME

zros slectionns de la suite. On a alors un ensemble avec


un zro indpendant de plus que prcdemment. On retourne l'tape 1, en gardant les nouveaux zros slectionns, mais en eaant les primes, et les couvertures de
colonnes et lignes.
tape 3
Trouvez , la valeur minimum de la sous-matrice des lments non couverts trouve l'tape 2. Il faut alors ajouter toutes les lignes couvertes, et la retirer toutes les
colonnes non couvertes.
Retournez l'tape 1, en conservant la slection des zros,
la couverture les lignes et colonnes, et les primes.
1.1.1

Optimalit de la solution trouve

tape 0 : O(n2 ) . Pour chaque ligne et chaque colonne, n oprations pour calculer le minimum, puis
n oprations pour le soustraire chaque lment.
tape 1 : O(n2 ) . En gardant en mmoire pour
chaque ligne et chaque colonne un boolen disant
si elle contient dj un zro slectionn, il sut de
parcourir tous les lments de la matrice, en vriant
si c'est un zro et si sa ligne et sa colonne contiennent
un zro slectionn.
tape 2 : O(n2 ) . Lister les zros non couverts,
et ajouter cette liste les zros nouvellement dcouverts lorsque l'on dcouvre une colonne. On suit
alors la liste des zros non couverts en vriant qu'ils
le sont toujours. On couvre au plus n lignes, et,
chaque couverture de ligne, il est ncessaire de parcourir une ligne et une colonne, soit 2n cases.

tape 2' : O(n2 ) .


On remarque que les seules modications ralises sur
la matrice au cours de cet algorithme sont l'addition et
tape 3 : O(n2 ) .
la soustraction d'une valeur l'ensemble d'une ligne ou
d'une colonne. Une telle modication naltre pas la ou les
Soit nk le nombre maximal de zros indpendants dans
aectations optimales, mais uniquement le cot optimal.
la matrice au dbut de lexcution de l'tape 3 pour la kL'algorithme navigue donc entre des matrices corresponime fois. On remarque facilement que, si nk = nk+1
dant des problmes quivalents.
, alors il n'y aura pas d'tape 2' entre la (k)me et la
De plus les valeurs de la matrice tant, et restant posi- (k+1)me tape 3, car dans ce cas aprs la (k)me tape
tives, l'algorithme ne peut sarrter, en tape 1, que sur 3 on a toujours slectionn le nombre maximal de zros
une solution optimale pour la matrice modie (car de indpendants. On peut de plus dmontrer que, sous cette
cot nul), et donc pour le problme original.
mme hypothse, au dbut de la (k+1)me tape 3 on
aura strictement plus de lignes couvertes qu'au dbut de
la (k)me tape 3. En eet, on remarque d'abord facile1.1.2 Dmonstration du temps dexcution polynoment que les zros slectionns et primes sont conservs
mial
par l'tape 3. tant donn que l'on a dj slectionn le
nombre maximal de zros indpendants aprs la (k)me
On peut montrer que l'algorithme, tel que prsent ici,
tape 3, on dmontre aisment que les seules oprations
sarrte ncessairement en moins de O(n4 ) oprations.
qui peuvent tre ralises entre la (k)me tape 3 et la
Cependant, une amlioration propose par Edmonds et
(k+1)me tape3 sont des couvertures de ligne. Il y aura
Karp, (et Tomizawa indpendamment), permet de rau moins une couverture de ligne, car l'tape 3 fait apduire le temps dexcution O(n3 ) [rf. souhaite] . On reparaitre un zro non couvert l'endroit du minimum des
marquera que n est en ralit la dimension de la matrice,
lments non couverts.
et non la taille de l'entre qui est elle de n2 . On considre ici que l'addition, la soustraction, et la comparai- On en dduit qu'il ne peut y avoir que n successions
son d'entiers sont des oprations de base et ncessitent d'tapes 1, 2 et 3 avant d'obtenir un zro indpendant supO(1) . Cela dit, dans le cas contraire o l'on eectuerait plmentaire. L'algorithme se poursuit jusqu' obtenir une
les calculs sur des entiers longs (arithmtique multipr- matrice avec n zros indpendants. Lors de l'obtention de
cision), cela ne changerait en rien l'aspect polynomial de x zros indpendants supplmentaires l'tape 3, au plus
l'algorithme par rapport la taille de l'entre du problme. x tapes 2' se trouveront excutes.
En eet, la taille des entiers manipuls au fur et mesure On en dduit que l'algorithme sarrte, aprs lexcution
de l'algorithme reste forcment polynomiale, car seules d'au plus O(n2 ) des tapes prsentes ci-dessus. Donc la
les tapes 0 et 3 modient la matrice et toutes deux ne complexit totale est O(n4 ) .
peuvent faire augmenter la somme de tous les entiers de
On peut de plus dmontrer que l'tape 3 ne peut augmenla matrice.
ter la somme totale des entiers dans la matrice, et donc
ne pose aucun problme en arithmtique multiprcision.
En eet, aprs l'tape 2, et donc en dbut d'tape 3, le
1.1.3 Complexit de l'algorithme original
nombre de colonnes non couvertes est suprieur ou gal
Listons le nombre d'oprations ncessaires pour lexcu- au nombre de lignes couvertes. Donc dans l'tape 3 on
tion de chacune des tapes.
retire au moins autant de fois qu'on l'ajoute.

1.2

Description par l'optimisation linaire 1.2.3 Correction et complexit

On prsente maintenant l'algorithme depuis un autre Cette section est vide, insusamment dtaille ou
point de vue. L'algorithme est la mme, mais on utilise incomplte. Votre aide est la bienvenue !
les rsultats d'optimisation linaire pour l'tudier[1] . On
se place dans un graphe biparti dont les sommets sont di- L'algorithme a une complexit en temps cubique[1] .
viss en deux groupes : A et B et o l'arte entre a et b est
de poids cab .

2 Historique
1.2.1

Reprsentation par l'optimisation linaire

Il a t propos en 1955 par le mathmaticien amricain


Le programme d'optimisation linaire en nombres entiers Harold Kuhn[3] , qui l'a baptis mthode hongroise
pour le problme du couplage parfait de poids minimum parce qu'il sappuyait sur des travaux antrieurs de deux
est le suivant :
mathmaticiens hongrois : Dnes Knig et Jen Egervry
(en)[4] . L'article a t publi dans la revue Naval Research
Logistic Quarterly car le projet de recherche tait nanc
par l'Oce of Naval Research Logistics Branch[4] . James
Munkres (en) a revu l'algorithme en 1957 et a prouv qu'il
On le relche en un problme d'optimisation linaire clas- sexcutait en temps polynomial[5] .
sique, en remplaant xab {0, 1} par xab 0 . Le dual
L'algorithme est vu comme une des premires apparitions
de ce nouveau programme peut tre crit de la faon suide l'ide de schma primal-dual.
vante :

3 Liens avec d'autres algorithmes


La condition d'optimalit (complementary slackness) dans L'algorithme d'Edmonds pour les couplages gnralise
ce cas est la suivante. Une solution x est optimale pour l'algorithme hongrois et traite le problme du couplage
le primal (i.e. pour le premier problme) sil existe une maximum dans tous les graphes en temps polynomial.
solution (u,v) pour le second telle que : xab = 0 ua +
vb = cab a A, b B.

4 Rfrences
1.2.2

Algorithme

Le principe de l'algorithme est de transformer peu


peu une solution pour le dual, (u,v), en respectant les
contraintes, pour construire une solution primale satisfaisant les contraintes d'optimalit.

[1] Ola Svensson (scribe : Mateusz Golebiewski, Maciej Duleba), Topics in Theoretical Computer Science, Lecture
5 : Understanding and using Linear Programming , sur
cole polytechnique fdrale de Lausanne, mars 2015.
[2] Un tel ensemble existe d'aprs le thorme de Hall.

L'algorithme est le suivant :


1. Initialisation : vb = 0, ua = minbB cab
2. Boucle : Tant que le graphe G constitu des artes
(a,b) telles que ua + vb = cab ne contient pas de
couplage parfait, faire :
(a) Chercher un ensemble S de A tel que S a plus
de sommets que son voisinage[2] .
(b) Fixer : = minaS,bS
/ cab ua vb .
(c) Modier (u,v) de la manire suivante :
Si a est dans S, ua := ua
Si b est dans le voisinage de S, vb := vb +
3. Retourner un couplage parfait de G.

[3] (en) Harold W. Kuhn, in his celebrated paper entitled


The Hungarian Method for the assignment problem, [Naval Research Logistic Quarterly, 2 (1955), pp. 83-97] described an algorithm for constructing a maximum weight
perfect matching in a bipartite graph dans Andrs Frank
(en), On Kuhns Hungarian Method A tribute from Hungary
[4] Harold W. Kuhn, The Hungarian Method for the Assignment Problem :Introduction by Harold W. Kuhn , sur
Tom Kelsey l'Universit de St Andrews.
[5] (en) James Munkres, Algorithms for the assignement and
transportation Problem

(en) Cet article est partiellement ou en totalit


issu de larticle de Wikipdia en anglais intitul
Hungarian algorithm (voir la liste des auteurs).

4 RFRENCES

Portail de l'informatique thorique

Portail de lalgorithmique

Sources, contributeurs et licences du texte et de limage

5.1

Texte

Algorithme hongrois Source : https://fr.wikipedia.org/wiki/Algorithme_hongrois?oldid=120474408 Contributeurs : Poulos, Zetud,


Gzen92, Lna, Sebleouf, CommonsDelinker, Rabatakeu, Dhatier, Ggal, Anne Bauval, ArthurBot, Rubinbot, Coyote du 57, EmausBot,
Sisqi, Jistrum, Frigory, Pparent, Rezabot, YFdyh-bot, Ramzan, Roll-Morton, Addbot et Anonyme : 7

5.2

Images

Fichier:Knigsberg_graph.svg Source : https://upload.wikimedia.org/wikipedia/commons/9/96/K%C3%B6nigsberg_graph.svg Licence : CC-BY-SA-3.0 Contributeurs : ? Artiste dorigine : ?


Fichier:Max-cut.svg Source : https://upload.wikimedia.org/wikipedia/commons/c/cf/Max-cut.svg Licence : CC BY-SA 3.0 Contributeurs : Travail personnel Artiste dorigine : Miym

5.3

Licence du contenu

Creative Commons Attribution-Share Alike 3.0

Vous aimerez peut-être aussi