Telechargé par mohamed ben youssef

Parcours des graphes

publicité
5.
Problème de parcours
des graphes
1
Algorithmes de parcours d’un graphe
Définition
Définition
On appelle exploration ou parcours d’un graphe, tout
procédé déterministe qui permet de choisir, à partir des
sommets visités d’un graphe ou d’un arbre, le sommet
suivant à visiter. Le problème consiste à déterminer un
ordre sur les visites des sommets.
➔ Le problème consiste à déterminer un ordre sur les
visites des sommets.
N.B La notion d’exploration / parcours peut être utilisée
dans les graphes orientés comme non-orientés.
2
2
Algorithmes de parcours d’un graphe
○
○
Permet ainsi de calculer les distances de tous les noeuds depuis
un nœud source dans un graphe non valué (orienté ou non
orienté).
Il permet aussi de déterminer si un graphe est connexe ou non
en basant le calcule sur les composantes connexes du graphe
Pour vérifier la connexité d’un graphe non orienté, il suffit pour
cela d’appliquer un des algorithmes suivants:
○
➢
Parcours en Largeur (Breadth-First Search)
➢
Parcours en Profondeur (Depth-First Search)
3
3
Algorithmes de parcours d’un graphe
○
○
Ces parcours sont des algorithmes de marquage qui
permettent d’explorer complètement un graphe à partir
d’un sommet quelconque
Avant de présenter les algorithmes de parcours des graphes, il
faut tout d’abord définir deux concepts de base:
Racine: Le sommet de départ, fixé à l’avance, dont on souhaite
visiter tous les descendants est appelé racine de
l’exploration
Parcours: Un parcours de racine r est une suite L de sommets telle
que:
1. r est le premier sommet de L,
2. chaque sommet apparaît une fois et une seule dans L,
3. tout sommet sauf la racine est adjacent à un sommet
4
placé avant lui dans la liste.
4
Algorithmes de parcours d’un graphe
Parcours en largeur
○
○
○
Un parcours en largeur explore le graphe à partir d’un
sommet donné (sommet de départ ou sommet source).
L’algorithme simule la transmission d’un message à partir
d’un sommet source, en utilisant l’idée suivante : tout
sommet qui reçoit le message, le transférera à tous ses
voisins qui ne l’auront pas encore reçu
On continue avec le même principe jusqu’à visiter tous les
sommets du graphe, auquel cas le parcours est terminé ou
bien reprend en un sommet non encore visité
5
5
Algorithmes de parcours d’un graphe
Parcours en largeur
• Un parcours en largeur (BFS) permet le parcours d'un graphe
en commençant par explorer un noeud source, puis ses
successeurs, puis les successeurs non explorés des successeurs.
Propriétés de l’algorithme BFS
✓ BFS est un algorithme de parcours de graphe par recherche en
largeur d'abord (Breadth First Search).
✓ Fonctionne avec les graphes orientés et non-orientés.
✓ Permet la détection de cycle si on considère le graphe non-orienté.
✓ Permet la détection de Composantes Simplement Connexes si il
reste des sommets non traités après un premier passage (rapide en
pratique)
6
6
Algorithmes de parcours d’un graphe
Parcours en largeur
Deux contraintes sont à respecter pour ce type de parcours sont :
✓ Un sommet déjà visité ne doit pas être revisité.
✓ On explore les sommets successeurs directs.
• L'algorithme de base repose sur l'utilisation d'une pile qui
va maintenir à jour la liste des sommets à visiter.
7
7
Parcours en largeur: Exemple illustratif
Exemple: Prenons le graphe G ci-dessous . Imaginons que nous voulions
parcourir le graphe en largeur en partant du sommet 1.
Résultat:
Le parcours en largeur de ce graphe donnerait la liste suivante : 1 2 3 4 6 5 7 8.
Une autre solution serait la suivante : 1 3 2 6 4 5 8 7.
➔ Elles sont toutes les deux valables.
8
8
Parcours en largeur: Exemple illustratif
1. On part du sommet 1, on liste tous les sommets successeurs, il s'agit donc des
sommets 2 et 3. Marquons-les d’une couleur différente pour ne pas les passer
deux fois.
2. Il n'y a plus de sommets directement accessibles à partir du sommet 1. Il faut
donc maintenant chercher ceux qui sont accessibles en passant par un
sommet. Ceci revient en fait à chercher les successeurs des sommets
précédemment parcourus. On doit donc parcourir à nouveau en largeur mais
en partant des sommets précédemment explorés. On commence par le
sommet 2, le seul successeur est le sommet 4, on l'affiche et on le marque
comme étant parcouru. On passe au sommet 3, tout comme le sommet 2, il
n'a qu'un seul successeur. On le marque comme déjà parcouru.
3. Il faut donc parcourir en partant des sommets 4 et 6. Le sommet 4 a deux
successeurs, le sommet 5 et le sommet 6. Or le sommet 6 a déjà été visité, on
ne doit donc pas le mettre dans la file des sommets à parcourir. On ajoutera
seulement le sommet 5 à la file des sommets à parcourir.
4. Concernant le parcours à partir du sommet 6, il n'y a rien à faire, en effet, celuici n'a pas de successeurs. On réitère le processus jusqu'à avoir parcouru tous
nos sommets.
9
9
Parcours en largeur: Exemple illustratif
• Les nœuds sont marqués en fonction de leur ordre de visite par le BFS : le
nœud n°1 correspond donc à l'origine. Les nœuds en cours de visite (c'est à
dire présents dans la file) sont coloriés en bleu. Les nœuds déjà visités et
extraits de la file sont coloriés en vert
10
10
Parcours en largeur: Pseudocode
11
11
Algorithmes de parcours d’un graphe
Parcours en profondeur
○
○
○
Principe: explore un sommet et essaie d'aller le plus loin
possible.
Quand ce n'est pas possible, on revient en arrière et on
essaie de parcourir en profondeur en prenant un sommet
qui n'a pas encore été visité.
La recherche reprend en un sommet non encore visité ou
bien se termine.
12
12
Algorithmes de parcours d’un graphe
Parcours en profondeur
Principe de DFS:
✓ Si un sommet n'a pas été visité alors il faut le parcourir en profondeur. S'il
a déjà été visité, alors il ne faut rien faire.
✓ L'exploration récursive s'arrête tout simplement lorsque on a parcouru
tous les sommets.
• Il est très simple de montrer que l'algorithme se termine puisque le
graphe a un nombre fini de sommets et qu'à chaque exploration
dans le graphe, on diminue le nombre de sommets qui n'ont pas
encore été visités.
• Le parcours consiste donc à marquer le sommet courant puis pour
tous les sommets si successeurs, faire un parcours en profondeur si13le
sommet n'a pas été marqué.
13
Algorithmes de parcours d’un graphe
Parcours en profondeur
14
14
Comparaison entre BFS et DFS
• Dans le cas de DFS, les sommets sont explorés dans l'arbre "de haut
en bas", alors que pour BFS ils sont explorés "par niveaux"
15
15
Téléchargement