Algorithmique des graphes 2 — Parcours et applications Anthony Labarre 3 f´evrier 2021
Texte intégral
(2) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Aperçu. • Une des tâches les plus basiques pour n’importe quelle structure de données consiste à la parcourir ;. 2.
(3) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Aperçu. • Une des tâches les plus basiques pour n’importe quelle structure de données consiste à la parcourir ; • Les graphes se parcourent principalement de deux façons : en profondeur ou en largeur ;. 3.
(4) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Aperçu. • Une des tâches les plus basiques pour n’importe quelle structure de données consiste à la parcourir ; • Les graphes se parcourent principalement de deux façons : en profondeur ou en largeur ; • Le choix du type de parcours dépendra de ce qu’on veut en faire ;. 4.
(5) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Aperçu. • Une des tâches les plus basiques pour n’importe quelle structure de données consiste à la parcourir ; • Les graphes se parcourent principalement de deux façons : en profondeur ou en largeur ; • Le choix du type de parcours dépendra de ce qu’on veut en faire ; • Un nombre surprenant d’algorithmes résolvant des problèmes très variés sont de simples variantes de ces parcours ;. 5.
(6) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Échauffement : parcours d’arbres • En guise d’échauffement, examinons les parcours sur des arbres (binaires) ;. Applications.
(7) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Échauffement : parcours d’arbres • En guise d’échauffement, examinons les parcours sur des arbres (binaires) ; • Les arbres peuvent être vus comme des graphes très particuliers :. 7.
(8) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Échauffement : parcours d’arbres • En guise d’échauffement, examinons les parcours sur des arbres (binaires) ; • Les arbres peuvent être vus comme des graphes très particuliers : 1. ils ne possèdent pas de cycles ;. Applications.
(9) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Échauffement : parcours d’arbres • En guise d’échauffement, examinons les parcours sur des arbres (binaires) ; • Les arbres peuvent être vus comme des graphes très particuliers : 1. ils ne possèdent pas de cycles ;. 2. le point de départ est fixé (c’est la racine) ;. Applications.
(10) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Échauffement : parcours d’arbres • En guise d’échauffement, examinons les parcours sur des arbres (binaires) ; • Les arbres peuvent être vus comme des graphes très particuliers : 1. ils ne possèdent pas de cycles ;. 2. le point de départ est fixé (c’est la racine) ;. • On les parcourt fréquemment de deux manières :. Applications.
(11) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Échauffement : parcours d’arbres • En guise d’échauffement, examinons les parcours sur des arbres (binaires) ; • Les arbres peuvent être vus comme des graphes très particuliers : 1. ils ne possèdent pas de cycles ;. 2. le point de départ est fixé (c’est la racine) ;. • On les parcourt fréquemment de deux manières : • en profondeur : la racine, puis le sous-arbre gauche, puis le sous-arbre droit ;.
(12) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Échauffement : parcours d’arbres • En guise d’échauffement, examinons les parcours sur des arbres (binaires) ; • Les arbres peuvent être vus comme des graphes très particuliers : 1. ils ne possèdent pas de cycles ;. 2. le point de départ est fixé (c’est la racine) ;. • On les parcourt fréquemment de deux manières : • en profondeur : la racine, puis le sous-arbre gauche, puis le sous-arbre droit ; • en largeur : la racine, puis ses fils, puis les fils de ces fils, . . ..
(13) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Parcours d’arbres en profondeur et en largeur Exemple 1 (parcours d’un arbre binaire) 0 1 3. 0 2. 4. 1 5. 3. 6 7. 0 2. 4. 1 5. 3. 6 8. 7. 9. 4. 5. 6 8 9. arbre. 2. en profondeur. 7. 8 9. en largeur. • en profondeur : 0 1 3 4 6 7 8 9 2 5 ; • en largeur : 0 1 2 3 4 5 6 7 8 9 ; 13.
(14) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Parcours d’arbres en profondeur et en largeur Exemple 1 (parcours d’un arbre binaire) 0 1 3. 0 2. 4. 1 5. 3. 6 7. 0 2. 4. 1 5. 3. 6 8. 7. 9. 4. 5. 6 8 9. arbre. 2. en profondeur. 7. 8 9. en largeur. • en profondeur : 0 1 3 4 6 7 8 9 2 5 ; • en largeur : 0 1 2 3 4 5 6 7 8 9 ; 14.
(15) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Parcours d’arbres en profondeur et en largeur Exemple 1 (parcours d’un arbre binaire) 0 1 3. 0 2. 4. 1 5. 3. 6 7. 0 2. 4. 1 5. 3. 6 8. 7. 9. 4. 5. 6 8 9. arbre. 2. en profondeur. 7. 8 9. en largeur. • en profondeur : 0 1 3 4 6 7 8 9 2 5 ; • en largeur : 0 1 2 3 4 5 6 7 8 9 ; 15.
(16) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Parcours d’arbres en profondeur et en largeur Exemple 1 (parcours d’un arbre binaire) 0 1 3. 0 2. 4. 1 5. 3. 6 7. 0 2. 4. 1 5. 3. 6 8. 7. 9. 4. 5. 6 8 9. arbre. 2. en profondeur. 7. 8 9. en largeur. • en profondeur : 0 1 3 4 6 7 8 9 2 5 ; • en largeur : 0 1 2 3 4 5 6 7 8 9 ; 16.
(17) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Parcours d’arbres en profondeur et en largeur Exemple 1 (parcours d’un arbre binaire) 0 1 3. 0 2. 4. 1 5. 3. 6 7. 0 2. 4. 1 5. 3. 6 8. 7. 9. 4. 5. 6 8 9. arbre. 2. en profondeur. 7. 8 9. en largeur. • en profondeur : 0 1 3 4 6 7 8 9 2 5 ; • en largeur : 0 1 2 3 4 5 6 7 8 9 ; 17.
(18) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Parcours d’arbres en profondeur et en largeur Exemple 1 (parcours d’un arbre binaire) 0 1 3. 0 2. 4. 1 5. 3. 6 7. 0 2. 4. 1 5. 3. 6 8. 7. 9. 4. 5. 6 8 9. arbre. 2. en profondeur. 7. 8 9. en largeur. • en profondeur : 0 1 3 4 6 7 8 9 2 5 ; • en largeur : 0 1 2 3 4 5 6 7 8 9 ; 18.
(19) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Parcours d’arbres en profondeur et en largeur Exemple 1 (parcours d’un arbre binaire) 0 1 3. 0 2. 4. 1 5. 3. 6 7. 0 2. 4. 1 5. 3. 6 8. 7. 9. 4. 5. 6 8 9. arbre. 2. en profondeur. 7. 8 9. en largeur. • en profondeur : 0 1 3 4 6 7 8 9 2 5 ; • en largeur : 0 1 2 3 4 5 6 7 8 9 ; 19.
(20) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Parcours d’arbres en profondeur et en largeur Exemple 1 (parcours d’un arbre binaire) 0 1 3. 0 2. 4. 1 5. 3. 6 7. 0 2. 4. 1 5. 3. 6 8. 7. 9. 4. 5. 6 8 9. arbre. 2. en profondeur. 7. 8 9. en largeur. • en profondeur : 0 1 3 4 6 7 8 9 2 5 ; • en largeur : 0 1 2 3 4 5 6 7 8 9 ; 20.
(21) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Parcours d’arbres en profondeur et en largeur Exemple 1 (parcours d’un arbre binaire) 0 1 3. 0 2. 4. 1 5. 3. 6 7. 0 2. 4. 1 5. 3. 6 8. 7. 9. 4. 5. 6 8 9. arbre. 2. en profondeur. 7. 8 9. en largeur. • en profondeur : 0 1 3 4 6 7 8 9 2 5 ; • en largeur : 0 1 2 3 4 5 6 7 8 9 ; 21.
(22) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Parcours d’arbres en profondeur et en largeur Exemple 1 (parcours d’un arbre binaire) 0 1 3. 0 2. 4. 1 5. 3. 6 7. 0 2. 4. 1 5. 3. 6 8. 7. 9. 4. 5. 6 8 9. arbre. 2. en profondeur. 7. 8 9. en largeur. • en profondeur : 0 1 3 4 6 7 8 9 2 5 ; • en largeur : 0 1 2 3 4 5 6 7 8 9 ; 22.
(23) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Parcours d’arbres en profondeur et en largeur Exemple 1 (parcours d’un arbre binaire) 0 1 3. 0 2. 4. 1 5. 3. 6 7. 0 2. 4. 1 5. 3. 6 8. 7. 9. 4. 5. 6 8 9. arbre. 2. en profondeur. 7. 8 9. en largeur. • en profondeur : 0 1 3 4 6 7 8 9 2 5 ; • en largeur : 0 1 2 3 4 5 6 7 8 9 ; 23.
(24) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Parcours d’arbres en profondeur et en largeur Exemple 1 (parcours d’un arbre binaire) 0 1 3. 0 2. 4. 1 5. 3. 6 7. 0 2. 4. 1 5. 3. 6 8. 7. 9. 4. 5. 6 8 9. arbre. 2. en profondeur. 7. 8 9. en largeur. • en profondeur : 0 1 3 4 6 7 8 9 2 5 ; • en largeur : 0 1 2 3 4 5 6 7 8 9 ; 24.
(25) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Parcours d’arbres en profondeur et en largeur Exemple 1 (parcours d’un arbre binaire) 0 1 3. 0 2. 4. 1 5. 3. 6 7. 0 2. 4. 1 5. 3. 6 8. 7. 9. 4. 5. 6 8 9. arbre. 2. en profondeur. 7. 8 9. en largeur. • en profondeur : 0 1 3 4 6 7 8 9 2 5 ; • en largeur : 0 1 2 3 4 5 6 7 8 9 ; 25.
(26) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Parcours d’arbres en profondeur et en largeur Exemple 1 (parcours d’un arbre binaire) 0 1 3. 0 2. 4. 1 5. 3. 6 7. 0 2. 4. 1 5. 3. 6 8. 7. 9. 4. 5. 6 8 9. arbre. 2. en profondeur. 7. 8 9. en largeur. • en profondeur : 0 1 3 4 6 7 8 9 2 5 ; • en largeur : 0 1 2 3 4 5 6 7 8 9 ; 26.
(27) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Parcours d’arbres en profondeur et en largeur Exemple 1 (parcours d’un arbre binaire) 0 1 3. 0 2. 4. 1 5. 3. 6 7. 0 2. 4. 1 5. 3. 6 8. 7. 9. 4. 5. 6 8 9. arbre. 2. en profondeur. 7. 8 9. en largeur. • en profondeur : 0 1 3 4 6 7 8 9 2 5 ; • en largeur : 0 1 2 3 4 5 6 7 8 9 ; 27.
(28) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Parcours d’arbres en profondeur et en largeur Exemple 1 (parcours d’un arbre binaire) 0 1 3. 0 2. 4. 1 5. 3. 6 7. 0 2. 4. 1 5. 3. 6 8. 7. 9. 4. 5. 6 8 9. arbre. 2. en profondeur. 7. 8 9. en largeur. • en profondeur : 0 1 3 4 6 7 8 9 2 5 ; • en largeur : 0 1 2 3 4 5 6 7 8 9 ; 28.
(29) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Parcours d’arbres en profondeur et en largeur Exemple 1 (parcours d’un arbre binaire) 0 1 3. 0 2. 4. 1 5. 3. 6 7. 0 2. 4. 1 5. 3. 6 8. 7. 9. 4. 5. 6 8 9. arbre. 2. en profondeur. 7. 8 9. en largeur. • en profondeur : 0 1 3 4 6 7 8 9 2 5 ; • en largeur : 0 1 2 3 4 5 6 7 8 9 ; 29.
(30) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Parcours d’arbres en profondeur et en largeur Exemple 1 (parcours d’un arbre binaire) 0 1 3. 0 2. 4. 1 5. 3. 6 7. 0 2. 4. 1 5. 3. 6 8. 7. 9. 4. 5. 6 8 9. arbre. 2. en profondeur. 7. 8 9. en largeur. • en profondeur : 0 1 3 4 6 7 8 9 2 5 ; • en largeur : 0 1 2 3 4 5 6 7 8 9 ; 30.
(31) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Parcours d’arbres en profondeur et en largeur Exemple 1 (parcours d’un arbre binaire) 0 1 3. 0 2. 4. 1 5. 3. 6 7. 0 2. 4. 1 5. 3. 6 8. 7. 9. 4. 5. 6 8 9. arbre. 2. en profondeur. 7. 8 9. en largeur. • en profondeur : 0 1 3 4 6 7 8 9 2 5 ; • en largeur : 0 1 2 3 4 5 6 7 8 9 ; 31.
(32) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Parcours d’arbres en profondeur et en largeur Exemple 1 (parcours d’un arbre binaire) 0 1 3. 0 2. 4. 1 5. 3. 6 7. 0 2. 4. 1 5. 3. 6 8. 7. 9. 4. 5. 6 8 9. arbre. 2. en profondeur. 7. 8 9. en largeur. • en profondeur : 0 1 3 4 6 7 8 9 2 5 ; • en largeur : 0 1 2 3 4 5 6 7 8 9 ; 32.
(33) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Parcours d’arbres en profondeur et en largeur Exemple 1 (parcours d’un arbre binaire) 0 1 3. 0 2. 4. 1 5. 3. 6 7. 0 2. 4. 1 5. 3. 6 8. 7. 9. 4. 5. 6 8 9. arbre. 2. en profondeur. 7. 8 9. en largeur. • en profondeur : 0 1 3 4 6 7 8 9 2 5 ; • en largeur : 0 1 2 3 4 5 6 7 8 9 ; 33.
(34) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Parcours d’arbres en profondeur et en largeur Exemple 1 (parcours d’un arbre binaire) 0 1 3. 0 2. 4. 1 5. 3. 6 7. 0 2. 4. 1 5. 3. 6 8. 7. 9. 4. 5. 6 8 9. arbre. 2. en profondeur. 7. 8 9. en largeur. • en profondeur : 0 1 3 4 6 7 8 9 2 5 ; • en largeur : 0 1 2 3 4 5 6 7 8 9 ; 34.
(35) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Piles et files On aura besoin dans la suite de deux structures de données bien connues :. 35.
(36) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Piles et files On aura besoin dans la suite de deux structures de données bien connues :. Pile Last In First Out • empiler(x) : rajoute x en haut de la pile ; • dépiler() : retire et renvoie le haut de la pile ;. 36.
(37) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Piles et files On aura besoin dans la suite de deux structures de données bien connues :. Pile. File. Last In First Out. First In First Out. • empiler(x) : rajoute x en haut de la pile ;. • enfiler(x) : rajoute x à la fin de la file ;. • dépiler() : retire et renvoie le haut de la pile ;. • défiler() : retire et renvoie le début de la file ;. 37.
(38) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Piles et files On aura besoin dans la suite de deux structures de données bien connues :. Pile. File. Last In First Out. First In First Out. • empiler(x) : rajoute x en haut de la pile ;. • enfiler(x) : rajoute x à la fin de la file ;. • dépiler() : retire et renvoie le haut de la pile ;. • défiler() : retire et renvoie le début de la file ;. • Les deux classes possèdent aussi les méthodes est vide() et pas vide() ;. 38.
(39) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Piles et files On aura besoin dans la suite de deux structures de données bien connues :. Pile. File. Last In First Out. First In First Out. • empiler(x) : rajoute x en haut de la pile ;. • enfiler(x) : rajoute x à la fin de la file ;. • dépiler() : retire et renvoie le haut de la pile ;. • défiler() : retire et renvoie le début de la file ;. • Les deux classes possèdent aussi les méthodes est vide() et pas vide() ; • Toutes ces méthodes s’exécutent en O(1) ;. 39.
(40) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Piles et files On aura besoin dans la suite de deux structures de données bien connues :. Pile. File. Last In First Out. First In First Out. • empiler(x) : rajoute x en haut de la pile ;. • enfiler(x) : rajoute x à la fin de la file ;. • dépiler() : retire et renvoie le haut de la pile ;. • défiler() : retire et renvoie le début de la file ;. • Les deux classes possèdent aussi les méthodes est vide() et pas vide() ; • Toutes ces méthodes s’exécutent en O(1) ; • Pour être plus concis, on suppose que empiler() et enfiler() acceptent aussi plusieurs éléments ;. 40.
(41) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Parcours d’arbres en profondeur. Le parcours d’arbre en profondeur s’écrit facilement de manière récursive : Algorithme 1 : ProfondeurArbre(A) Entrées : un arbre binaire enraciné A. Résultat : l’affichage des sommets de A suivant un parcours en profondeur à partir de la racine. 1 2 3 4. si A.racine() 6= nil alors afficher(A.racine()); ProfondeurArbre(A.sous arbre gauche()); ProfondeurArbre(A.sous arbre droit());. 41.
(42) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Parcours d’arbre en largeur Algorithme 2 : ParcoursLargeurArbre(A) Entrées : un arbre enraciné A. Sortie : la liste des sommets de l’arbre ordonné selon un parcours en largeur à partir de la racine. 1 2 3 4 5 6 7 8 9. a traiter ← file(); résultat ← liste(); a traiter.enfiler(A.racine()); tant que a traiter.pas vide() faire sommet ← a traiter.défiler(); résultat.ajouter en fin(sommet); pour chaque descendant dans A.successeurs(sommet) faire a traiter.enfiler(descendant); renvoyer résultat;. 42.
(43) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Parcours de graphes Parcourir un graphe présente plusieurs difficultés par rapport aux arbres (binaires ou non) : 1. tout sommet peut servir de point de départ ;. 43.
(44) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Parcours de graphes Parcourir un graphe présente plusieurs difficultés par rapport aux arbres (binaires ou non) : 1. tout sommet peut servir de point de départ ;. 2. il n’y a pas (encore) d’orientation ou d’ordre sur les voisins ;. 44.
(45) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Parcours de graphes Parcourir un graphe présente plusieurs difficultés par rapport aux arbres (binaires ou non) : 1. tout sommet peut servir de point de départ ;. 2. il n’y a pas (encore) d’orientation ou d’ordre sur les voisins ;. 3. certains sommets sont accessibles par plusieurs chemins, il faudra donc se rappeler de ce qu’on a déjà examiné ;. 45.
(46) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Parcours de graphes Parcourir un graphe présente plusieurs difficultés par rapport aux arbres (binaires ou non) : 1. tout sommet peut servir de point de départ ;. 2. il n’y a pas (encore) d’orientation ou d’ordre sur les voisins ;. 3. certains sommets sont accessibles par plusieurs chemins, il faudra donc se rappeler de ce qu’on a déjà examiné ;. Conventions : on suppose que : • la méthode G .voisins(v ) renvoie les voisins de v par ordre croissant d’identifiant ; • en cas d’ambigüité, on sélectionne les sommets d’indice minimal ; 46.
(47) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Parcours de graphe en profondeur. • Le principe du parcours en profondeur se généralise comme suit aux graphes :.
(48) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Parcours de graphe en profondeur. • Le principe du parcours en profondeur se généralise comme suit aux graphes : 1. si le sommet actuel u n’a pas encore été visité, l’afficher ;.
(49) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Parcours de graphe en profondeur. • Le principe du parcours en profondeur se généralise comme suit aux graphes : 1. si le sommet actuel u n’a pas encore été visité, l’afficher ;. 2. pour chaque voisin v non encore visité de u : parcourir v et ses descendants en profondeur..
(50) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Parcours de graphe en profondeur. • Le principe du parcours en profondeur se généralise comme suit aux graphes : 1. si le sommet actuel u n’a pas encore été visité, l’afficher ;. 2. pour chaque voisin v non encore visité de u : parcourir v et ses descendants en profondeur.. • Examinons les étapes de ce parcours sur un exemple..
(51) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Parcours en profondeur : exemple. Exemple 2 (départ = 0) 4. 7. 2. 1. 5 6. 0 3 8. 51.
(52) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Parcours en profondeur : exemple. Exemple 2 (départ = 0) 4. 7. 2. 1. 5 6. 0 3 8. 52.
(53) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Parcours en profondeur : exemple. Exemple 2 (départ = 0) 4. 7. 2. 1. 5 6. 0 3 8. 53.
(54) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Parcours en profondeur : exemple. Exemple 2 (départ = 0) 4. 7. 2. 1. 5 6. 0 3 8. 54.
(55) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Parcours en profondeur : exemple. Exemple 2 (départ = 0) 4. 7. 2. 1. 5 6. 0 3 8. 55.
(56) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Parcours en profondeur : exemple. Exemple 2 (départ = 0) 4. 7. 2. 1. 5 6. 0 3 8. 56.
(57) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Parcours en profondeur : exemple. Exemple 2 (départ = 0) 4. 7. 2. 1. 5 6. 0 3 8. 57.
(58) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Parcours en profondeur : exemple. Exemple 2 (départ = 0) 4. 7. 2. 1. 5 6. 0 3 8. 58.
(59) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Parcours en profondeur : exemple. Exemple 2 (départ = 0) 4. 7. 2. 1. 5 6. 0 3 8. 59.
(60) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Parcours en profondeur : exemple. Exemple 2 (départ = 0) 4. 7. 2. 1. 5 6. 0 3 8. 60.
(61) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Parcours en profondeur : exemple. Exemple 2 (départ = 0) 4. 7. 2. 1. 5 6. 0 3 8. 61.
(62) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Parcours en profondeur : exemple. Exemple 2 (départ = 0) 4. 7. 2. 1. 5 6. 0 3 8. 62.
(63) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Parcours en profondeur : exemple. Exemple 2 (départ = 0) 4. 7. 2. 1. 5 6. 0 3 8. 63.
(64) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Parcours en profondeur : exemple. Exemple 2 (départ = 0) 4. 7. 2. 1. 5 6. 0 3 8. 64.
(65) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Parcours en profondeur : exemple. Exemple 2 (départ = 0) 4. 7. 2. 1. 5 6. 0 3 8. 65.
(66) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Parcours en profondeur : exemple. Exemple 2 (départ = 0) 4. 7. 2. 1. 5 6. 0 3 8. 66.
(67) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Parcours en profondeur : exemple. Exemple 2 (départ = 0) 4. 7. 2. 1. 5 6. 0 3 8. 67.
(68) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Parcours en profondeur : exemple. Exemple 2 (départ = 0) 4. 7. 2. 1. 5 6. 0 3 8. 68.
(69) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Parcours en profondeur : exemple. Exemple 2 (départ = 0). 2. 0 1 2 3 4 5 6 7 8. 4. 7. Les coulisses visités :. 1. 5 6. 0 0. 3 à traiter (pile). 8. résultat :. 69.
(70) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Parcours en profondeur : exemple. Exemple 2 (départ = 0). 2. 0 1 2 3 4 5 6 7 8 visités : X. 4. 7. Les coulisses. 1. 5 6. 0 3 à traiter (pile). 8. résultat :. 0. 70.
(71) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Parcours en profondeur : exemple. Exemple 2 (départ = 0). 2. 0 1 2 3 4 5 6 7 8 visités : X. 4. 7. Les coulisses. 1. 5 6. 1 3 6. 0 3. à traiter (pile). 8. résultat :. 0. 71.
(72) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Parcours en profondeur : exemple. Exemple 2 (départ = 0). 2. 0 1 2 3 4 5 6 7 8 visités : X X. 4. 7. Les coulisses. 1. 5 6. 3 6. 0 3. à traiter (pile). 8. résultat :. 0 1. 72.
(73) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Parcours en profondeur : exemple. Exemple 2 (départ = 0). 2. 0 1 2 3 4 5 6 7 8 visités : X X. 4. 7. Les coulisses. 1. 5 6. 4 6 3 6. 0 3. à traiter (pile). 8. résultat :. 0 1. 73.
(74) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Parcours en profondeur : exemple. Exemple 2 (départ = 0). 2. 0 1 2 3 4 5 6 7 8 X visités : X X. 4. 7. Les coulisses. 1. 5 6. 6 3 6. 0 3. à traiter (pile). 8. résultat :. 0 1 4. 74.
(75) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Parcours en profondeur : exemple. Exemple 2 (départ = 0). 2. 0 1 2 3 4 5 6 7 8 X visités : X X. 4. 7. Les coulisses. 1. 5 6. 7 6 3 6. 0 3. à traiter (pile). 8. résultat :. 0 1 4. 75.
(76) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Parcours en profondeur : exemple. Exemple 2 (départ = 0). 2. 0 1 2 3 4 5 6 7 8 X X visités : X X. 4. 7. Les coulisses. 1. 5 6. 6 3 6. 0 3. à traiter (pile). 8. résultat :. 0 1 4 7. 76.
(77) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Parcours en profondeur : exemple. Exemple 2 (départ = 0). 2. 0 1 2 3 4 5 6 7 8 X X visités : X X. 4. 7. Les coulisses. 1. 5 6. 5 6 3 6. 0 3. à traiter (pile). 8. résultat :. 0 1 4 7. 77.
(78) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Parcours en profondeur : exemple. Exemple 2 (départ = 0). 2. 0 1 2 3 4 5 6 7 8 XX X visités : X X. 4. 7. Les coulisses. 1. 5 6. 6 3 6. 0 3. à traiter (pile). 8. résultat :. 0 1 4 7 5. 78.
(79) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Parcours en profondeur : exemple. Exemple 2 (départ = 0). 2. 0 1 2 3 4 5 6 7 8 XX X visités : X X. 4. 7. Les coulisses. 2 6 6 3 6. 1. 5 6. 0 3. à traiter (pile). 8. résultat :. 0 1 4 7 5. 79.
(80) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Parcours en profondeur : exemple. Exemple 2 (départ = 0). 2. 0 1 2 3 4 5 6 7 8 visités : X X X X X X. 4. 7. Les coulisses. 1. 5 6. 6 6 3 6. 0 3. à traiter (pile). 8. résultat :. 0 1 4 7 5 2. 80.
(81) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Parcours en profondeur : exemple. Exemple 2 (départ = 0). 2. 0 1 2 3 4 5 6 7 8 visités : X X X X X X X. 4. 7. Les coulisses. 1. 5 6. 6 3 6. 0 3. à traiter (pile). 8. résultat :. 0 1 4 7 5 2 6. 81.
(82) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Parcours en profondeur : exemple. Exemple 2 (départ = 0). 2. 0 1 2 3 4 5 6 7 8 visités : X X X X X X X. 4. 7. Les coulisses. 1. 5 6. 3 6 3 6. 0 3. à traiter (pile). 8. résultat :. 0 1 4 7 5 2 6. 82.
(83) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Parcours en profondeur : exemple. Exemple 2 (départ = 0). 2. 0 1 2 3 4 5 6 7 8 visités : X X X X X X X X. 4. 7. Les coulisses. 1. 5 6. 6 3 6. 0 3. à traiter (pile). 8. résultat :. 0 1 4 7 5 2 6 3. 83.
(84) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Parcours en profondeur : exemple. Exemple 2 (départ = 0). 2. 0 1 2 3 4 5 6 7 8 visités : X X X X X X X X. 4. 7. Les coulisses. 1. 5 6. 8 6 3 6. 0 3. à traiter (pile). 8. résultat :. 0 1 4 7 5 2 6 3. 84.
(85) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Parcours en profondeur : exemple. Exemple 2 (départ = 0). 2. 0 1 2 3 4 5 6 7 8 visités : X X X X X X X X X. 4. 7. Les coulisses. 1. 5 6. 6 3 6. 0 3. à traiter (pile). 8. résultat :. 0 1 4 7 5 2 6 3 8. 85.
(86) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Parcours en profondeur : exemple. Exemple 2 (départ = 0). 2. 0 1 2 3 4 5 6 7 8 visités : X X X X X X X X X. 4. 7. Les coulisses. 1. 5 6. 3 6. 0 3. à traiter (pile). 8. résultat :. 0 1 4 7 5 2 6 3 8. 86.
(87) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Parcours en profondeur : exemple. Exemple 2 (départ = 0). 2. 0 1 2 3 4 5 6 7 8 visités : X X X X X X X X X. 4. 7. Les coulisses. 1. 5 6. 0 6. 3 à traiter (pile). 8. résultat :. 0 1 4 7 5 2 6 3 8. 87.
(88) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Parcours en profondeur : exemple. Exemple 2 (départ = 0). 2. 0 1 2 3 4 5 6 7 8 visités : X X X X X X X X X. 4. 7. Les coulisses. 1. 5 6. 0 3 à traiter (pile). 8. résultat :. 0 1 4 7 5 2 6 3 8. 88.
(89) Parcours d’arbres. Parcours en profondeur. Algorithme 3 :. Parcours en largeur. Arbres de parcours. Applications. Profondeur(G , départ, visités=nil). Entrées : un graphe non-orienté G , un sommet de départ, un tableau (facultatif) visités de taille |V |. Sortie : les sommets de G accessibles depuis le départ dans l’ordre où le parcours en profondeur les a découverts. 1 2 3 4 5 6 7 8 9 10 11 12. résultat ← liste(); si visités = nil alors visités ← tableau(G .nombre sommets(), faux); a traiter ← pile(); a traiter.empiler(départ); tant que a traiter.pas vide() faire sommet ← a traiter.dépiler(); si ¬ visités[sommet] alors résultat.ajouter en fin(sommet); visités[sommet] ← vrai; pour chaque voisin dans renverser(G .voisins(sommet)) faire si ¬ visités[voisin] alors a traiter.empiler(voisin) ; renvoyer résultat;. 89.
(90) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Parcours de graphe en largeur • Le principe du parcours en largeur se généralise comme suit aux graphes :. 90.
(91) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Parcours de graphe en largeur • Le principe du parcours en largeur se généralise comme suit aux graphes : 1. si le sommet actuel u n’a pas encore été visité, l’afficher ;. 91.
(92) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Parcours de graphe en largeur • Le principe du parcours en largeur se généralise comme suit aux graphes : 1. si le sommet actuel u n’a pas encore été visité, l’afficher ;. 2. pour chaque voisin v non encore visité de u : placer v dans la file d’attente ;. 92.
(93) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Parcours de graphe en largeur • Le principe du parcours en largeur se généralise comme suit aux graphes : 1. si le sommet actuel u n’a pas encore été visité, l’afficher ;. 2. pour chaque voisin v non encore visité de u : placer v dans la file d’attente ;. 3. appliquer le même traitement aux éléments de la file jusqu’à ce qu’elle soit vide.. 93.
(94) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Parcours de graphe en largeur • Le principe du parcours en largeur se généralise comme suit aux graphes : 1. si le sommet actuel u n’a pas encore été visité, l’afficher ;. 2. pour chaque voisin v non encore visité de u : placer v dans la file d’attente ;. 3. appliquer le même traitement aux éléments de la file jusqu’à ce qu’elle soit vide.. • Ce parcours partitionne les sommets de G en fonction de leur distance au sommet de départ ;. 94.
(95) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Parcours de graphe en largeur • Le principe du parcours en largeur se généralise comme suit aux graphes : 1. si le sommet actuel u n’a pas encore été visité, l’afficher ;. 2. pour chaque voisin v non encore visité de u : placer v dans la file d’attente ;. 3. appliquer le même traitement aux éléments de la file jusqu’à ce qu’elle soit vide.. • Ce parcours partitionne les sommets de G en fonction de leur distance au sommet de départ ; • Examinons les étapes de ce parcours sur un exemple.. 95.
(96) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Parcours en largeur : exemple. Exemple 3 (départ = 0) 4. 7. 2. 1. 5 6. 0 3 8. 96.
(97) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Parcours en largeur : exemple. Exemple 3 (départ = 0) 4. 7. 2. 1. 5 6. 0 3 8. 97.
(98) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Parcours en largeur : exemple. Exemple 3 (départ = 0) 4. 7. 2. 1. 5 6. 0 3 8. 98.
(99) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Parcours en largeur : exemple. Exemple 3 (départ = 0) 4. 7. 2. 1. 5 6. 0 3 8. 99.
(100) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Parcours en largeur : exemple. Exemple 3 (départ = 0) 4. 7. 2. 1. 5 6. 0 3 8. 100.
(101) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Parcours en largeur : exemple. Exemple 3 (départ = 0) 4. 7. 2. 1. 5 6. 0 3 8. 101.
(102) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Parcours en largeur : exemple. Exemple 3 (départ = 0) 4. 7. 2. 1. 5 6. 0 3 8. 102.
(103) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Parcours en largeur : exemple. Exemple 3 (départ = 0) 4. 7. 2. 1. 5 6. 0 3 8. 103.
(104) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Parcours en largeur : exemple. Exemple 3 (départ = 0) 4. 7. 2. 1. 5 6. 0 3 8. 104.
(105) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Parcours en largeur : exemple. Exemple 3 (départ = 0) 4. 7. 2. 1. 5 6. 0 3 8. 105.
(106) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Parcours en largeur : exemple. Exemple 3 (départ = 0). 0 1 2 3 4 5 6 7 8. 4. 7. Les coulisses visités : à traiter (file) :. 2. 1. 5 6. 0. résultat :. 0. (file : fin à gauche, début à droite). 3 8. 106.
(107) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Parcours en largeur : exemple. Exemple 3 (départ = 0). 0 1 2 3 4 5 6 7 8 visités : X. 4. 7. Les coulisses. à traiter (file) :. 2. 1. 5 6. résultat :. 0. 6 3 1. 0. (file : fin à gauche, début à droite). 3 8. 107.
(108) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Parcours en largeur : exemple. Exemple 3 (départ = 0). 0 1 2 3 4 5 6 7 8 visités : X X. 4. 7. Les coulisses. à traiter (file) :. 2. 1. 5 6. résultat :. 0. 6 4 6 3. 0 1. (file : fin à gauche, début à droite). 3 8. 108.
(109) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Parcours en largeur : exemple. Exemple 3 (départ = 0). 0 1 2 3 4 5 6 7 8 visités : X X X. 4. 7. Les coulisses. à traiter (file) :. 2. 1. 5 6. résultat :. 0. 8 6 6 4 6. 0 1 3. (file : fin à gauche, début à droite). 3 8. 109.
(110) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Parcours en largeur : exemple. Exemple 3 (départ = 0). 0 1 2 3 4 5 6 7 8 X visités : X X X. 4. 7. Les coulisses. à traiter (file) :. 2. 1. 5 6. résultat :. 0. 5 8 6 6 4. 0 1 3 6. (file : fin à gauche, début à droite). 3 8. 110.
(111) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Parcours en largeur : exemple. Exemple 3 (départ = 0). 0 1 2 3 4 5 6 7 8 visités : X X X X X. 4. 7. Les coulisses. à traiter (file) :. 2. 1. 5 6. résultat :. 0. 7 5 8 6 6. 0 1 3 6 4. (file : fin à gauche, début à droite). 3 8. 111.
(112) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Parcours en largeur : exemple. Exemple 3 (départ = 0). 0 1 2 3 4 5 6 7 8 visités : X X X X X X. 4. 7. Les coulisses. à traiter (file) :. 2. 1. 5 6. résultat :. 0. 7 5. 0 1 3 6 4 8. (file : fin à gauche, début à droite). 3 8. 112.
(113) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Parcours en largeur : exemple. Exemple 3 (départ = 0). 0 1 2 3 4 5 6 7 8 visités : X X X X X X X. 4. 7. Les coulisses. à traiter (file) :. 2. 1. 5 6. résultat :. 0. 7 2 7. 0 1 3 6 4 8 5. (file : fin à gauche, début à droite). 3 8. 113.
(114) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Parcours en largeur : exemple. Exemple 3 (départ = 0). 0 1 2 3 4 5 6 7 8 visités : X X X X X X X X. 4. 7. Les coulisses. à traiter (file) :. 2. 1. 5 6. résultat :. 0. 7 2. 0 1 3 6 4 8 5 7. (file : fin à gauche, début à droite). 3 8. 114.
(115) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Parcours en largeur : exemple. Exemple 3 (départ = 0). 0 1 2 3 4 5 6 7 8 visités : X X X X X X X X X. 4. 7. Les coulisses. à traiter (file) :. 2. 1. 5 6. résultat :. 0. 7. 0 1 3 6 4 8 5 7 2. (file : fin à gauche, début à droite). 3 8. 115.
(116) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Parcours en largeur : exemple. Exemple 3 (départ = 0). 0 1 2 3 4 5 6 7 8 visités : X X X X X X X X X. 4. 7. Les coulisses. à traiter (file) :. 2. 1. 5 6. résultat :. 0. 0 1 3 6 4 8 5 7 2. (file : fin à gauche, début à droite). 3 8. 116.
(117) Parcours d’arbres. Parcours en profondeur. Algorithme 4 :. Parcours en largeur. Arbres de parcours. Applications. Largeur(G , départ, visités=nil). Entrées : un graphe non-orienté G , un sommet de départ, un tableau (facultatif) visités de |V | cases indiquant les sommets déjà traités. Sortie : les sommets de G accessibles depuis le départ dans l’ordre où le parcours en largeur les a découverts. 1 2 3 4 5 6 7 8 9 10 11 12. résultat ← liste(); si visités = nil alors visités ← tableau(G .nombre sommets(), faux); a traiter ← file(); a traiter.enfiler(départ); tant que a traiter.pas vide() faire sommet ← a traiter.défiler(); si ¬ visités[sommet] alors résultat.ajouter en fin(sommet); visités[sommet] ← vrai; pour chaque voisin dans G .voisins(sommet) faire si ¬ visités[voisin] alors a traiter.enfiler(voisin) ; renvoyer résultat;. 117.
(118) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Comparaison des algorithmes Comparons les deux algorithmes de parcours :. Profondeur 1 2. 3 4 5 6 7 8 9 10. 11. 12. résultat ← liste(); si visités = nil alors visités ← tableau(G .nombre sommets(), faux); a traiter ← pile(); a traiter.empiler(départ); tant que a traiter.pas vide() faire sommet ← a traiter.dépiler(); si ¬ visités[sommet] alors résultat.ajouter en fin(sommet); visités[sommet] ← vrai; pour chaque voisin dans renverser(G .voisins(sommet)) faire si ¬ visités[voisin] alors a traiter.empiler(voisin) ; renvoyer résultat;. Largeur 1 2. 3 4 5 6 7 8 9 10. 11. 12. résultat ← liste(); si visités = nil alors visités ← tableau(G .nombre sommets(), faux); a traiter ← file(); a traiter.enfiler(départ); tant que a traiter.pas vide() faire sommet ← a traiter.défiler(); si ¬ visités[sommet] alors résultat.ajouter en fin(sommet); visités[sommet] ← vrai; pour chaque voisin dans G .voisins(sommet) faire si ¬ visités[voisin] alors a traiter.enfiler(voisin) ; renvoyer résultat;. Seul le type de la structure de données a traiter change !. 118.
(119) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Correction des algorithmes de parcours Nos algorithmes de parcours explorent-ils bien tout le graphe ?. 119.
(120) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Correction des algorithmes de parcours Nos algorithmes de parcours explorent-ils bien tout le graphe ? Oui, si le graphe est “en un seul morceau”.. 120.
(121) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Correction des algorithmes de parcours Nos algorithmes de parcours explorent-ils bien tout le graphe ? Oui, si le graphe est “en un seul morceau”. Plus formellement :. Définition 1 Un graphe G = (V , E ) est connexe si pour toute paire de sommets u, v ∈ V , il existe un chemin dans G dont les extrémités sont u et v .. 121.
(122) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Correction des algorithmes de parcours Nos algorithmes de parcours explorent-ils bien tout le graphe ? Oui, si le graphe est “en un seul morceau”. Plus formellement :. Définition 1 Un graphe G = (V , E ) est connexe si pour toute paire de sommets u, v ∈ V , il existe un chemin dans G dont les extrémités sont u et v .. Exemple 4 4. 7 2. 1. 5 6. 0 0. 3 8 graphe connexe. 2. 3. 1 graphe non connexe 122.
(123) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Complexité des algorithmes de parcours • Toutes les méthodes des structures de données auxiliaires sont en O(1) ;.
(124) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Complexité des algorithmes de parcours • Toutes les méthodes des structures de données auxiliaires sont en O(1) ; • La complexité des algorithmes de parcours dépend donc directement de l’implémentation du graphe ;.
(125) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Complexité des algorithmes de parcours • Toutes les méthodes des structures de données auxiliaires sont en O(1) ; • La complexité des algorithmes de parcours dépend donc directement de l’implémentation du graphe ; • Pour chaque sommet v , on doit accéder à tous ses voisins ;.
(126) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Complexité des algorithmes de parcours • Toutes les méthodes des structures de données auxiliaires sont en O(1) ; • La complexité des algorithmes de parcours dépend donc directement de l’implémentation du graphe ; • Pour chaque sommet v , on doit accéder à tous ses voisins ; • matrice d’adjacence : G .voisins(v ) est en O(|V |) ;.
(127) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Complexité des algorithmes de parcours • Toutes les méthodes des structures de données auxiliaires sont en O(1) ; • La complexité des algorithmes de parcours dépend donc directement de l’implémentation du graphe ; • Pour chaque sommet v , on doit accéder à tous ses voisins ; • matrice d’adjacence : G .voisins(v ) est en O(|V |) ; • listes d’adjacence : G .voisins(v ) est en O(deg(v )) ;.
(128) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Complexité des algorithmes de parcours • Toutes les méthodes des structures de données auxiliaires sont en O(1) ; • La complexité des algorithmes de parcours dépend donc directement de l’implémentation du graphe ; • Pour chaque sommet v , on doit accéder à tous ses voisins ; • matrice d’adjacence : G .voisins(v ) est en O(|V |) ; • listes d’adjacence : G .voisins(v ) est en O(deg(v )) ;. • Nos parcours ont donc une complexité de :.
(129) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Complexité des algorithmes de parcours • Toutes les méthodes des structures de données auxiliaires sont en O(1) ; • La complexité des algorithmes de parcours dépend donc directement de l’implémentation du graphe ; • Pour chaque sommet v , on doit accéder à tous ses voisins ; • matrice d’adjacence : G .voisins(v ) est en O(|V |) ; • listes d’adjacence : G .voisins(v ) est en O(deg(v )) ;. • Nos parcours ont donc une complexité de : • O(|V |2 ) pour une matrice d’adjacence ;.
(130) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Complexité des algorithmes de parcours • Toutes les méthodes des structures de données auxiliaires sont en O(1) ; • La complexité des algorithmes de parcours dépend donc directement de l’implémentation du graphe ; • Pour chaque sommet v , on doit accéder à tous ses voisins ; • matrice d’adjacence : G .voisins(v ) est en O(|V |) ; • listes d’adjacence : G .voisins(v ) est en O(deg(v )) ;. • Nos parcours ont donc une complexité de : • O(|V |2 ) pour une matrice d’adjacence ; • O(|V | + |E |) pour des listes d’adjacence (rappel : P v ∈V deg(v ) = 2|E |) ;.
(131) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Notion d’arbre de parcours On associe aux parcours en largeur et en profondeur des arbres de parcours, qui retracent l’ordre dans lequel les sommets ont été découverts.. Exemple 5 (arbres de parcours au départ de 0) 4. 7. 2. 1. 5. 4. 7. 2. 6. 0. 1. 5 6. 3. 3 8. profondeur. 0. 8 largeur.
(132) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Notion d’arbre de parcours On associe aux parcours en largeur et en profondeur des arbres de parcours, qui retracent l’ordre dans lequel les sommets ont été découverts.. Exemple 5 (arbres de parcours au départ de 0) 4. 7. 2. 1. 5. 4. 7. 2. 6. 0. 1. 5 6. 3. 3 8. profondeur. 0. 8 largeur.
(133) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Notion d’arbre de parcours On associe aux parcours en largeur et en profondeur des arbres de parcours, qui retracent l’ordre dans lequel les sommets ont été découverts.. Exemple 5 (arbres de parcours au départ de 0) 4. 7. 2. 1. 5. 4. 7. 2. 6. 0. 1. 5 6. 3. 3 8. profondeur. 0. 8 largeur.
(134) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Calcul des arbres de parcours • Pour calculer ces arbres, on doit stocker le parent de chaque sommet dans l’exploration.. 134.
(135) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Calcul des arbres de parcours • Pour calculer ces arbres, on doit stocker le parent de chaque sommet dans l’exploration. • On dira qu’un sommet est orphelin s’il n’a pas de parent, et adopté sinon ;. 135.
(136) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Calcul des arbres de parcours • Pour calculer ces arbres, on doit stocker le parent de chaque sommet dans l’exploration. • On dira qu’un sommet est orphelin s’il n’a pas de parent, et adopté sinon ; • Les deux parcours traitent les sommets différemment :.
(137) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Calcul des arbres de parcours • Pour calculer ces arbres, on doit stocker le parent de chaque sommet dans l’exploration. • On dira qu’un sommet est orphelin s’il n’a pas de parent, et adopté sinon ; • Les deux parcours traitent les sommets différemment : • profondeur : le voisin u de v est adopté par v si u n’est pas visité ;.
(138) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Calcul des arbres de parcours • Pour calculer ces arbres, on doit stocker le parent de chaque sommet dans l’exploration. • On dira qu’un sommet est orphelin s’il n’a pas de parent, et adopté sinon ; • Les deux parcours traitent les sommets différemment : • profondeur : le voisin u de v est adopté par v si u n’est pas visité ; • largeur : le voisin u de v est adopté par v s’il est orphelin ;. 138.
(139) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Calcul des arbres de parcours • Pour calculer ces arbres, on doit stocker le parent de chaque sommet dans l’exploration. • On dira qu’un sommet est orphelin s’il n’a pas de parent, et adopté sinon ; • Les deux parcours traitent les sommets différemment : • profondeur : le voisin u de v est adopté par v si u n’est pas visité ; • largeur : le voisin u de v est adopté par v s’il est orphelin ;. • Dans les deux cas, à la fin du parcours, le seul sommet orphelin est celui dont on est parti ;. 139.
(140) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Calcul des arbres de parcours Pour calculer ces arbres, on doit stocker le parent de chaque sommet dans l’exploration.. Exemple 6 (profondeur) 4. 7. 2. Exemple 7 (largeur). 1. 5. 2. 6. 1. 5. 0 3. 6. 0 3. 8. 8. 0 1 2 3 4 5 6 7 8 parents :. 4. 7. 0 1 2 3 4 5 6 7 8 parents :. 140.
(141) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Calcul des arbres de parcours Pour calculer ces arbres, on doit stocker le parent de chaque sommet dans l’exploration.. Exemple 6 (profondeur) 4. 7. 2. Exemple 7 (largeur). 1. 5. 2. 6. 1. 5. 0 3. 6. 0 3. 8 parents :. 4. 7. 0 1 2 3 4 5 6 7 8 0 0 0. 8 0 1 2 3 4 5 6 7 8 parents :. 141.
(142) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Calcul des arbres de parcours Pour calculer ces arbres, on doit stocker le parent de chaque sommet dans l’exploration.. Exemple 6 (profondeur) 4. 7. 2. Exemple 7 (largeur). 1. 5. 2. 6. 1. 5. 0 3. 6. 0 3. 8 parents :. 4. 7. 0 1 2 3 4 5 6 7 8 0 0 1 1 0. 8 0 1 2 3 4 5 6 7 8 parents :. 142.
(143) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Calcul des arbres de parcours Pour calculer ces arbres, on doit stocker le parent de chaque sommet dans l’exploration.. Exemple 6 (profondeur) 4. 7. 2. Exemple 7 (largeur). 1. 5. 2. 6. 1. 5. 0 3. 6. 0 3. 8 parents :. 4. 7. 0 1 2 3 4 5 6 7 8 0 0 1 1 4 0. 8 0 1 2 3 4 5 6 7 8 parents :. 143.
(144) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Calcul des arbres de parcours Pour calculer ces arbres, on doit stocker le parent de chaque sommet dans l’exploration.. Exemple 6 (profondeur) 4. 7. 2. Exemple 7 (largeur). 1. 5. 2. 6. 1. 5. 0 3. 6. 0 3. 8 parents :. 4. 7. 0 1 2 3 4 5 6 7 8 0 0 1 7 1 0 4. 8 0 1 2 3 4 5 6 7 8 parents :. 144.
(145) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Calcul des arbres de parcours Pour calculer ces arbres, on doit stocker le parent de chaque sommet dans l’exploration.. Exemple 6 (profondeur) 4. 7. 2. Exemple 7 (largeur). 1. 5. 2. 6. 1. 5. 0 3. 6. 0 3. 8 parents :. 4. 7. 0 1 2 3 4 5 6 7 8 0 5 0 1 7 5 0 4 1. 8 0 1 2 3 4 5 6 7 8 parents :. 145.
(146) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Calcul des arbres de parcours Pour calculer ces arbres, on doit stocker le parent de chaque sommet dans l’exploration.. Exemple 6 (profondeur) 4. 7. 2. Exemple 7 (largeur). 1. 5. 2. 6. 1. 5. 0 3. 6. 0 3. 8 parents :. 4. 7. 0 1 2 3 4 5 6 7 8 0 5 0 1 7 5 0 4 1. 8 0 1 2 3 4 5 6 7 8 parents :. 146.
(147) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Calcul des arbres de parcours Pour calculer ces arbres, on doit stocker le parent de chaque sommet dans l’exploration.. Exemple 6 (profondeur) 4. 7. 2. Exemple 7 (largeur). 1. 5. 2. 6. 1. 5. 0 3. 6. 0 3. 8 parents :. 4. 7. 0 1 2 3 4 5 6 7 8 0 5 0 6 1 7 5 0 4 1. 8 0 1 2 3 4 5 6 7 8 parents :. 147.
(148) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Calcul des arbres de parcours Pour calculer ces arbres, on doit stocker le parent de chaque sommet dans l’exploration.. Exemple 6 (profondeur) 4. 7. 2. Exemple 7 (largeur). 1. 5. 2. 6. 1. 5. 0 3. 6. 0 3. 8 parents :. 4. 7. 0 1 2 3 4 5 6 7 8 0 5 0 6 1 7 5 0 4 3 1. 8 0 1 2 3 4 5 6 7 8 parents :. 148.
(149) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Calcul des arbres de parcours Pour calculer ces arbres, on doit stocker le parent de chaque sommet dans l’exploration.. Exemple 6 (profondeur) 4. 7. 2. Exemple 7 (largeur). 1. 5. 2. 6. 1. 5. 0 3. 6. 0 3. 8 parents :. 4. 7. 0 1 2 3 4 5 6 7 8 0 5 0 6 1 7 5 0 4 3 1. 8 0 1 2 3 4 5 6 7 8 parents :. 149.
(150) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Calcul des arbres de parcours Pour calculer ces arbres, on doit stocker le parent de chaque sommet dans l’exploration.. Exemple 6 (profondeur) 4. 7. 2. Exemple 7 (largeur). 1. 5. 2. 6. 1. 5. 0 3. 6. 0 3. 8 parents :. 4. 7. 0 1 2 3 4 5 6 7 8 0 5 0 6 1 7 5 0 4 3 1. 8 0 1 2 3 4 5 6 7 8 parents :. 150.
(151) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Calcul des arbres de parcours Pour calculer ces arbres, on doit stocker le parent de chaque sommet dans l’exploration.. Exemple 6 (profondeur) 4. 7. 2. Exemple 7 (largeur). 1. 5. 2. 6. 1. 5. 0 3. 6. 0 3. 8 parents :. 4. 7. 0 1 2 3 4 5 6 7 8 0 5 0 6 1 7 5 0 4 3 1. 8 0 1 2 3 4 5 6 7 8 parents :. 151.
(152) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Calcul des arbres de parcours Pour calculer ces arbres, on doit stocker le parent de chaque sommet dans l’exploration.. Exemple 6 (profondeur) 4. 7. 2. Exemple 7 (largeur). 1. 5. 2. 6. 1. 5. 0 3. 6. 0 3. 8 parents :. 4. 7. 0 1 2 3 4 5 6 7 8 0 5 0 6 1 7 5 0 4 3 1. 8 parents :. 0 1 2 3 4 5 6 7 8 0 0 0. 152.
(153) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Calcul des arbres de parcours Pour calculer ces arbres, on doit stocker le parent de chaque sommet dans l’exploration.. Exemple 6 (profondeur) 4. 7. 2. Exemple 7 (largeur). 1. 5. 2. 6. 1. 5. 0 3. 6. 0 3. 8 parents :. 4. 7. 0 1 2 3 4 5 6 7 8 0 5 0 6 1 7 5 0 4 3 1. 8 parents :. 0 1 2 3 4 5 6 7 8 0 0 1 0. 153.
(154) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Calcul des arbres de parcours Pour calculer ces arbres, on doit stocker le parent de chaque sommet dans l’exploration.. Exemple 6 (profondeur) 4. 7. 2. Exemple 7 (largeur). 1. 5. 2. 6. 1. 5. 0 3. 6. 0 3. 8 parents :. 4. 7. 0 1 2 3 4 5 6 7 8 0 5 0 6 1 7 5 0 4 3 1. 8 parents :. 0 1 2 3 4 5 6 7 8 0 0 1 0 3. 154.
(155) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Calcul des arbres de parcours Pour calculer ces arbres, on doit stocker le parent de chaque sommet dans l’exploration.. Exemple 6 (profondeur) 4. 7. 2. Exemple 7 (largeur). 1. 5. 2. 6. 1. 5. 0 3. 6. 0 3. 8 parents :. 4. 7. 0 1 2 3 4 5 6 7 8 0 5 0 6 1 7 5 0 4 3 1. 8 parents :. 0 1 2 3 4 5 6 7 8 0 0 1 6 0 3. 155.
(156) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Calcul des arbres de parcours Pour calculer ces arbres, on doit stocker le parent de chaque sommet dans l’exploration.. Exemple 6 (profondeur) 4. 7. 2. Exemple 7 (largeur). 1. 5. 2. 6. 1. 5. 0 3. 6. 0 3. 8 parents :. 4. 7. 0 1 2 3 4 5 6 7 8 0 5 0 6 1 7 5 0 4 3 1. 8 parents :. 0 1 2 3 4 5 6 7 8 0 0 1 6 0 4 3. 156.
(157) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Calcul des arbres de parcours Pour calculer ces arbres, on doit stocker le parent de chaque sommet dans l’exploration.. Exemple 6 (profondeur) 4. 7. 2. Exemple 7 (largeur). 1. 5. 2. 6. 1. 5. 0 3. 6. 0 3. 8 parents :. 4. 7. 0 1 2 3 4 5 6 7 8 0 5 0 6 1 7 5 0 4 3 1. 8 parents :. 0 1 2 3 4 5 6 7 8 0 0 1 6 0 4 3. 157.
(158) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Calcul des arbres de parcours Pour calculer ces arbres, on doit stocker le parent de chaque sommet dans l’exploration.. Exemple 6 (profondeur) 4. 7. 2. Exemple 7 (largeur). 1. 5. 2. 6. 1. 5. 0 3. 6. 0 3. 8 parents :. 4. 7. 0 1 2 3 4 5 6 7 8 0 5 0 6 1 7 5 0 4 3 1. 8 parents :. 0 1 2 3 4 5 6 7 8 0 5 0 1 6 0 4 3. 158.
(159) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Calcul des arbres de parcours Pour calculer ces arbres, on doit stocker le parent de chaque sommet dans l’exploration.. Exemple 6 (profondeur) 4. 7. 2. Exemple 7 (largeur). 1. 5. 2. 6. 1. 5. 0 3. 6. 0 3. 8 parents :. 4. 7. 0 1 2 3 4 5 6 7 8 0 5 0 6 1 7 5 0 4 3 1. 8 parents :. 0 1 2 3 4 5 6 7 8 0 5 0 1 6 0 4 3. 159.
(160) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Calcul des arbres de parcours Pour calculer ces arbres, on doit stocker le parent de chaque sommet dans l’exploration.. Exemple 6 (profondeur) 4. 7. 2. Exemple 7 (largeur). 1. 5. 2. 6. 1. 5. 0 3. 6. 0 3. 8 parents :. 4. 7. 0 1 2 3 4 5 6 7 8 0 5 0 6 1 7 5 0 4 3 1. 8 parents :. 0 1 2 3 4 5 6 7 8 0 5 0 1 6 0 4 3. 160.
(161) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Calcul des arbres de parcours Pour calculer ces arbres, on doit stocker le parent de chaque sommet dans l’exploration.. Exemple 6 (profondeur) 4. 7. 2. Exemple 7 (largeur). 1. 5. 2. 6. 1. 5. 0 3. 6. 0 3. 8 parents :. 4. 7. 0 1 2 3 4 5 6 7 8 0 5 0 6 1 7 5 0 4 3 1. 8 parents :. 0 1 2 3 4 5 6 7 8 0 5 0 1 6 0 4 3. 161.
(162) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Calcul des arbres de parcours Pour calculer ces arbres, on doit stocker le parent de chaque sommet dans l’exploration.. Exemple 6 (profondeur) 4. 7. 2. Exemple 7 (largeur). 1. 5. 2. 6. 1. 5. 0 3. 6. 0 3. 8 parents :. 4. 7. 0 1 2 3 4 5 6 7 8 0 5 0 6 1 7 5 0 4 3 1. 8 parents :. 0 1 2 3 4 5 6 7 8 0 5 0 1 6 0 4 3. 162.
(163) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Forêts de parcours • Si le graphe est connexe, ces arbres sont dits “couvrants” car ils couvrent tous les sommets du graphe. • Sinon, on cherchera à construire une forêt couvrante (un arbre par “morceau” du graphe) ;. Exemple 8 (forêt couvrante) 4. 7 9 2 10. 1. 5 6. 0. 11. 12. 3 8. 163.
(164) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Connexité et composantes connexes. Comme on l’a vu, un graphe connexe est un graphe “en un seul morceau”.. Définition 2 Une composante connexe d’un graphe G est un sous-graphe connexe H de G qui est maximal, c’est-à-dire qu’il n’existe pas de sommet de G à la fois accessible à partir d’un élément de V (H) et hors de V (H). Comment identifier ces composantes connexes ?. 164.
(165) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Identification des composantes connexes Il suffit de lancer un parcours à partir de chacun des sommets du graphe. Algorithme 5 :. ComposantesConnexes(G ). Entrées : un graphe non orienté G . Sortie : les composantes connexes de G , identifiées par la liste de leurs sommets. 1 2 3 4 5 6. résultat ← liste(); visités ← tableau(G .nombre sommets(), faux); pour chaque sommet dans G .sommets() faire si ¬ visités[sommet] alors résultat.ajouter en fin(Largeur(G , sommet, visités)) ; renvoyer résultat;. 165.
(166) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Graphes bipartis Définition 3 Un graphe G = (V , E ) est biparti s’il existe une bipartition V = V1 ∪ V2 telle que deux sommets de la même partie ne sont jamais adjacents.. 166.
(167) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Graphes bipartis Définition 3 Un graphe G = (V , E ) est biparti s’il existe une bipartition V = V1 ∪ V2 telle que deux sommets de la même partie ne sont jamais adjacents.. Exemple 9 1 0 2 4 3 5 6 V1. V2. 167.
(168) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Graphes bipartis Définition 3 Un graphe G = (V , E ) est biparti s’il existe une bipartition V = V1 ∪ V2 telle que deux sommets de la même partie ne sont jamais adjacents.. Exemple 9 1. 3. 0. 5. 2. 2. 4. 0. 6. 3 5. 1. 6. 4 V1. V2. 168.
(169) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Graphes bipartis Définition 3 Un graphe G = (V , E ) est biparti s’il existe une bipartition V = V1 ∪ V2 telle que deux sommets de la même partie ne sont jamais adjacents.. Exemple 9 1. 3. 0. 5 ?. 2 0. 2 4. 6. 3 5. 1. 6. 4 V1. V2. 169.
(170) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Reconnaissance de graphes bipartis. • De nombreux problèmes “difficiles” sur les graphes deviennent “faciles” sur des graphes bipartis ;.
(171) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Reconnaissance de graphes bipartis. • De nombreux problèmes “difficiles” sur les graphes deviennent “faciles” sur des graphes bipartis ; • Il est donc important de pouvoir les reconnaı̂tre..
(172) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Reconnaissance de graphes bipartis. • De nombreux problèmes “difficiles” sur les graphes deviennent “faciles” sur des graphes bipartis ; • Il est donc important de pouvoir les reconnaı̂tre. • Comment procéder ? Approche naı̈ve : examiner toutes les bipartitions jusqu’à ce qu’on en trouve une satisfaisante ou qu’on puisse conclure qu’il n’en existe pas ;.
(173) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Reconnaissance de graphes bipartis. • De nombreux problèmes “difficiles” sur les graphes deviennent “faciles” sur des graphes bipartis ; • Il est donc important de pouvoir les reconnaı̂tre. • Comment procéder ? Approche naı̈ve : examiner toutes les bipartitions jusqu’à ce qu’on en trouve une satisfaisante ou qu’on puisse conclure qu’il n’en existe pas ; • Mauvaise idée : il y a O(2|V | ) bipartitions..
(174) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Reconnaissance de graphes bipartis. • De nombreux problèmes “difficiles” sur les graphes deviennent “faciles” sur des graphes bipartis ; • Il est donc important de pouvoir les reconnaı̂tre. • Comment procéder ? Approche naı̈ve : examiner toutes les bipartitions jusqu’à ce qu’on en trouve une satisfaisante ou qu’on puisse conclure qu’il n’en existe pas ; • Mauvaise idée : il y a O(2|V | ) bipartitions. • La caractérisation suivante va nous donner un algorithme efficace..
(175) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Caractérisation des graphes bipartis. Théorème 4 Un graphe est biparti si et seulement s’il ne contient pas de cycle de longueur impaire.. 175.
(176) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Caractérisation des graphes bipartis Théorème 4 Un graphe est biparti si et seulement s’il ne contient pas de cycle de longueur impaire.. Démonstration. ⇒ : tout cycle partant de v y revient par des aller-retours : V1. V2. .. .. .. .. . . . et donc tout cycle de G est pair.. 176.
(177) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Caractérisation des graphes bipartis Théorème 4 Un graphe est biparti si et seulement s’il ne contient pas de cycle de longueur impaire.. Démonstration. ⇐ : ≡ “si G n’est pas biparti, alors il contient un cycle impair”. 1. 2. 3. k. v. 177.
(178) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Caractérisation des graphes bipartis Théorème 4 Un graphe est biparti si et seulement s’il ne contient pas de cycle de longueur impaire.. Démonstration. ⇐ : ≡ “si G n’est pas biparti, alors il contient un cycle impair”. 1. 2. 3. k. v. 178.
(179) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Caractérisation des graphes bipartis Théorème 4 Un graphe est biparti si et seulement s’il ne contient pas de cycle de longueur impaire.. Démonstration. ⇐ : ≡ “si G n’est pas biparti, alors il contient un cycle impair”. 1. 2. 3. k. v. 179.
(180) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Caractérisation des graphes bipartis Théorème 4 Un graphe est biparti si et seulement s’il ne contient pas de cycle de longueur impaire.. Démonstration. ⇐ : ≡ “si G n’est pas biparti, alors il contient un cycle impair”. 1. 2. 3. k. v. 180.
(181) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Caractérisation des graphes bipartis Théorème 4 Un graphe est biparti si et seulement s’il ne contient pas de cycle de longueur impaire.. Démonstration. ⇐ : ≡ “si G n’est pas biparti, alors il contient un cycle impair”. 1 v. 2. 3. k ···. 181.
(182) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Caractérisation des graphes bipartis Théorème 4 Un graphe est biparti si et seulement s’il ne contient pas de cycle de longueur impaire.. Démonstration. ⇐ : ≡ “si G n’est pas biparti, alors il contient un cycle impair”. 1 v. 2. 3. k x1 ··· x2. 182.
(183) Parcours d’arbres. Parcours en profondeur. Parcours en largeur. Arbres de parcours. Applications. Caractérisation des graphes bipartis Théorème 4 Un graphe est biparti si et seulement s’il ne contient pas de cycle de longueur impaire.. Démonstration. ⇐ : ≡ “si G n’est pas biparti, alors il contient un cycle impair”. 1 2 3 S1 k x1 v. ··· x2 S2. 183.
Documents relatifs
En effet, si l’on parcourt les sommets du graphe en sélectionnant chaque arête incidente à chacun des sommets, on aura sélectionné chaque arête exactement deux fois....
Cours précédent : caractérisation des graphes bipartis Théorème 1 Un graphe est biparti si et seulement s’il ne contient pas de cycle de longueur impaire.... Arbres couvrants
L’arbre couvrant que calcule Prim est de poids minimum Procédons par induction sur |V T |, en montrant qu’à chaque étape, il existe un ACPM Topt contenant T... Plus
les parcours largeur, profondeur et les arbres associés ; le calcul des composantes connexes ; la détection de cycle ; la reconnaissance des graphes bipartis ;... Correction
• L’algorithme de Bellman-Ford recherche également des raccourcis entre les sommets ; • Le fonctionnement est différent de celui de Dijkstra, qui cherchait des chemins
Introduction Les bases La m´ ethode de Ford-Fulkerson Coupes minimum Complexit´ e de l’algorithme
• Dans le cas o` u le graphe n’est pas biparti, le probl` eme reste soluble en temps polynomial mais l’algorithme est beaucoup plus complexe [2] ;. • Et si l’on veut des
3 combiner : combiner les solutions des sous-probl` emes pour obtenir la solution au probl` eme de d´ epart. • L’efficacit´ e de cette approche d´ epend fortement des complexit´ es