1 Licence d’informatique Algorithmique des graphes Exploration de la descendance d’un sommet Utilisation de ce document strictement réservée aux étudiants de l ’IFSIC dans le cadre de leur formation. Reproduction ou diffusion en dehors de l ’IFSIC strictement interdite sauf autorisation expresse de l’ auteur.
2 Explorer la descendance d’un sommet Donnée : un graphe G, et un sommet x de ce graphe Résultat : la descendance de x dans le graphe G Qu’est-ce que c’est ? Définition : le sommet y est descendant de x dans G si x = y ou si il existe un chemin de G, allant de x à y
3 Explorer la descendance d’un sommet Donnée : un graphe G, et un sommet x de ce graphe Résultat : la descendance de x dans le graphe G Mais aussi : Définition : l ’arc (y, z) appartient à la descendance de x dans G si c’est un arc de G et si y est descendant de x dans G
4 i j h gk e l b ca d f gk e l b ca d f Graphe G * = ( * (a), a ) Exemple
5 Principe général d’exploration : visites visité(y) : le sommet y a été visité (par l’exploration) visité(y,z) : l’arc (y, z) a été visité (par l’exploration) Prédicats : Axiomes : (le sommet initial x est visité a priori) (seul un arc du graphe peut être visité et son origine doit être visitée) (un sommet z est visité ssi au moins un arc vers z est visité)
6 Principe général d’exploration : visites visité(x) (axiome init) Etat initial : But (Etat final) : (arc) aprèsd' donc,et
7 Algorithme général d’exploration Invariant : 3 états possibles pour chaque sommet y : 1) Il n’est pas (encore?) visité
8 Invariant : 3 états possibles pour chaque sommet y : 1) Il n’est pas (encore?) visité (donc aucun des arcs qui y aboutissent non plus) Algorithme général d’exploration
9 Invariant : 3 états possibles pour chaque sommet y : 1) Il n’est pas (encore?) visité 2) Il est déjà visité, et ses arcs sortants ne sont pas encore tous visités (la réciproque de cet axiome n’est pas vraie) (donc aucun des arcs qui y aboutissent non plus) Algorithme général d’exploration
10 Invariant : 3 états possibles pour chaque sommet y : 1) Il n’est pas (encore?) visité 2) Il est déjà visité, et ses arcs sortants ne sont pas encore tous visités 3) Il est déjà visité, et ses arcs sortants sont tous visités (donc tous ses successeurs sont aussi visités) (donc aucun des arcs qui y aboutissent non plus) Algorithme général d’exploration
11 Invariant : 3 états possibles pour chaque sommet y : 1) Il n’est pas (encore?) visité 2) Il est déjà visité, et ses arcs sortants ne sont pas encore tous visités 3) Il est déjà visité, et ses arcs sortants sont tous visités (donc tous ses successeurs sont aussi visités) (donc aucun des arcs qui y aboutissent non plus) dehors en_attente terminé Algorithme général d’exploration
12 Invariant : 2 états possibles pour chaque arc (y,z) : 1) Il n’est pas (encore?) visité Algorithme général d’exploration
13 Invariant : 2 états possibles pour chaque arc (y,z) : 1) Il n’est pas (encore?) visité 2) Il est déjà visité (donc son origine y et son extrémité z aussi - axiomes (sommet) et (arc)) Algorithme général d’exploration
14 Invariant : L’ensemble des sommets du graphe se répartit en : L’ensemble des arcs du graphe se répartit en : Algorithme général d’exploration
15 Invariant : L’ensemble des sommets du graphe se répartit en : Propriétés : (seuls les sommets descendants de x peuvent être visités) Algorithme général d’exploration
16 Invariant : Propriétés : (seuls les sommets descendants de x peuvent être visités) L ’ensemble des arcs du graphe se répartit en : (seuls les arcs de la descendance de x peuvent être visités) Algorithme général d’exploration
17 STATUT DES SOMMETS ET DES ARCS i j h gk e l b ca d f dehors en_attente terminé visité
18 ARRET : état final de l’exploration : Par définition : Algorithme général d’exploration
19 ARRET : état final de l ’exploration : C’est-à-dire tout y visité est terminé Algorithme général d’exploration
20 ARRET : état final de l’exploration : Réciproquement : Donc : Algorithme général d’exploration
21 ARRET : état final de l’exploration : Réciproquement : Algorithme général d’exploration
22 INIT : Algorithme général d’exploration état initial de l’exploration : visité(x) V <- ; si x a des successeurs alors T <- ; A <- {x}; sinon T <- {x}; A <- fsi ; D <- tous les sommets sauf x
23 PROGRESSION: Maintien des axiomes (init) un sommet visité ne repasse jamais dehors (sommet) après visite d’un arc (y,z), z n’est pas dehors (arc) la visite d’un arc (y,z) n’est possible que si y est en_attente A chaque étape, le nombre d’arcs non visités doit décroître Terminaison Algorithme général d’exploration
24 PROGRESSION: (arc) la visite d’un arc (y,z) n’est possible que si y est en_attente A chaque étape, le nombre d’arcs non visités doit décroître soit y un sommet d’état en_attente ; soit z un successeur de y tel que (y,z) est non visité; visiter l’arc (y,z); (sommet) après visite d’ un arc (y,z), z n’est pas dehors Si z est dehors (* non visité *) alors (* visiter y *) si z a des successeurs alors z devient en_attente sinon z devient terminé fsi Algorithme général d’exploration
25 Si z est dehors (* non visité *) alors si z a des successeurs alors z devient en_attente sinon z devient terminé fsi; PROGRESSION: soit y un sommet d’état en_attente ; soit z un successeur de y tel que (y,z) est non visité; Visiter l’arc (y,z); (init) un sommet visité ne repasse jamais dehors si tous les arcs issus de y sont visités alors y devient terminé Algorithme général d’exploration
26 STATUT DES SOMMETS ET DES ARCS i j h gk e l b ca d f dehors en_attente terminé visité en_attente déjà en_attente
27 STATUT DES SOMMETS ET DES ARCS i j h gk e l b ca d f dehors en_attente terminé visité dehors en_attente Encore des arcs à visiter? NON en_attente terminé
28 Si z est dehors (* non visité *) alors si z a des successeurs alors z devient en_attente sinon z devient terminé si tous les arcs issus de y sont visités alors y devient terminé Maintien des propriétés invariantes: soit y un sommet d’état en_attente ; soit z un successeur de y tel que (y,z) est non visité; Visiter l’arc (y,z); fsi ; Par induction :vrai initialement vrai chaque fois qu’un sommet devient en_attente ou terminé
29 si tous les arcs issus de y sont visités alors y devient terminé Si z est dehors (* non visité *) alors si z a des successeurs alors z devient en_attente sinon z devient terminé Maintien des propriétés invariantes: soit y un sommet d ’état en_attente ; soit z un successeur de y tel que (y,z) est non visité; Visiter l ’arc (y,z); fsi ; Par induction :vrai initialement vrai chaque fois qu’un arc devient visité
30 Stratégies particulières On particularise l’algorithme général en spécifiant le sommet en_attente à partir duquel on poursuit l’exploration Deux exemples : LARGEUR : choisir le sommet « le plus ancien » PROFONDEUR : choisir le sommet « le plus récent »
31 LARGEUR D’ABORD : LA FILE Comment repérer le sommet en_attente « le plus ancien »? Gérer l’ensemble A avec la structure de données adéquate : La FILE Premier Arrivé Premier Sorti PAPS
32 LARGEUR D’ABORD : LA FILE La FILE mettre_en_file(v) sens de déplacement va
33 LARGEUR D’ABORD : LA FILE La FILE mettre_en_file(v) sens de déplacement v x ôter_de_file a x
34 x LARGEUR D’ABORD : LA FILE La FILE mettre_en_file(v) sens de déplacement v x ôter_de_file a
35 LARGEUR D’ABORD : LA FILE La FILE mettre_en_file(v) sens de déplacement v x ôter_de_file f créer b filevide
36 LARGEUR D’ABORD : LA FILE sens de déplacement Sommet en tête sélectionné : devient terminé ; Une étape de l ’algorithme : y
37 LARGEUR D’ABORD : LA FILE sens de déplacement z1z1 Sommet en tête sélectionné : devient terminé ; tous ses arcs sortants sont visités ; ses successeurs encore dehors deviennent en_attente (ils rentrent dans la file); Une étape de l ’algorithme : yz2z2 z3z3
38 a i j h gk e l b c d f FILE a
39 i j h gk b e l c d f FILE a c e l a
40 i j h gk b e l c d f FILE a c e l a e l b
41 i j h gk b e l c d f FILE a c e l a e l b l b d f
42 i j h gk b e l c d f FILE a c e l a e l b l b d f b d f h k
43 i j h gk b e l c d f FILE a c e l a e l b l b d f b d f h k Déjà visité d f h k
44 i j h gk b e l c d f FILE a c e l a e l b l b d f b d f h k d f h k Pas de successeur f h k
45 i j h gk b e l c d f FILE a c e l a e l b l b d f b d f h k d f h k f h k Déjà visité h k g
46 i j h gk b e l c d f FILE a c e l a e l b l b d f b d f h k d f h k f h k h k g Déjà visité k g
47 i j h gk b e l c d f FILE a c e l a e l b l b d f b d f h k d f h k f h k h k g Sommets déjà visités k g g
48 i j h gk b e l c d f FILE a c e l a e l b l b d f b d f h k d f h k f h k h k g déjà visité k g g
49 i j g h k b e l c d f aa d f h k g ARBORESCENCE D’EXPLORATION EN LARGEUR DISTANCE 1 DISTANCE 2 DISTANCE 3
50 Stratégies particulières On particularise l ’algorithme général en spécifiant le sommet en_attente à partir duquel on poursuit l’exploration Deux exemples : LARGEUR : choisir le sommet « le plus ancien » PROFONDEUR : choisir le sommet « le plus récent »
51 PROFONDEUR D’ABORD : LA PILE Comment repérer le sommet en_attente « le plus récent » ? Gérer l ’ensemble A avec la structure de données adéquate : La PILE Dernier Arrivé Premier Sorti DAPS
52 La PILE empiler(v) v w PROFONDEUR D’ABORD : LA PILE
53 La PILE empiler(v) v w PROFONDEUR D’ABORD : LA PILE dépiler
54 La PILE empiler(v) w PROFONDEUR D’ABORD : LA PILE dépiler x sommet_pile x w
55 La PILE empiler(v) w PROFONDEUR D’ABORD : LA PILE dépiler x sommet_pile p créer b pilevide
56 y PROFONDEUR D’ABORD : LA PILE Une étape de l ’algorithme : Sommet en tête sélectionné ; Choix d’un arc sortant (y,z) non encore visité ; Visite de l ’arc (y,z) ; Si z est dehors alors il devient en_attente : empiler(z) ; z
57 y PROFONDEUR D’ABORD : LA PILE Une étape de l’algorithme : Sommet en tête sélectionné ; Choix d’un arc sortant (y,z) non encore visité ; Si tous les arcs sortants de y sont visités, y devient terminé ; (dépiler)
58 PROFONDEUR D’ABORD : LA PILE Une étape de l’algorithme : Sommet en tête sélectionné ; Choix d’un arc sortant (y,z) non encore visité ; Si tous les arcs sortants de y sont visités, y devient terminé ; (dépiler) IL FAUT DONC ATTACHER A CHAQUE SOMMET en_attente L’ENSEMBLE DES ARCS A VISITER
59 aa i j h gk e l b c d f PILE a a c a c b a c b e a c b e d a c b e a c b e f a c b e f g a c b e f g k a c b e f g k l a c b e f g k l h a c b e f g k l a c b e f g k a c b e f g a c b e f a c b e a c b a c a
60 i j h b c f aa c b e d f g k l h ARBORESCENCE D’EXPLORATION EN PROFONDEUR
61 Comparaison des deux stratégies Algorithme simple (pas de mémorisation des arcs à visiter) Arborescence des chemins les plus courts (en terme de nombre d’arcs) LARGEUR : PROFONDEUR : Algorithme plus compliqué (mémorisation des arcs à visiter) Arborescence de chemins longs (en terme de nombre d’arcs) Tout état de la pile est un chemin : possibilité de « greffer » sur le parcours des calculs sur les chemins Les états de la file ne sont pas des chemins : pas de calculs sur les chemins lors du parcours