Vous êtes sur la page 1sur 53

STRUCTURE DE DONNEES

PROJET
2006-2007

LES GRAPHES : PARCOURS EN PROFONDEUR


labor par: Aroua Achraf Ben Alaya Safouene

PLAN
1. 2. 3. 4. 5. 6. Parcours en profondeurs sur les arbres Quelques Dfinitions sur les Graphes Exemple de parcours de graphe Algorithme du parcours en profondeur Des Applications sur les graphes Complexit

1. Parcours en profondeurs sur les arbres


Les parcours en profondeur se dfinissent de manire rcursive sur les arbres. Le parcours d'un arbre consiste traiter la racine de l'arbre et parcourir rcursivement les sous-arbres gauche et droit de la racine. Les parcours prfixe, infixe et suffixe se distinguent par l'ordre dans lequel on effectue ces traitements.

2. Quelques Dfinitions sur les GRAPHES

Reprsentation par listes d'adjacences La reprsentation par listes d'adjacences d'un graphe G = (S;A) consiste en un tableau l de |S| listes, une pour chaque sommet de G Pour chaque s de S, la liste d'adjacences l[s] est une liste des sommets t, tels que l'arc (s; t) appartient A. Autrement dit, l[s] est constitue de tous les sommets adjacents s dans G. Cette reprsentation ne consomme qu'une quantit de mmoire en O(S +A). Toutefois, pour dterminer si un arc donne est pressent dans le graphe, il n'existe pas d'autre moyen que de parcourir la liste d'adjacence associe au sommet d'origine de l'arc.

3. Parcours en profondeur: Exemple

4.Prsentation dAlgorithme de Parcours en Profondeur dun Graphe


La stratgie suivie par le parcours en profondeur est de descendre plus profondment dans le graphe(orient ou non) chaque fois que c'est possible. Lors d'un tel parcours, les arcs sont explores a partir du sommet v dcouvert le plus recommenable dont on n'a pas encore explor tous les arcs qui en partent. Lorsque tous les arcs de v ont t explores, l'algorithme revient en arrire pour explorer les arcs qui partent du sommet a partir duquel v a t dcouvert. Ce processus se rpte jusqu'a ce que tous les sommets accessibles depuis l'origine aient t dcouverts.

Principe Cest une procdure essentiellement rcursive. Pour la mettre en oeuvre on utilisera un tableau de boolens marque index par les sommets du graphe. Ce tableau est initialis faux. Un parcours de G partir dun sommet s de G est ralis par la procdure suivante :

Implmentation de lAlgorithme
Procdure Parcours-Profondeur (don G:matrice;s,n:entier,don_res marque:tab) Dbut Pour i de 1 n faire /* n est le cardinal de lensemble des sommets */ marque[i] faux Fin pour marque(s) vrai /*s est lindice du sommet du graphe*/ Parcours-sous-graphe(G,s,m,marque) Fin Parcours-profondeur
Procdure Parcours-sous-graphe(don G:matrice;i,m:entier;don_res marque:tab) Var: j:entier Dbut Pour j de 1 jusqu m faire si marque[j]=faux alors marque[j] vrais Parcours-sous-graphe(G,j,m,marque) fin si Fin pour Fin Parcours-sous-graphe /*G est une matrice n*m contenant les liste dadjacence des sommets*/

