[PDF] Algorithmique Cours 7 : Parcours de graphes ROB3 – année 2014





Previous PDF Next PDF



Algorithmique des graphes - Cours 4 – Parcours en profondeur

en tête de la pile est le sommet actuel précédé par la suite de ses ancêtres. Page 10. Parcours en profondeur – graphes non-orientés. A : B



Quelques rappels sur la théorie des graphes

On appelle ordre d'un graphe le nombre de ses sommets i.e c'est card(S). le parcours en profondeur consiste



Parcours dun graphe

1 avr. 2013 Les sommets de ce graphe sont a b



Première partie : Algorithmique avancée pour les graphes

Une façon naïve de déterminer les différentes SCC d'un graphe consiste à faire un parcours (en largeur ou en profondeur) à partir de chacun des sommets du 



Théorie des graphes et optimisation dans les graphes Table des

8.4 Parcours en profondeur (Depth First Search = DFS) . donné un tel graphe on pourra s'intéresser



Algorithmique Cours 7 : Parcours de graphes ROB3 – année 2014

) : tous les autres arcs. Arcs associée à un parcours en profondeur. A. B. C. D arc 



Graphes : introduction Graphes Graphes Graphes : G = (S A)

parcours en largeur parcours en profondeur



ALGO1 – Parcours en profondeur

