Arbre couvrant de poids minimum

publicité
MOCA – CO9
Arbre couvrant de poids minimum
G = (S, A) Graphe connexe et  une arête a / c a  
Arbre couvrant
T c a / T est un arbre,  x  S ,  (x , y)  T. Ainsi le poids de T =  c a.
Le problème est de chercher un graphe T / le poids de T soit minimum.
Cycle et co-cycle
S
Cycle : chaîne dont le 2 extrémités coïncident ( est un cycle).
X
Co-cylce : ensemble des arêtes ayant une extrémité dans le
cycle et une autre hors du cycle ( est un co-cycle).


Propriétés
Z : a  T (ensembles des arêtes n’appartenant pas à T).
Propriété 1 :
Z
si faux alors   T (impossible car un arbre est sans cycle)
Propriété 2 :
T
Si faux toutes arêtes de  n’est pas une arête de T (impossible)
Définition
(x , y) est un approximant / X  A , Y  A si et seulement si il existe T un arbre couvrant de poids minimum / X 
T, Y  T.  approximant (x,y) / X  A , Y  A ssi  T arbre couvrant de poids minimum / X  T, Y  T.
On note Z est l’ensemble des arêtes – (ensemble des arêtes X  ensemble des arêtes Y). Z = A \ {X  Y}
Règles
Règles 1 :
aT
/ X=,Y
Soit une arête de poids minimal a    Y
(X  {a} , Y) est un approximant
1 - si X  {a}  T => T est de poids minimal
T c’est un approximant
2 - si a  T
a
T
ceca
On supprime e de T
On ajoute a à T
=> T’ est un arbre couvrant de poids minimum
Règles 2 :
e
/Y=,Z
si   X  T alors impossibilité
Soit une arête de poids maximal a    Z
(X , Y  {a}) est un approximant
a
1 - si a  T => T est de poids minimal
T c’est un approximant
2 - si a  T
cace
On supprime a de T
On ajoute e à T
=> T’ est un arbre couvrant de poids minimum
1/3
T
eT
MOCA – CO9
Algorithme générique et démonstration
Algorithme Générique
X <- 
Y <- 
Z <- A
Tant que Règle 1 ou Règle 2 applicable faire
Selon choix Règle 1 ou Règle 2
A est uniedans X ou Y
Fin selon
Fin tant que
Fin Algorithme Générique
( , ) est un approximant. Après chaque passage on a (X , Y) est un approximant.
Supposons qu’à la fin de l’algorithme tout sommet de s a une arête (s , t)  X.
X couvre tous les sommets et est connexe, X est un approximant
=> X acyclique
=> X est un arbre couvrant de poids minimum.
Résolution
Algorithme KRUSKAL
Trier les arêtes par poids croissant (a1, a2, …, an)
Pour i de 1 à n faire
Si T  { ai} ne créer pas de cycle alors
T = T { ai}
Fin si
Fin pour
Fin Algorithme KRUSKAL
3
3
2
3
2
4
3
2
2
4
3
1
2
4
3
1
3
4
3
1
3
2
2
impossible
car cycle
2
4
3
1
2/3
2
1
2
MOCA – CO9
Algorithme PRIM
Marquer arbitrairement un sommet
Tant qu‘il existe un sommet faire
Choisir a de poids minimum dans (T)
Ajouter a à T
T = T  {a}
a = (x , y) / x  T , y  T
Fin Tant que
Algorithme PRIM
3
3
2
a
3
2
4
3
2
2
4
3
1
2
4
3
1
3
2
4
3
1
3
2
2
4
3
1
3/3
2
1
2
Téléchargement