Remarque Cette procdure appele sur le sommet x marquera tous les sommets de la composante connexe de x. Pour effectuer un parcours complet du graphe il faudra relancer la procdure partir dun sommet non marqu de G jusqu`a de que tous les sommets soient marqus.

Calcule du tableau des dates de dcouverte des sommets le tableau des parents:

Structures de donnes utilises


On utilise une pile P, pour laquelle on suppose definies les operations init_pile(P) qui initialise la pile P vide, empile(p, s) qui ajoute s au sommet de la pile p, est_vide(P) qui retourne vrai si la pile est vide et faux sinon, sommet(P) qui retourne le sommet s au sommet de la pile P, et depile(P,s) qui enlve s du sommet de la pile P. On utilise, comme pour le parcours en largeur, un tableau T qui associe chaque sommet sa couleur(blanc, gris ou noir). On va en plus memoriser pour chaque sommet S(i) : - dec[S(i)]= date de decouverte de S(i) (passage en gris) - fin[s(i)] = date de fin de traitement de s(i) (passage en noir) Ou lunit de temps est une itration. La date courante est mmorise dans la variable tps.

Algorithme de parcours en profondeur des sommets accessibles depuis s(0) DFS(S,A, s(0) ) (Manire itrative): Init_pile(P) Pour s(i) dans S faire // s(i) appartient S T[s(i)] Nil couleur[s(i)]blanc Fin pour tps 0 Dec[s(0)] tps Empile(P,s(0))

Couleur [s(0)] gris Tans que est _ vide (P) =faux faire tps tps+1 s(i)sommet (P)
Pour s(j) dans S faire // s(j) appartient S Si (s(j) dans succ (s(i))) et (couleur[s(j)]=blanc) Alors empile (P, s(j)) couleur[s(j)] gris T[s(j)]s(i) Dec [s(j)]tps

Sinon depile (P, s(i)) couleur[s(i)]noir fin[s(i)]tps Finsi Fin Tant Fin DFS

Trace de cet algorithme


Exemple:

3 2 5

1 4 6

b
2

b 5 b 7

b
1 b 4 b 6

On empile le 1.

0
s(i)=1 tps=0

Nil

1 2 3 4

5 6 7

Pile

Fin

Dec

b
2

b 5 b 7

g b 1 b 4 b 6

On empile le 2.

s(i)=1 S(j)=2 tps=1 2 1

0 1

Nil 1

1 2 3

4
5

Pile

6
7

Fin

Dec

b g b 2

b 5 b 7

b 1 b 4 b 6

On empile le 3.
0 1 2 Nil 1 2
1 2 3 4 5

s(i)=2 S(j)=3 tps=2

2 1

Pile

6
7

Fin

Dec

gb g b 2

b 5 b 7

g b 1 b 4 b 6

On empile le 5.
0 1 2 Nil 1 2
1 2 3 4

s(i)=3 s(j)=5 tps=3

5 3

2
1

5 6 7

Pile

Fin

Dec

gb g b 2

b 5

b 1 b 4 b 6 7

On dpile le 5 .
0 1 2 4 3 Nil 1 2 3
1 2 3 4 5 6 7

s(i)=3 s(j)=5 tps=4

3 2 1

Pile

Fin

Dec

g b g b 2

b 5

b 1 b 4 b 6 7

On dpile le 3.
0 1 2 Nil 1 2
1 2

s(i)=3 tps=5

5
2 1

3
4

5
6 7

Pile

Fin

Dec

g b g b 2

n b 5 b 7 g n

b 1 b 4 b 6

On empile le 4.
0 1 2 6 3 Nil 1 2 2 3
1 2 3 4 5 6 7

s(i)=2 s(j)=4 tps=6

4 2 1

5 4

Pile

Fin

Dec

n g b g b 2

g b 5

g b 1

g b
4

7 b 6

On empile le 6.
0 1 2 6 3 7 Nil 1 2 2 3 4
1 2 3 4 5 6 7

s(i)=4 s(j)=6 tps=7

4
2 1

5 4

Pile

Fin

Dec

n g b g b 2

g b 5

b 1

g b
4

g b
6

On dpile le 6 ( 6 pointe sur 5 (noir)).

s(i)=6 s(j)=5 tps=8

5 4 8

2 1

Pile

0 1 2 6 3 7

Nil 1 2 2 3 4

1 2 3

4
5

6
7

Fin

Dec

n g b g b 2

g b 5

b 1

g b
4

7 g b 6 n

On empile le 7.
0 1 2 6 3 7 9 Nil 1 2 2 3 4 4
1 2 3 4 5 6 7

s(i)=4 s(j)=7 tps=9

7
4 2 1

5 4 8

Pile

Fin

Dec

n g b g b 2

g b 5

b 1

g b

g b
4

7 g b 6 n

On dpile le 7.
0 1 2 6 3 7 9 Nil 1 2 2 3 4 4
1 2 3

s(i)=4 s(j)=7 tps=10

4 2

5
4 8 10

4
5

Pile

6
7

Fin

Dec

n g b g b 2

g b 5

g b
1

g b

g b
4

7 g b 6 n

On dpile le 4.

s(i)=4 s(j)=7 tps=11


2 1

Pile

5 11 4 8 10

0 1 2 6 3 7 9

Nil 1 2 2 3 4 4

2
3 4

5
6 7

Fin

Dec

n g b g b 2

g b 5

g b
1

g b

g b
4

7 g b 6 n

On dpile le 2.
0 1 2 6 3 7 9 Nil 1 2 2 3 4 4
1
2

s(i)=2 s(j)=4 tps=12

Pile

12 5 11 4 8 10

3
4 5 6 7

Fin

Dec

n g b n g b 2

g b 5

g b
1

g b

g b
4

7 g b 6 n

On dpile le 1 et on termine le trace.

s(i)=1 s(j)=2 tps=13

Pile Vide

13 12 5 11 4 8 10

0 1 2 6 3 7 9

Nil 1 2 2 3 4 4

1 2 3 4 5 6 7

Fin

Dec

n g b n g b 2

g b 5

g b
1

g b

g b
4

7 g b 6 n

6.Complexit
Soit G dordre n m artes. On suppose que G est reprsent par listes dadjacence. Chaque sommet est paramtre de la procdure une et une seule fois donc il y a n appels rcursifs. A chaque sommet visit, tous les sommets adjacents `a x sont tests pour le tableau marque ce qui se fait globalement en un temps proportionnel `a m. Lalgorithme demande donc un temps O(n) pour les appels et un temps O(m) pour les marques. Donc le temps de calcul est de lordre de O(max(n,m)).