7 févr. 2021 1 Parcours en profondeur générique dans un arbre ... C. D. E. F. Théor`eme 2 Soit G = (S A) un graphe. Un parcours en profondeur sur G ...



Algorithmique des graphes - Cours 5 – Composantes fortement

On l'appelle le graphe des composantes fortement connexes. CFC(G). Page 15. Tester la connexité forte avec Parcours en profondeur. Calculer la composante 



Parcours de graphes

L'algorithme de parcours en profondeur (DFS) d'un graphe G prend un temps O(n+m) Parcours. Propriétés du parcours en profondeur: A. B. C.



[PDF] Parcours de graphes - IGM

Le parcours d'un graphe en profondeur se réalise en partant d'un sommet arbitraire v à visiter et en parcourant d'abord un de ses voisins u et tous ses “ 



[PDF] Algorithmique des graphes - Cours 4 – Parcours en profondeur

Algorithme 1 : Parcours en profondeur DFS(G) Données : graphe G marque des sommets (initialisé à Faux) père ? des sommets (initialisée à null)



[PDF] Parcours dun graphe Parcours profondeur dabord

Parcours d'un graphe • un processus dans lequel on visite tous les noeuds que l'on puisse atteindre à partir du noeud initial



[PDF] Parcours dun graphe

Parcours en profondeur Jean-Manuel Mény – IREM de LYON () Algorithmique ISN 2013 47 / 97 Page 66 Parcours en profondeur : principe de l'algorithme Vous 



[PDF] Première partie : Algorithmique avancée pour les graphes - CNRS

Une façon naïve de déterminer les différentes SCC d'un graphe consiste à faire un parcours (en largeur ou en profondeur) à partir de chacun des sommets du 



[PDF] Quelques rappels sur la théorie des graphes - CNRS

On appelle ordre d'un graphe le nombre de ses sommets i e c'est card(S) le parcours en profondeur consiste à partir d'un sommet donné à suivre un 



[PDF] Parcours de graphes - Université de Montréal

L'algorithme de parcours en profondeur (DFS) d'un graphe G prend un temps O(n+m) C D E A Sommets non visités Sommets visités Arêtes non visitées



[PDF] Parcours de graphes

L'algorithme de parcours en profondeur (DFS) d'un graphe G prend un temps O(n+m) Parcours Propriétés du parcours en profondeur: A B C



[PDF] Algorithmique Cours 7 : Parcours de graphes ROB3

) : tous les autres arcs Arcs associée à un parcours en profondeur A B C D arc 



[PDF] Parcours de graphes

sommets du graphe Il y a deux stratégies de parcours différentes : partant d'un sommet le graphe est parcouru ? en largeur ? en profondeur

:

Algorithmique

Cours 7 : Parcours de graphes

ROB3 - année 2014-2015

Parcours : définitions et notations

Soit G=(S,A) un graphe.

B(T) : Bordure de T T S

Sous-ensemble des sommets de S-T dont au moins un voisin est dans T.

11765109

8Bordure de {6,9} = {8,10,5}

Soit L=(s1,s2,...,sp) une liste de sommets distincts :

L[i..j] est la sous-liste (si,...,sj)

11765109

8L = (8,6,5,9,10,7,11)

L[2..5] = (6,5,9,10)

Parcours du graphe G=(S,A) :

liste L=(s1,s2,...,sn) des n sommets de G telle que : pour tout i=2..n, le sommet si appartient à la bordure de {s1,s2,...,si-1} , si cette bordure n'est pas vide.

Soit L=(s1,s2,...,sn) un parcours de G.

Si B({s1,s2,...,si-1}) est vide, alors si est appelé point de régénération de L. Par convention, s1 est un point de régénération. L'étape i du parcours consiste à ajouter si (nouveau sommet visité) à la sous-liste L[1..i-1] des sommets déjà visités.

A la fin de l'étape i :

un sommet de L[1..i] est dit ouvert s'il possède au moins un voisin non visité ; dans le cas contraire, il est dit fermé. A la fin de l'étape 3, les sommets visités 1 et 4 sont fermés, le sommet visité 2 est ouvert.étape i L[1..i] B(L[1..i])

1 (1) (2,4)

2 (1,2) (3,4)

3 (1,2,4) (3)

4 (1,2,4,3) Z

5 (1,2,4,3,8) (6,9)

6 (1,2,4,3,8,6) (5,9)

7 (1,2,4,3,8,6,5) (9,7)

8 (1,2,4,3,8,6,5,7) (9)

9 (1,2,4,3,8,6,5,7,9) Z

13

247659

8Exemple (graphe non orienté) :

Parcours :L= (1,2,4,3,8,6,5,9,10,7,11,12,13)

Points de régénération : {1,3,8,12}11765109 8

1312124

3Exemple (graphe orienté) :

Forêt sous-jacente.

Soit L=(s1,s2,...,sn) un parcours de G.

On choisit pour chaque sommet sj (non point de régénération) On note alors pèreL(sj) le prédécesseur de sj choisi. Le graphe partiel de G formé des arêtes (arcs) (pèreL(sj),sj) est une forêt couvrante de G notée F(L). F(L) est formée de r arborescences A1(L), A2(L),....,Ar(L) où Ak(L) est une arborescence dont la racine est le kième point de régénération.

11765109

8

1312124

3

Un parcours :L= (1,2,4,3,8,6,5,9,10,7,11,12,13)

Points de régénération : {1,3,8,12}

Le graphe partiel des arcs rouges est une forêt F(L) sous-jacente du parcours L.

Parcours en largeur

Parcours en profondeur

L est un parcours en largeur de G si tout sommet visité si, qui n'est pas un point de régénération, est voisin du premier sommet visité ouvert de L[1..i-1].

Remarque : pèreL(si) est le premier sommet visité ouvert de L[1..i-1].Soit L=(s1,s2,...,sn) un parcours de G.

L est un parcours en profondeur de G si tout sommet visité si, qui n'est pas un point de régénération, est voisin du dernier sommet visité ouvert de L[1..i-1]. Remarque : pèreL(si) est le dernier sommet visité ouvert de L[1..i-1]. (1) (1,2) (1,2,4) (1,2,4,3) (1,2,4,3,8) (1,2,4,3,8,6) (1,2,4,3,8,6,9) (1,2,4,3,8,6,9,5) (1,2,4,3,8,6,9,5,7)Après chaque étape : - premier sommet visité ouvert en rouge ; - autres sommets visités ouverts en vert.1 324
7659

8Exemple de parcours

en largeur (1) (1,2) (1,2,4) (1,2,4,3) (1,2,4,3,8) (1,2,4,3,8,6) (1,2,4,3,8,6,9) (1,2,4,3,8,6,9,5) (1,2,4,3,8,6,9,5,7)Après chaque étape : - dernier sommet visité ouvert en rouge ; - autres sommets visités ouverts en vert.1 324
7659

8Exemple de parcours

en profondeur

Récapitulatif(graphe orienté)

La bordure B(T) d'un sous-ensemble T de sommets est constituée de l'ensemble des sommets de S-T dont au moins un prédécesseur est dans T. Parcours : rangement L = (s1,...,sn) des sommets du graphe où tout sommet si R B({s1,...,si-1}) ou B({s1,...,si-1}) = Ø Un sommet si tel que B({s1,...,si-1}) = Ø est un point de régénération (par convention, s1 est un point de régénération) On choisit pour chaque sommet sj (non point de alors pèreL(sj) le prédécesseur de sj choisi. Le graphe partiel de G formé des arcs (pèreL(sj),sj) est une forêt couvrante de G notée F(L).

Récapitulatif(graphe orienté)

Un sommet si est dit ouvert dans {s1,...,sk} si il comporte un successeur dans S - {s1,...,sk}. Parcours en largeur : tout sommet si (non point de régénération) est successeur du premier sommet ouvert dans {s1,...,si-1}. Parcours en profondeur : tout sommet si (non point de régénération) est successeur du dernier sommet ouvert dans {s1,...,si-1}. A un parcours en largeur ou en profondeur correspond une unique forêt couvrante. Algorithme de parcours en profondeur(graphe orienté)

Procédure Prof(G)

début pour chaque sommet de s de G faire visité[s] := faux ; pour chaque sommet s de G faire si non visité [s] alors Explorer(s) ; fin

Procédure Explorer(G,s)

début visité[s] := vrai ; prévisite(s) ; pour chaque t successeur de s faire { action sur l'arc (s,t) ; si non visité[t] alors Explorer(G,t) ; postvisite(s) ; fin A la fin de l'algorithme, on a visité[v]=vrai pour tout sommet v accessible à partir de s. Les procédures prévisite et postvisite sont optionnelles, et correspondent à des opérations qu'on réalise quand l'appel récursif sur un sommet débute, et quand il se termine.

Prévisite et postvisite

Pour chaque sommet s, on va noter les moments de deux

événements importants :

-Le moment du début de l'appel récursif Explorer(s) -Le moment de la fin de l'appel récursif Explorer(s) Propriété. A l'issue du parcours en profondeur, pour tout couple (s1,s2) de sommets : - soit les deux intervalles [pre(s1),post(s1)] et [pre(s2),post(s2)] sont disjoints, - soit l'un est contenu dans l'autre.Procédure prévisite(s) pre[s] := num num := num + 1Procédure postvisite(s) post[s] := num num := num + 1 (num est une variable globale initialisée à 1)

Exemple

Les arcs en pointillés n'appartiennent pas à la forêt sous-jacente.

Analyse de complexité

On suppose une représentation du graphe G par des listes de successeurs Il y a un appel récursif Explorer(s) par sommet s, du fait du tableau visité Lors d'un appel récursif Explorer(s), il y a les pas suivants :

1. Des opérations en temps constants + opérations de

pré/postvisite

2. Une boucle qui scanne les arcs issus de s

-La complexité cumulée du pas 1, en comptant tous les appels récursifs, est O(n) où n le nb de sommets, puisque chaque sommet est visité une seule fois -La complexité cumulée du pas 2, en comptant tous les appels récursifs, est O(m) où m le nb d'arcs de G, puisque chaque arc du graphe G est examiné une fois La complexité globale de l'algorithme est donc O(n+m) Remarque : la complexité cumulée en O(m) du pas 2 est liée à l'utilisation de listes de successeurs Soit L=(s1,s2,...,sn) un parcours en profondeur de G .

Soit F(L) sa forêt sous-jacente.

Les arcs de G sont classés en 4 groupes :

1)les arcs de F(L) ;

2)les arcs 'avant' (si,sj) : sj est un descendant de si dans F(L) ;

3)les arcs 'arrière' (si,sj) : si est un descendant de sj dans F(L) ;

4)les arcs 'transverses' (si,sj) : tous les autres arcs. Arcs associée à un parcours en profondeur

A B

CDarc (u,v)

F(L) / arc 'avant'

arc 'arrière' arc transversegroupe [3,4][1,8] [2,7] [5,6]

Existence d'un circuit

Problème :

Soit G= (S,A) un graphe.

Existe t-il un circuit dans G ?

Existence de circuit :

Soit L=(s1,s2,...,sn) un parcours en profondeur de G et soit F(L) sa forêt sous-jacente. G est sans circuit si et seulement s'il n'existe pas d'arc arrière pour L.

Graphe sans circuit → pas d'arc arrière

Par contraposée : si il existe une arête arrière (u,v), on construit un circuit en concaténant (u,v) et le chemin de v à u dans F(L) u v

Lemme des sommets accessibles

Soit L=(s1,s2,...,sn) un parcours en profondeur de G. Tous les sommets de {si+1,...,sn} accessibles à partir de si dans G seront ses descendants dans F(L).Graphe avec circuit → arc arrière Soit C=(s1,...,sk), un circuit dans G. Soit si le premier sommet de C visité dans le parcours en profondeur. D'après le lemme des sommets accessibles, les autres sommets de C sont des descendants de si dans F(L).

Donc (si-1,si) est un arc arrière.

12 34
5678

9C=(5,6,7,8)

6 visité en 1er

(5,6) arc arrière

Algorithme de détection de circuit

Algorithme de détection de circuit

Pour détecter s'il existe un circuit dans un graphe il suffit donc de faire un parcours en profondeur de ce graphe et détecter si l'on trouve un arc arrière.

Détection d'un arc arrière

A l'issue du parcours en profondeur, on parcourt les listes de successeurs (en O(n+m)) pour détecter si il existe un arc (u,v) tel que post(u)F(L) / arc 'avant' arc 'arrière' arc transversegroupe

3,42,54,6

1,7 uv12,15

9,168,17

10,11 (les numérotations pré/postfixe sont indiquées sur le graphe)13,14 Tri topologiqueRappel : un tri topologique de G est un rangement des sommets de G tel que v figure après u pour tout arc (u,v) de G. Un tri topologique est obtenu en rangeant les sommets dans l'ordre inverse de la numérotation postfixe d'un parcours en profondeur. Ce rangement peut être obtenu en O(n+m) à l'aide d'une pile sur laquelle on empile chaque sommet s lorsque l'appel récursif

Explorer(G,s) se termine.

Propriété

Dans un graphe orienté sans circuit, pour tout arc (u,v), post(u)>post(v).

1,7deab

c df gh efhdgabcd

171615141176542,5

3,45,6

8,179,16

10,1112,15

13,14 (pour chaque sommet s, post(s) est indiqué en rouge)tri topologiquequotesdbs_dbs44.pdfusesText_44
[PDF] théorie des graphes python

[PDF] parcours en largeur graphe

[PDF] parcours en profondeur itératif

[PDF] algorithme parcours en profondeur python

[PDF] parcours en largeur graphe java

[PDF] conflit de puissance définition

[PDF] parcours lecture acces pas cher

[PDF] parcours lecture pdf

[PDF] parcours lecture le petit chaperon rouge

[PDF] parcours lecture acces avis

[PDF] parcours lecture occasion

[PDF] coexistence pacifique cours

[PDF] archives militaire en ligne

[PDF] livret militaire en ligne

[PDF] la coexistence pacifique de 1953 ? 1962 pdf