You are on page 1of 38

Prsentation du problme

Algorithme gnrique
Algorithme de Kruskal
Algorithme de Prim.
Arbre couvrant de cot minimum
Conception de rseau
1
6
3
7
5
8
9
4
2
10
Une entreprise de tlcommunication doit relier un
ensemble de clients. Le cot de connection de deux clients
est connu.
Proposition
Une solution optimale ne contient pas de circuit
Architecture d'un circuit intgr
Relier les entres des composants lectroniques sur une
carte pour minimiser les longueurs des fils (pertes,
temps...)
Dfinition du problme
Donne :
Un graphe non orient connexe G =(S,A) (n sommets, m artes)
Une fonction cot c : A 9 (valuation des artes)
Rappel :
Un arbre couvrant de G est un graphe partiel de G qui est un arbre.
(On identifiera un arbre couvrant son ensemble dartes)
Problme :
Dterminer un arbre couvrant H* de G de cot minimum.
Dfinition :
Soit H un arbre couvrant, le cot de H, not aussi c(H) est la
somme
eeH
c(e) des cots de ses artes.
Remarque : H* existe puisque le nombre d arbres couvrants de G
est fini.
.
Exemple
a
b
c d
e
f
g
h
i
4
8
11
8 7
2
2
1
4
6
14
9
10
7
Graphe G:
a
b
c d
e
f
g
h
i
4
8
11
8 7
2
2
1
4
6
14
9
10
7
a
b
c d
e
f
g
h
i
4
8
11
8 7
2
2
1
4
6
14
9
10
7
Arbre couvrant de cot = 47 Arbre couvrant de cot = 37
Algorithme gnrique
Approximant :
Un couple (X,Y) de parties disjointes de A est un approximant sil
existe un arbre optimal H* tel que X c H* et Y c A-H* .
Remarques :
1) (C, C) est un approximant ;
2) Le graphe (S, X) est une fort couvrante de G ;
3) - Si Card X=n-1 alors X est un arbre optimal.
- Si Card Y=m-n+1 alors A\Y est un arbre optimal.
2 rgles permettant damliorer un approximant :
a) la rgle des cocycles (RCOC) ;
b) la rgle des cycles (RCYC) .
Convention : les artes de X sont bleues, celles de Y sont rouges et
celles de Z = A - (X Y), dites artes libres, sont blanches.
Cocycle :
Soit G=(S,A). Soit S c S .
Le cocycle w(S) associ S est lensemble des artes ,x,y- eA
telles que
(x eS et y e S) ou (x e S et y e S)
Exemple :
Rgle des cocycles
a
b
c d
e
f
g
h
i
4
8
11
8 7
2
2
1
4
6
14
9
10
7
Cocycle :
Soit G=(S,A). Soit S c S .
Le cocycle w(S) associ S est lensemble des artes ,x,y- eA
telles que
x eS et y e S ou x e S et y e S
Exemple :
Rgle des cocycles
a
b
c d
e
f
g
h
i
4
8
11
8 7
2
2
1
4
6
14
9
10
7
Soit (X,Y) un approximant et soit H* un arbre optimal tel que
X c H* et Y c A-H*.
Supposons quil existe un cocycle C form dartes rouges ou
blanches.
C possde au moins une arte blanche, car sinon H* ne serait pas
connexe.
Soit e une arte blanche de C de cot minimum.
Thorme :
Soit (X,Y) un approximant, soit C un cocycle dont chaque arte
est rouge ou blanche ;
Soit e une arte blanche de C de cot minimum.
(X {e}, Y) est un approximant
Preuve :
Rgle des cocycles
Si e e H* ,
soit la chane de substitution de e dans H*.
contient une arte f de C distincte de e.
f est blanche (car f e H*C) et on a c(f) c(e) .
Considrons le graphe partiel G* = H* - {f} +{e}
G* est connexe et possde n-1 artes.
G* est donc un arbre de cot c(H*) - c(f) + c(e) .
On a donc, par dfinition de e : c(G*) = c(H*) .
G* est donc aussi un arbre optimal.
On a de plus : X {e} c G* et Y c A-G* .
Il en rsulte que (X {e}, Y) est un approximant.
Si e e H* , alors X {e} c H* .
Il en rsulte que (X {e}, Y) est un approximant.
Soit (X,Y) un approximant et soit H* un arbre optimal tel que
X c H* et Y c A-H*.
Supposons qu il existe un cycle C form dartes bleues ou
blanches.
C possde au moins une arte blanche, car sinon H* possderait
un cycle.
Soit e une arte blanche de C de cot maximum.
Thorme :
Soit (X,Y) un approximant, soit C un cycle dont chaque arte est
bleue ou blanche.
Soit e une arte blanche de C de cot maximum.
(X, Y {e} ) est un approximant .
Preuve :
Rgle des cycles
Si e e H* ,
Soit K
1
et K
2
les 2 composantes connexes de H*- {e} .
Le cycle C possde une arte f appartenant w(K
1
)
et distincte de e.
f est blanche (car f e w(K
1
) C) et on a c(f) c(e) .
Considrons le graphe partiel G* = H* - {e} +{f}
G* est connexe et possde n-1 artes.
G* est donc un arbre de cot c(H*) - c(e) + c(f) .
On a donc, par dfinition de e : c(G*) = c(H*) .
G* est donc aussi un arbre optimal .
On a de plus : Y {e} c A-G* et X c G* .
Il en rsulte que (X, Y {e} ) est un approximant.
Si e e H* , alors Y {e} c A-H* .
Il en rsulte que (X, Y {e} ) est un approximant
Algorithme gnrique
(X,Y) := (C, C) ;
boucle :
Z := A - (X Y) ;
si RCOC est applicable un cocycle C alors
dterminer larte e de cot minimum de C Z ;
(X,Y) := (X {e}, Y) ; aller boucle
finsi ;
si RCYC est applicable un cycle C alors
dterminer l arte e de cot maximum de C Z ;
(X,Y) := (X, Y {e} ) ; aller boucle
finsi ;
Retourner (X)
Preuve de lalgorithme gnrique.
L algorithme se termine car chaque tour de boucle,
une arte est ajoute X ou Y ;
Montrons par labsurde que lorsque lalgorithme sarrte,
on a Z = C.
Supposons que lors de la terminaison : e e Z.
Soient X
1
, X
2
, ., X
p
les composantes connexes du graphe
partiel (S,X), qui est une fort.
Si les 2 extrmits de e sont dans une mme composante X
k
,
la rgle RCYC s applique ;
Si les 2 extrmits de e sont dans 2 composantes distinctes
X
i
, et X
j
, la rgle RCOC s applique ;
Contradiction.
On a donc Z = C.
Algorithme de Prim
Principe de lalgorithme :
a) Choisir un sommet s ; T:= {s} ;
b) Rpter n-1 fois :
Appliquer RCOC au cocycle w(T)
Mettre jour T.
fonction Prim(S,A,c): arbrecouvrant ;
(X,Y) := (C, C) ; T := Choisir(S) ;
Pour k de 1 n-1 faire
Dterminer une arte e={u,v} (u e T) de cot minimum de w(T) ;
(X,Y) := (X +{e}, Y) ; T := T {v} ;
FinPour;
Retourner(X)
Preuve de l algorithme de Prim
La terminaison est triviale.
Validit :
Supposons quau dbut de l tape k, (X,Y) soit un
approximant.
Le cocycle w(T) est constitu dartes blanches.
e est une arte de cot minimumde ce cocycle.
On peut donc lui appliquer RCOC.
a
b
c d
e
f g
h
i
4
8
11
8 7
2
2
1
4
6
14
9
10
7
a
b
c d
e
f g
h
i
4
8
11
8 7
2
2
1
4
6
14
9
10
7
a
b
c d
e
f g
h
i
4
8
11
8 7
2
2
1
4
6
14
9
10
7
a
b
c d
e
f g
h
i
4
8
11
8 7
2
2
1
4
6
14
9
10
7
a
b
c d
e
f g
h
i
4
8
11
8 7
2
2
1
4
6
14
9
10
7
a
b
c d
e
f g
h
i
4
8
11
8 7
2
2
1
4
6
14
9
10
7
Une excution de lalgorithme de Prim
a
b
c d
e
f g
h
i
4
8
11
8 7
2
2
1
4
6
14
9
10
7
a
b
c d
e
f g
h
i
4
8
11
8 7
2
2
1
4
6
14
9
10
7
a
b
c d
e
f g
h
i
4
8
11
8 7
2
2
1
4
6
14
9
10
7
a
b
c d
e
f g
h
i
4
8
11
8 7
2
2
1
4
6
14
9
10
7
Une excution de lalgorithme de Prim (fin)
Algorithme trs proche de celui de Dijkstra:
d(s
1
) = 0; ouvrir(s
1
);
Pour tout k de 2 n faire
d(s
k
) = + ;
FinPour
Pour k de 1 n-1 faire
Soit x un sommet ouvert tel que d(x) est minimum;
Examiner(x);
FinPour.
Examiner(x) dans Dijkstra :
Pour tout successeur y de x faire
Si d(y) > d(x)+c(x,y)
alors d(y)= d(x)+c(x,y);
pre(y)=x;
ouvrir(y);
FinSi
FinPour
fermer(x);
Examiner(x) dans Prim :
Pour tout successeur y de x faire
Si d(y) > c(x,y)
alors d(y)= c(x,y);
pre(y)=x;
ouvrir(y);
FinSi
FinPour
fermer(x);
Complexit de lalgorithme de Prim
Mme complexit que lalgorithme de Dijkstra: dpend
de limplmentation choisie.
En utilisant un tas: complexit en O((n+m)log n)
Algorithme de Kruskal
Principe de l algorithme :
a) trier les artes par cot croissant ;
b) examiner dans lordre chacune des artes :
si les 2 extrmits sont dans 2 composantes connexes distinctes
de la fort (S,X) alors appliquer RCOC sinon appliquer RCYC
fonction Kruskal(S,A,c): arbrecouvrant ;
(X,Y) := (C, C) ;
Trier (A) ;
Pour k de 1 m faire
Soient u
k
et v
k
les extrmits de a
k
;
Si Comp(u
k
,X) = Comp(v
k
,X) alors (X,Y) := (X, Y+{a
k
})
sinon (X,Y) := (X + {a
k
}, Y);
FinPour
Retourner(X)
Preuve de l algorithme de Kruskal
La terminaison est triviale.
Validit :
Supposons quau dbut de ltape k, (X,Y) soit un
approximant.
Si Comp(u
k
,X) = Comp(v
k
,X) , alors il existe un cycle
dont toutes les artes sont bleues sauf a
k
(blanche) qui
est de cot maximum(puisque cest la seule du cycle)
Si Comp(u
k
,X) Comp(v
k
,X) , alors il existe un cocycle
dont toutes les artes sont rouges ou blanches.
Larte a
k
de ce cocycle est blanche et de cot minimum
car cest la premire de la liste trie qui est blanche.
2 1
a
b
c d
e
f g
h
i
4
8
11
8 7
2
4
6
14
9
10
7
a
b c d
e
f g
h
i
4
8
11
8 7
2
2
1
4
6
14
9
10
7
a
b
c d
e
f g
h
i
4
8
11
8 7
2
2
1
4
6
14
9
10
7
8 7
2 1
a
b
c d
e
f g
h
i
4
8
11
2
4
6
14
9
10
7
Une excution de l algorithme de Kruskal
a
c d
e
f g
h
i
4
8
11
8 7
2
2
1
4
6
14
9
10
7
b
a
b
d
e
f g
h
i
4
8
11
8 7
2
2
1
4
6
14
9
10
7
c
Une excution de lalgorithme de Kruskal (suite)
2 1
a
b
c d
e
f g
h
i
4
8
11
8 7
2
4
6
14
9
10
7
8 7
2 1
a
b
c d
e
f g
h
i
4
8
11
2
4
6
14
9
10
7
a
b
c d
e
f g
h
i
4
8
11
8 7
2
2
1
4
6
14
9
10
7
8 7
a
b
c d
e
f g
h
i
4
8
11
2
2
1
4
6
14
9
10
7
2
a
b
c d
e
f g
h
i
4
8
11
2
4
6
14
9
10
7
1 1
a
b
c d
e
f g
h
i
4
8
11
8 7
2
4
6
14
9
10
7
2
a
b
c d
e
f g
h
i
4
8
11
8 7
2
2
1
4
6
14
9
10
7
a
b
c d
e
f g
h
i
4
8
11
8 7
2
2
1
4
6
14
9
10
7
Une excution de l algorithme de Kruskal (fin)
a
b
c d
e
f g
h
i
4
8
11
8 7
2
2
1
4
6
14
9
10
7
Complexit de lalgorithme de Kruskal
Trier(A) se fait en O(m log m)
Soit o la complexit de la comparaison Comp(u
k
,X) = Comp(v
k
,X)
La complexit de lalgorithme est O(m log m + m o)
Montrons que la complexit est en O(m log m)
fonction Kruskal(S,A,c): arbrecouvrant ;
(X,Y) := (C, C) ;
Trier (A) ;
Pour k de 1 m faire
Soient u
k
et v
k
les extrmits de a
k
;
Si Comp(u
k
,X) = Comp(v
k
,X) alors (X,Y) := (X, Y+{a
k
})
sinon (X,Y) := (X + {a
k
}, Y);
FinPour
Retourner(X)
On souhaite travailler sur les partitions de E=,1, , n-
Exemple :
Partition = { {1,3} , {4} , {2,7,9}, {5,6,8,10} }
classe dquivalence 1 2 3 4
Etant donn une partition, on souhaite
- Trouver la classe dquivalence dun lment : mthode Find
- Fusionner deux classes dquivalence : mthode Union
Dans lalgorithme de Kruskal : E = ensemble des sommets.
- Deux sommets u et v sont dans une mme composante connexe
si Find(u)= Find(v)
- Si on choisit larte (u,v), on fusionne deux composantes
connexes en une : Union(u,v)
Union -Find
Une solution peu efficace
On reprsente la partition par un tableau tab, tel que tab[i] soit le
numro de la classe dquivalence de llment i.
P = { {1,3} , {4} , {2,7,9}, {5,6,8,10} }
classe 1 2 3 4
Find : complexit en O(1)
Union : complexit en O(n)
1 3 1 2 4 4 3 4 3 4
1 2 3 4 5 6 7 8 9 10
Une solution meilleure
On reprsente la partition par une fort.
- Chaque arbre correspond une classe dquivalence.
-La racine de chaque arbre est le reprsentant de la classe.
On reprsente la fort par un tableau pre, tel que pre[i] est le
pre de llment i, en posant pre*i+=i pour une racine.
P = { {1,3} , {4} , {2,7,9}, {5,6,8,10} }
1 2 1 4 5 5 2 5 2 5
1 2 3 4 5 6 7 8 9 10
pre
1
3
4
2 5
7
9
6 8
10
Find
Exemple: Find(9) P = { {1,3} , {4} , {2,7,9}, {5,6,8,10} }
1 2 1 4 5 5 2 5 7 8
1 2 3 4 5 6 7 8 9 10
pre
1
3
4
2 5
7
9
6 8
10
fonction Find(entier x): entier;
Tant que (x = pre[x])
x := pre[x];
FinTantque
Retourner(x)
pre[9]=7 ; pre[7]=2; pre[2]=2; retourner(2)
Union
Exemple: Union(3,8) P = { {1,3} , {4} , {2,7,9}, {5,6,8,10} }
1
3
4
2
5
7
9
6 8
10
procdure Union (entier x, entier y): entier;
r1= Find(x);
r2 = Find(y);
Si (r1 = r2) alors
pre[r2]= r1;
FinSi
Find(3)=1
Find(8)=5
pre[5]=1
1
3
5
6 8
10
Union pondre
Lopration Find seffectue en temps O(h), o h est la hauteur de
larbre. Pire cas : h= O(n)
Lors de lunion de deux arbres, la racine de larbre avec le moins
de sommets devient fils de la racine de lautre.
Exemple: Union(3,8) P = { {1,3} , {4} , {2,7,9}, {5,6,8,10} }
1
3
4
2
7
9
Find(3)=1
Find(8)=5
pre[1]=5
5
6 8
10
5
6
8
10
1
3
Union pondre
On maintient un tableau taille (initialis 1 si lon part de classes
singleton) : si i est une racine, taille[i] est le nombre de sommets
de larbre de racine i.
procdure Union (entier x, entier y): entier;
r1= Find(x);
r2 = Find(y);
Si (r1 = r2) alors
Si (taille[r1])>taille[r2]) alors
pre[r2] := r1;
taille[r1] :=taille[r1]+taille[r2]
sinon
pre[r1] := r2;
taille[r2] :=taille[r1]+taille[r2]
FinSi
FinSi
Union pondre
La hauteur dun arbre n sommets cr par une suite dunions
pondres est s 1 + log
2
(n)
Preuve: Par rcurrence sur n
- Cas de base : vrai pour n=1.
-Induction :
Soit T un arbre obtenu par union pondre dun arbre x
sommets (avec 1sxsn/2) et dun arbre (n-x) sommets.
Hauteur(T) s max(1 + log
2
(n-x), 2 + log
2
(x)).
Or log
2
(n-x) s log
2
(n)
et log
2
(x) s log
2
(n/2) s log
2
(n)-1
La hauteur de T est donc majore par 1 + log
2
(n)
Union et Find sont donc en O(log n)
Point sur la complexit de lalgorithme de Kruskal
Union et Find sont en O(log n)
Complexit de Kruskal : O(m log m + m log n)= O(m log m)
Et si les cots des artes sont faibles (en O(m)), de faon ce que
Trier(A) se fasse en O(m)?
On cherche amliorer la complexit de Union et Find.
fonction Kruskal(S,A,c): arbrecouvrant ;
(X,Y) := (C, C) ;
Trier (A) ;
Pour k de 1 m faire
Soient u
k
et v
k
les extrmits de a
k
;
Si Comp(u
k
,X) = Comp(v
k
,X) alors (X,Y) := (X, Y+{a
k
})
sinon (X,Y) := (X + {a
k
}, Y);
FinPour
Retourner(X)
Deuxime amlioration : compresser les chemins
Quand on remonte du sommet x vers sa racine r, on refait le
parcours en faisant de chaque sommet rencontr un fils de r.
fonction Findsimple(entier x):
entier;
Tant que (x =pre[x])
x := pre[x];
FinTantque
Retourner(x)
fonction Find(entier x): entier;
r := Findsimple(x);
Tant que (x = pre[x])
y := pre[x]
pre[x]:=r;
x:=y;
FinTantque
Retourner(x)
Exemple : Find(5)
Arbre initial :
Arbre final :
4
6
8
10
1
3
2 9
5 7
12
4
6
8
10
1
3
9
12
5
2
7
Complexit de Union et Find?
Complexit amortie : n oprations Union + m oprations Find se
ralisent en temps O(n + m o(n,m)), o o est une fonction qui
crot trs trs lentement.
En effet, o(n,m) est la rciproque de la fonction dAckermann qui
crot extrmement vite: on a o(n,m) s 4 pour n,m s 2
2048
.
En pratique, o(n,m) est donc une constante.
Complexit de lalgorithme de Kruskal?
Si on suppose que Tri(A) est effectu en temps O(m).
On a alors n Union et m Find sur n lments : ceci se fait en O(n +
m o(n,m)).
Rappel: dans le cas gnral la complexit est en O(m log m).

You might also like