Chaînes dans un graphe Cycle dans un graphe Connexité C = s0

publicité
Chaînes dans un graphe
Cycle dans un graphe
Connexité
Une chaîne dans un graphe est une suite alternée de
n + 1 sommets et n arêtes :
Exemple d'utilité : Est-il possible de prendre le
train pour aller
◦ De Bordeaux à Rome?
◦ De Bordeaux à Oslo?
◦ De Bordeaux à Reykjavik?
La notion de chaîne exprime cette idée.
Un cycle est une chaîne
dont les deux extrémités
coïncident (s0 = sn )
On peut choisir n’importe
quel sommet du cycle
comme sommet de
départ.
Exemple :
On dit alors que C relie s0 à sn ou encore que C est un
chemin entre s0 à sn
Remarques :
Si n = 0, on obtient une chaîne sans arête C = s0.
Il est souvent nécessaire de savoir si l'on peut
aller d'un sommet à un autre en suivant des
arêtes.
C = s0,a1, s1, a2, s2 … , an, sn
les extrémités d’une arête ai sont les sommets si-1 et si.
Pour définir une chaîne, se donner seulement la suite
des arêtes, ou seulement la suite des sommets ne
suffit pas (pourquoi ?).
1
Une chaîne est élémentaire si ses sommets et ses
arêtes sont distincts deux à deux sauf les sommets
extrémités qui peuvent être égaux.
Dans ce cas il s’agit d’un cycle élémentaire
La longueur d’une chaîne ou d’un cycle est le
nombre n d’arêtes qui composent la chaine ou le
cycle.
Une chaîne peut-être réduite à un seul sommet, elle
est alors de longueur nulle. Cette chaine est aussi
un cycle de longueur nulle.
La connexité exprime la possibilité d'aller de
n'importe quel sommet du graphe à n'importe
quel autre sommet du graphe.
Informellement, un graphe est connexe s'il est en
un seul morceau.
Connexe
◦ Un graphe G est connexe si pour tous sommets s et
t de G il existe une chaîne qui relie s à t.
Une composante connexe d’un graphe G est un
sous ensemble maximal de sommets de G tels que
deux quelconques d’entre eux soient reliés par une
chaîne..
Connexe : 1 composante connexe
2 composantes connexes
Non connexe
Dans un graphe G, s'il existe une chaîne
entre deux sommets s et t, alors il existe
une chaîne simple entre s et t.
La preuve est constructive. On prend une
chaîne non simple et on en supprime les
cycles pour construire une chaîne simple.
2
Soit C = s1, a1, s2, … , sk, ak, sk+1 la chaîne.
Si C est simple, le travail est terminé.
Sinon, il y a deux sommets si et sj pour lesquels
i < j et si = sj [où i et j sont choisis parmi les entiers de
1 à k+1].
On écrit donc :
C = s1, a1,..., si, ai,..., sj, aj,... ,sk, ak , sk+1
Vérifier s'il existe une chaîne entre un sommet s et
un sommet t n'est pas forcément simple.
Pour y arriver, nous allons utiliser une technique
pour marquer et démarquer les sommets.
◦ Les marques laissées sur les sommets agissent en
quelque sorte comme une mémoire d’un parcours
effectué dans le graphe.
On construit une chaîne C' plus courte en
supprimant de C la partie ai,..., sj
On obtient alors : C' = s1, a1,..., si, aj, ..., sk, ak, sk+1.
Reste à vérifier que C' est bien une chaîne (cela vient
de ce que si est bien une extrémité de l’arête aj).
On observe que la chaîne C‘ ainsi obtenue est plus
courte, ce qui permet de conclure en invoquant le
principe d’induction (appliqué à la longueur des
chaînes).
Algorithme :
1. démarquer tous les sommets
2. marquer s
3. tant que t n'est pas marqué,
3.1 chercher une arête dont un sommet extrémité est
marqué et l'autre ne l'est pas
3.2 si une telle arête n'existe pas, renvoyer la valeur "faux
faux"
faux
3.3 sinon marquer l'extrémité non encore marquée
4. renvoyer la valeur "vrai"
3
La première phase consiste à se mettre dans un état de
départ adéquat afin d’assurer le bon fonctionnement
de l’algorithme.
L’action « renvoyer » correspond à la réponse attendu
et donné par l’algorithme, l’action « renvoyer »
implique que l’algorithme est arrivé à sa conclusion et
s’arête.
On suppose ici que la recherche d’une arête qui
satisfait la condition se fait en suivant une procédure
connue.
On suppose aussi que l’on a une façon facile de vérifier
si un sommet est marqué et de le marquer ou de le
démarquer le cas échéant.
s
t
u
Resterait encore à prouver que l’algorithme fait
bien le travail que l’on attend de lui. C’est-àdire:
◦ Que l’on obtient éventuellement et à chaque
fois une réponse de sa part,
◦ Et que cette réponse est bien la bonne (!).
Étape 1 :
Étape 2 :
Étape 3.1 :
Étapes 3.2 et 3.3 :
L’algorithme visite d’abord le voisin u de s qui se trouve au bas du
graphe puis remonte vers le haut à droite. Il sélectionne ensuite
voisin de u à gauche et en bas de s avant de « trouver » t.
4
Étape 1 : |S| unités de
temps.
Étape 2 : 1 unité de
temps.
Étape 3.1 : au pire, pour
chercher une arête «
bicolore » , on passe d(s)
+ 1 unité de temps par
sommet s, ce qui coûte:
Σs (d(s) + 1) = 2|A| + |S|
= O(|A| + |S|) unités de
temps.
Étapes 3.2 et 3.3 : 1 unité
de temps.
Au pire, on
recommence l'étape 3
pour chaque sommet,
donc |S| fois au total.
La complexité de
l'algorithme est donc
au pire de l'ordre de
|S|(|A| + |S|) [en
négligeant les étapes
1, 2, 3.2, 3.3 et un
facteur 2]
Rq Il existe un
algorithme de
complexité O(|A| +
|S|).
5
Téléchargement