Parcours de graphes

publicité
Recherche en profondeur (Depth-First Search)
et
recherche en largeur (Breadth-First Search)
(§12.3)
Sous-graphes
Un sous-graphe S d’un graphe G est un graphe
tel que
les sommets de S forment un sous-ensemble
des sommets de G
les arêtes de S forment une sous-collection des
arêtes de G
Sous-graphe
Un sous-graphe couvrant d’un graphe G est
sous-graphe contenant tous les sommets de G
Sous-graphe couvrant
IFT2010, H2004, Sylvie Hamel
Université de Montréal
Parcours de graphes
1
Graphes connexes
Un graphe est connexe s’il existe un chemin
entre chaque paire de sommets du graphe
Graphe connexe
Une composante connexe d’un graphe G est
un sous-graphe connexe maximal de G
Un graphe non-connexe ayant
deux composantes connexes
IFT2010, H2004, Sylvie Hamel
Université de Montréal
Parcours de graphes
2
Arbres et forêts
Un arbre est un graphe non-orienté T tel que
T est connexe
T n’a pas de cycles
Arbre
Une forêt est un graphe non-orienté qui n’a pas
de cycles
Les composantes connexes d’une forêt sont
des arbres
IFT2010, H2004, Sylvie Hamel
Université de Montréal
Parcours de graphes
Forêt
3
Arbres et forêts couvrants
Un arbre couvrant d’un graphe connexe est un
sous-graphe couvrant qui est un arbre.
Un arbre couvrant n’est pas unique sauf si le
graphe est un arbre.
Graphe
Une forêt couvrante d’un graphe est un sousgraphe couvrant qui est une forêt.
Arbre couvrant
IFT2010, H2004, Sylvie Hamel
Université de Montréal
Parcours de graphes
4
Parcours en profondeur (Depth-First Search)
Un parcours en profondeur d’un graphe G
Visite tous les sommets et toutes les arêtes de G
Détermine si G est connexe ou non
Calcule les composantes connexes de G
Calcule une forêt couvrante pour G
La complexité en temps d’un parcours en profondeur est O(n+m)
L’algorithme de parcours en profondeur peut être modifié pour résoudre
d’autres problèmes sur les graphes:
trouver et retourner un chemin entre deux sommets
trouver un cycle dans un graphe
IFT2010, H2004, Sylvie Hamel
Université de Montréal
Parcours de graphes
5
Parcours en profondeur: Exemple
A
A
Sommets non-explorés
Sommets visités
Arêtes non-explorées
Arêtes sélectionnées
Arêtes de retour
A
B
D
E
D
E
C
A
B
D
C
A
E
B
C
IFT2010, H2004, Sylvie Hamel
Université de Montréal
Parcours de graphes
6
Parcours en profondeur: Exemple
A
B
A
D
E
B
D
C
C
A
A
B
E
D
E
B
E
C
C
IFT2010, H2004, Sylvie Hamel
Université de Montréal
D
Parcours de graphes
7
Analyse du parcours en profondeur
Chaque sommet est étiquetté deux fois
Une fois “non-exploré”
Une fois “visité”
Chaque arête est étiquettée deux fois
Une fois “non-explorée”
Une fois “sélectionnée” ou “retour”
L’opération incidentes(s) est appelée pour chaque sommet
La complexité en temps du parcours en profondeur est en O(n+m) si on
utilise la structure de données “liste d’adjacence”
IFT2010, H2004, Sylvie Hamel
Université de Montréal
Parcours de graphes
8
Chemin entre deux sommets
Algorithme trouverChemin(G, v, z)
changerÉtiquette(v, VISITÉ)
S.empiler(v)
si v = z
retourner S.éléments()
Pour tout e ∈ G.incidentes(v)
si Étiquette(e) = NON-EXPLORÉ
w ← opposé(v,e)
si Étiquette(w) = NON-EXPLORÉ
changerÉtiquette(e, SÉLECTIONNÉ)
S.empiler(e)
trouverChemin(G, w, z)
S.dépiler(e)
sinon
changerÉtiquette(e, RETOUR)
S.dépiler(v)
IFT2010, H2004, Sylvie Hamel
Université de Montréal
Parcours de graphes
9
Trouver un cycle dans un graphe
Algorithme trouverCycle(G, v, z)
changerÉtiquette(v, VISITÉ)
S.empiler(v)
Pour tout e ∈ G.incidentes(v)
si Étiquette(e) = NON-EXPLORÉ
w ← opposé(v,e)
S.empiler(e)
si Étiquette(w) = NON-EXPLORÉ
changerÉtiquette(e, SÉLECTIONNÉ)
trouverChemin(G, w, z)
S.dépiler(e)
sinon
T ← nouvelle pile vide
répéter
o ← S.dépiler()
T.empiler(o)
tant que o = w
retourner T.éléments()
S.dépiler(v)
IFT2010, H2004, Sylvie Hamel
Université de Montréal
Parcours de graphes
10
Parcours en largeur (Breadth-First Search)
Un parcours en largeur d’un graphe G
Visite tous les sommets et toutes les arêtes de G
Détermine si G est connexe ou non
Calcule les composantes connexes de G
Calcule une forêt couvrante pour G
La complexité en temps d’un parcours en largeur est O(n+m)
L’algorithme de parcours en profondeur peut être modifié pour résoudre
d’autres problèmes sur les graphes:
trouver et retourner un chemin de longueur minimale entre deux sommets
trouver un cycle simple, s’il y en a un
IFT2010, H2004, Sylvie Hamel
Université de Montréal
Parcours de graphes
11
Parcours en largeur: Exemple
A
A
Sommets non-explorés
Sommets visités
Arêtes non-explorées
Arêtes sélectionnées
Arêtes de retour
L0
L1
L0
L1
L0
C
E
IFT2010, H2004, Sylvie Hamel
Université de Montréal
C
B
E
A
B
A
D
L1
F
F
A
C
B
E
Parcours de graphes
D
D
F
12
Parcours en largeur: Exemple
L0
L1
L0
A
C
B
E
L0
L1
L2
F
A
L1
C
E
C
B
L0
B
L2
D
L1
A
E
D
F
A
C
B
D
D
L2
F
IFT2010, H2004, Sylvie Hamel
Université de Montréal
Parcours de graphes
E
F
13
Parcours en largeur: Exemple
L0
L1
L0
L1
A
C
B
L2
E
D
L1
F
A
C
B
L2
E
D
F
A
C
B
L2
L0
E
D
F
IFT2010, H2004, Sylvie Hamel
Université de Montréal
Parcours de graphes
14
Analyse du parcours en largeur
Chaque sommet est étiquetté deux fois
Une fois “non-exploré”
Une fois “visité”
Chaque arête est étiquettée deux fois
Une fois “non-explorée”
Une fois “sélectionnée” ou “de traverse”
Chaque sommet est inséré une fois dans une séquence Li
L’opération incidentes(s) est appelée pour chaque sommet
La complexité en temps du parcours en profondeur est en O(n+m) si on
utilise la structure de données “liste d’adjacence”
IFT2010, H2004, Sylvie Hamel
Université de Montréal
Parcours de graphes
15
Profondeur versus largeur
Parcours en
profondeur
Applications
Forêt couvrante,
composantes connexes,
chemins, cycles
Parcours en
largeur
v
v
v
Plus court chemin
L0
A
B
C
E
D
L1
Parcours en profondeur
IFT2010, H2004, Sylvie Hamel
Université de Montréal
C
B
L2
F
A
E
D
F
Parcours en largeur
Parcours de graphes
16
Profondeur versus largeur (suite)
Arête de retour (v,w)
w est un ancêtre de v
dans l’arbre des arêtes
sélectionnées

Arête de traverse (v,w)

w est sur le même niveau
que v ou dans le prochain
niveau dans l’arbre des
arêtes sélectionnées
L0
A
B
C
E
D
F
Parcours en profondeur
IFT2010, H2004, Sylvie Hamel
Université de Montréal
L1
A
C
B
L2
E
D
F
Parcours en largeur
Parcours de graphes
17
Téléchargement