1 Un multigraphe non orienté est un triple G = (V,E,m) o`u

publicité
1
Un multigraphe non orienté est un triple G = (V, E, m) où
— (V, E) est un graphe non orienté ;
— m : E → N est une fonction.
La valeur m(e) est appelée multiplicité de l’arête e. Considérons le multigraphe ci-bas :
3
1
6
4
2
5
Alors
V = {1, 2, 3, 4, 5, 6}
E = {{1, 2}, {1, 3}, {2, 3}, {2, 4}, {2, 5}, {3, 4}, {3, 6}, {4, 5}, {4, 6}, {5, 6}}
et pour toute arête e ∈ E,


2, si e = {2, 3} ;
m(e) = 3, si e = {5, 6} ;


1, sinon.
Pour simplifier l’écriture, on suppose également que m(e) = 0 si e ∈
/ E.
On dit d’un ensemble d’arêtes C ⊆ E qu’il forme une coupe de G si le graphe résultant de
la suppression des arêtes de C est non connexe. Par exemple, dans le multigraphe plus haut, les
arêtes {1, 3} et {1, 2} forment une coupe (séparant 1 des autres sommets) ou encore les arêtes
{2, 4}, {2, 5}, {3, 4}, {3, 6} (séparant 1, 2, 3 d’une part et 4, 5, 6 d’autre part). On dit d’une coupe
qu’elle est optimale si elle utilise le moins d’arête possible (en tenant compte de la multiplicité).
On s’intéresse ici à trouver une coupe optimale d’un multigraphe G.
Il existe un algorithme exact dû à Stoer et Wagner (1995) qui permet de trouver une coupe
optimale en O(nm + n2 log n), où n est le nombre de sommets et m le nombre d’arêtes. Cependant,
l’implémentation de cet algorithme est assez compliquée. Plutôt que d’utiliser un algorithme exact,
on se rabattra ici sur un algorithme probabiliste qui trouve une coupe qui n’est pas nécessairement
optimale, mais qui donne en pratique de bons résultats, et qui est très simple à implémenter. Le
pseudocode correspondant à l’algorithme se trouve plus bas. À noter que les sommets sont des
ensembles de valeurs plutôt que de simples valeurs.
1: fonction Coupe(G : multigraphe non orienté) : ensemble d’arêtes
2:
V 0 ← {{v} | v ∈ V }
. Les sommets v de G sont remplacés par des singletons {v}.
3:
E0 ← E
4:
tant que |V 0 | > 2 faire
5:
Soit {a, b} ∈ E une arête choisie au hasard (dans le graphe de départ)
6:
Soient A le sommet contenant a et B le sommet contenant b
7:
C ←A∪B
8:
Ajouter C dans V 0
9:
Retirer A et B de V 0
10:
Retirer de E 0 toutes les arêtes de la forme {u, u0 } pour u ∈ U et u0 ∈ U 0
11:
fin tant que
2
retourner E 0
fin fonction
Dans l’algorithme précédent, à chaque tour de boucle, on applique une opération appelée
contraction sur une arête {u, v}, c’est-à-dire qu’on fusionne les sommets u et v en un seul sommet
tout en préservant les autres arêtes, ce qui peut modifier la multiplicité de certaines arêtes. Par
exemple, dans le multigraphe plus bas, si on contracte l’arête {4, 6}, alors on obtient le multigraphe
suivant :
12:
13:
3
6
3
4, 6
1
4
2
1
5
2
5
Illustrons l’algorithme sur l’exemple ci-haut en choisissant les arêtes dans l’ordre
{4, 6}, {1, 2}, {5, 46}, {12, 3}.
On obtient
3
6
3
4, 6
1
4
2
1
5
2
5
3
4, 6
1, 2
5
3
4, 5, 6
1, 2
1, 2, 3
4, 5, 6
On en déduit que les arêtes {2, 4}, {2, 5}, {3, 4} et {3, 6} forment une coupe du graphe G de taille
4 qui sépare les sommets 1, 2, 3 des sommets 4, 5, 6.
L’algorithme termine lorsqu’il reste exactement deux sommets. À chaque étape, toutes les arêtes
sont préservées, sauf celle impliquée dans la contraction. Ainsi, il y a deux possibilités pour chaque
arête du graphe :
3
1. Soit elle est éventuellement contractée et alors il s’agit d’une arête intérieure à un des deux
ensembles de sommets qui sont séparés ;
2. Soit elle n’est jamais contractée et alors elle relie deux sommets appartenant à des ensembles
de sommets qui sont séparés. On en conclut que cette arête doit appartenir à la coupe en
question.
Les arêtes résultantes forment donc une coupe.
Proposition 1. Soit C une coupe optimale.
(i) Pour tout v ∈ V , on a |C| ≤ deg(v) ;
(ii) 2|E| ≥ |V ||C|.
(iii) La probabilité qu’une arête choisie au hasard se trouve dans C est au plus 2/n.
Démonstration. (i) Pour tout v ∈ V , soit E(v) l’ensemble des arêtes incidentes à v. Si on
supprime les arêtes E(v) du graphe, alors le sommet v est séparé du reste du graphe, de sorte que
E(v) est une coupe. Par conséquent, si C est une coupe optimale quelconque, on a |C| ≤ |E(v)| =
deg(v).
(ii) Le lemme des poignées de main stipule que, dans tout graphe non orienté G = (V, E), nous
avons la relation
X
2|E| =
deg(v).
v∈V
On en déduit alors de la sous-sous-question précédente que
X
X
|C| = |V ||C|.
deg(v) ≥
2|E| =
v∈V
v∈V
(iii) Soit Ce l’événement : “l’arête e appartient à l’ensemble C”. Alors
P (Ce ) =
|C|
2
2
≤
= .
|E|
|V |
n
Soit C une coupe optimale. Considérez les événements suivants :
Ei : “Aucune arête de C n’a été contractée à l’étape i”
Fi : “Aucune arête de C n’a été contractée aux étape 1, 2, . . ., i”
Par définition, nous avons la relation
Fi =
i
\
Ek .
k=1
Proposition 2. En utilisant la notation ci-haut, nous avons les relations suivantes :
(i) Pour i = 1, 2, . . . , n, on a
P (Ei | E1 ∩ E2 ∩ · · · ∩ Ei−1 ) ≥ 1 −
2
.
n−i+1
(ii)
P (Fn−2 ) = P (E1 )
n−2
Y
i=2
P (Ei | E1 ∩ E2 ∩ · · · ∩ Ei−1 )
4
(iii)
P (Fn−2 ) ≥
2
n(n − 1)
(iv) La probabilité que la coupe obtenue par l’algorithme ne soit pas minimale est au plus
2
.
n2
1−
Démonstration. (i) On a
P (Ei | E1 ∩ E2 ∩ · · · ∩ Ei−1 ) = P (Ei | Fi−1 ) ≤
2
,
n−i+1
puisqu’à l’étape i, il y a n − i + 1 sommets.
(ii) Rappelons que pour toute paire d’événements A et B, nous avons P (A | B) = P (A ∩
B)/P (B), ce qui se réécrit P (A ∩ B) = P (B)P (A | B). On en déduit que
P (En−2 ∩ Fn−3 )
P (Fn−3 )P (En−2 | Fn−3 )
P (Fn−4 )P (En−3 | Fn−4 )P (En−2 | Fn−3 )
P (Fn−5 )P (En−4 | Fn−5 )P (En−3 | Fn−4 )P (En−2 | Fn−3 )
...
n−2
Y
= P (E1 )
P (En−i | Fn−i−1 ).
P (Fn−2 ) =
=
=
=
=
= P (E1 )
i=2
n−2
Y
P (Ei | Fi−1 ).
i=2
(iii) Il suit de (i) et (ii) que
P (Fn−2 ) = P (E1 )
n−2
Y
P (Ei | Fi−1 )
i=2
≥
≥
≥
≥
≥
≥
n−2
Y
2
1−
n−i+1
i=1
n
Y
2
1−
i
i=3
n Y
i−2
i
i=3
Qn
(i − 2)
i=3
Qn
i=3 i
(n − 2)!
n!/2!
2
.
n(n − 1)
5
(iv) La probabilité que la coupe obtenue par l’algorithme ne soit pas minimale est donnée par
1 − P (Fn−2 ) ≤ 1 −
2
2
< 1 − 2.
n(n − 1)
n
On en déduit que si on répète l’algorithme k = n2 /2 fois, alors la probabilité d’obtenir une
coupe non optimale est d’au plus
k
2
1− 2 .
n
En effet, chaque exécution de l’algorithme est indépendante des précédentes et des suivantes. Par
conséquent, si on répète l’algorithme k = n2 /2 fois, alors la probabilité d’obtenir une couple
non optimale est égale au produit de la probabilité d’obtenir une couple non optimale à chaque
exécution, c’est-à-dire
k n2 /2
2
2
= 1− 2
.
1− 2
n
n
L’intérêt de cet algorithme probabiliste est que si on le répète par exemple n2 /2 fois, alors la
probabilité d’obtenir une coupe non optimale est d’au plus
2
1− 2
n
k
n2 /2
2
1
= 1− 2
< ≈ 0.3678.
n
e
Autrement dit, la probabilité d’obtenir une coupe optimale est d’au moins 0.6322. Si on répète
l’algorithme plusieurs fois encore, la probabilité augmente. Il existe des algorithmes exacts pour
calculer des coupes optimales, mais ils sont bien plus compliqués à mettre en oeuvre et moins
performants. Par conséquent, un algorithme probabiliste peut être intéressant selon la situation.
Téléchargement