La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

Chapitre VIII. Introduction aux graphes Définitions Structures de données Connexité Arbre couvrant de poids minimal Parcours des graphes orientés.

Présentations similaires


Présentation au sujet: "Chapitre VIII. Introduction aux graphes Définitions Structures de données Connexité Arbre couvrant de poids minimal Parcours des graphes orientés."— Transcription de la présentation:

1 Chapitre VIII. Introduction aux graphes Définitions Structures de données Connexité Arbre couvrant de poids minimal Parcours des graphes orientés

2 Définitions Graphes orientés Un graphe orienté : - ensemble des sommets - ensemble des arcs : relation binaire sur N Exemple : N=?, A=?

3 Arcs et sommets - lextrémité initiale (début) - lextrémité terminale (fin) est un prédécesseur de est un successeur de

4 Etiquettes Le nom dun sommet doit être unique dans un graphe Plusieurs sommets peuvent avoir la même étiquette 12 Anne Claude Est fille de

5 Chemins Un chemin dans un graphe orienté est une liste La longueur dun chemin est k-1 = nbr arcs faisant partie du chemin Le cas trivial k=1: tout sommet n isolé est un chemin de longueur zéro de n à n

6 Graphes cycliques et acycliques Un cycle dans un graphe orienté est un chemin de longueur 1 ou plus qui part et aboutit au même sommet Un chemin trivial (l=0) nest pas un cycle Une chemin composé dun seul arc est un cycle de longueur 1 Si un graphe a un ou plusieurs Cycles on lappelle « graphe cyclique » Sinon « acyclique »

7 Problème Dans un graphe orienté- itinéraire représenté sous forme dune liste simplement chainée supprimer tous les cycles

8 Graphes non-orientés Une arête est un ensemble de deux sommets Larête indique que les sommets sont liés dans deux directions Les sommets sont dits adjacents Un graphe ayant des arêtes, cest –à-dire possédant une relation symétrique des arcs est appelé un graphe non-orienté

9 Structures de données (1) Listes dadjacence Type Liste =^maillon Maillon=Enregistrement IdNoeud : Nœud {entier- pour simplifier} Suivant: Liste Fin Nœuds : tableau[1…N] de Liste

10 Exemple Graphe orienté

11 Matrice dadjacence arcs : tableau[1..N][1..N] de Booléen

12 Représentation dun graphe non- orienté Principe : remplacer chaque arête par les arcs allant dans deux directions, matrice dadjacence est symétrique Transformer le GO en GNO!

13 Connexité(1) Composante connexe : ensemble de sommets pour lesquels il existe un chemin entre tout sommet et nimporte quel autre sommet Une composante connexe est maximale : aucun sommet faisant partie dune composante connexe ne possède un chemin vers un sommet en dehors de la composante connexe Si un graphe consiste en une seule composante connexe, alors on lappelle graphe connexe

14 Connexité(2) Connexité est une relation déquivalence définie sur les sommets du graphe non-orienté P : n i Pn j ssi il existe un chemin de n i vers n j 1) Réflexive : nPn pour tout sommet n puisquil existe un chemin de longueur 0 entre tout sommet et lui-même 2) Symétrique : si n i Pn j alors il existe un chemin de n i vers n j. Puisque le graphe est non-orienté, la séquence inverse de sommets est aussi un chemin. Donc n j Pn i 3) Transitive : si n i Pn j et n j Pn k alors n i Pn j.

15 Algorithme pour construire les composantes connexes(1) Principe : - Commencer par le graphe G0 composé des sommets de G avec aucune arête. - Considérer les arêtes de G une par une pour construire une séquence des graphes G0, G1, G, … où Gi est composé des sommets de G et des i premières arêtes de G

16 Algorithme pour construire les composantes connexes(2) La base : la liste des arêtes non-utilisées est vide Initialisation. G 0 est seulement composé des sommets de G sans arêtes. Chaque sommet est une composante connexe. La récurrence. On suppose quon a les composantes connexes du graphe Gi après avoir considéré les i premières arêtes. Considérons i+1 ère arête ( n i, n j ) 1. Si n i et n j font partie de la même composante de G i, alors G i+1 a le même ensemble des composantes connexes. 2. Si n i et n j font partie de composantes différentes, on fusionne les composantes contenant n i et n j afin dobtenir les composantes connexes pour G i+1 Lorsquon a considéré toutes les arêtes de cette manière, on obtient les composantes connexes du graphe G

17 Construction des composantes connexes (2) Problèmes à résoudre : (1) Etant donné un sommet, trouver sa composante courante (2) Fusionner deux composantes en une seule Choix de structures de données : chaque composante connexe dun graphe sera représentée par un arbre. Le résultat de lalgorithme : une forêt des arbres

18 Construction des composantes connexes(3) Deux polygones sont considérés adjacents ssi ils ont une arête commune

19 Construction des composantes connexes(4) O J BC Ve R Vi B Ro

20 Construction des composantes connexes(5) Liste des arêtes N°arêteN1N2

21 Structures de données(1) -Liste dadjacence -Liste des arêtes. -Liste des nœuds dun arbre Type ListeArêtes = ^Arête Arête = Enregistrement noeud1, noeud2 : TypeNoeud Suivant : ListeArêtes FinEnregistrement Arêtes : ListeArêtes Tout sommet du graphe doit posséder un nœud darbre correspondant TypeNœud peut être une étiquette de nœud (entier)

22 Structures de données(2) Type PtrNoeudArbre = ^NoeudArbre NoeudArbre = Enregistrement père : PtrNoeudArbre hauteur: entier Fin Enregistrement Nœuds: Tableau[1..n] de PtrNoeud Ce tableau associe un nœud dans un arbre général à chaque sommet du graphe

23 Fonctions auxiliaires (1)Fonction TrouveRacine( a: nœud): PtrNoeudArbre { renvoie la racine de larbre contenant le nœud x correspondant au sommet courant du graphe} Var Racine, Courant : PtrNoeudArbre; Début Racine : = nœuds[a]; TQ Racine.père<>NIL faire –Racine:=Racine^.père; FTQ Retourner Racine FinTrouveRacine

24 Fonctions Auxiliaires (2) (2)Procédure FusionArbres(x,y,: PtrNoeudArbre) {fusionne les arbres dont les racines sont x et y, en faisant devenir racine du plus bas le descendant de la racine du plus haut} Var pbas, phaut : PtrNoeudArbre Début Si x^.hauteur>y^.hauteur alors phaut:=x pbas=:=y sinon phaut:= y pbas:=x FSi pbas^.père:= phaut; Si pbas^.hauteur = pahaut^.hauteur alors phaut^.hauteur:=phaut^.hauteur+1 FSI FinFusionArbres

25 Algorithme de construction des composantes connexes Soient G – le graphe contenant n sommets, e: sa liste des arêtes « arêtes » 1) Initialiser n arbres 2)Pour toutes les arêtes dans la liste : Si les extrémités sont dans deux arbres différents, fusionner les composantes- arbres.

26 Algorithme de construction des composantes connexes(2) Procédure CompCon(réf Noeuds : Tableau [1..n]de PtrNoeuds; arêtes : ListeArêtes) Var u:TypeNoeud a,b: PtrNoeudArbre e:ListeArêtes Pour u de 1 à n faire new(Noeuds[u]) Nœuds[u].père:=NIL Nœuds[u].hauteur:=0; FPour e:=arêtes TQ e<>NIL faire a:=TrouveRacine(e^.noeud1) b:=TrouveRacine(e^.noeud2) Si a<>b alors FusionArbres(a,b); FSi E:=e^.suivant FTQ FinCompCon

27 Analyse Après lexécution le tableau « Nœuds » code les arbres- composantes-connexes. Temps dexécution (1) FusionArbre : le chemin de nimporte quel nœud dun arbre construit par la procédure FusionArbre : le temps est inférieur à log(n). Alors TrouveRacine prend un temps en O(log(n)) (2) Procédure FusionArbres : O(1) (2)Initialisation (boucle Pour) O(n) (3)Boucle while : O(mlog(n)), m – nombre des arêtes O(n+mlog(n)) En général donc O(n+mlog(n)) –cas spécifiques - absence des arêtes O(n) - fortement connexe O(mlog(n))

28 Arbre couvrant de poids minimal Soit W={w i,j } lensemble des « poids » des arêtes du graphe G. Nous allons nous limiter aux graphes connexes Un arbre couvrant (non-ordonné, sans racine = un graphe non-orienté nayant pas de cycles) Un arbre couvrant pour un graphe non-orienté G est composé des sommets de G avec un sous-ensemble des arêtes de G qui –relient les sommets : il existe un chemin entre tous les sommets, pris deux par deux, en prenant uniquement les arêtes de larbre couvrant –forment un arbre sans racine, non-ordonné Un arbre couvrant de poids minimal: la somme des poids des arêtes est la plus petite que possible

29 Algorithme de Kruskal 1. Considérer les arêtes dans lordre croisant de leurs poids 2. Considérant les arêtes, Si une arête possède ses deux extrémités dans des composantes différentes, alors –on sélectionne cette arête pour larbre couvrant et on fusionne les composantes de la même façon que dans lalgorithme de construction des composantes connexes. sinon –on ne sélectionne pas larête pour larbre couvrant.

30 Parcours des graphes orientés(1) Recherche en profondeur (dfs) Principe : similaire au parcours en profondeur des arbres. Pb : existence des cycles ( possibilité de boucler à linfini!) Solution : marquer les sommets visités Structures de données : Graphe : tableau de sommets avec des listes dadjacence

31 Parcours des graphes orientés(2) Type Liste =^maillon Maillon=Enregistrement IdNoeud : Nœud {entier} Marque: (visité, non-visité) Suivant: Liste Fin Graphe : tableau[1…N] de Liste

32 Parcours des graphes orientés(3) Parcours en profondeur Procédure dfs(G: Graphe; u: entier){numéro du nœud ) Var p:Liste {liste dadjacence du nœud u} V: entier {sommet dans la cellule sur lequel pointe p} Début G[u].Marque:=Visité p:=G[u].suivant TQ p<>NIL faire v:=p^.IdNoeud Si G[v].Marque:=Non-visité alors dfs(v) FSi p:=p^.suivant FTQ Findfs Le temps dexécution est proportionnel au nombre des arcs explorés. Version itérative :utilisation dune pile de parcours

33 Parcours des graphes orientés(4) Parcours en largeur : visiter dabord tous les voisins du sommet courant qui nont pas été marqués Procédure bfs( G : graphe, u:entier) Var v,w,i: entiers F: file Début F:=file-vide; G[u].Marque:=Visité Enfiler(F,u) TQ non est-vide(F) faire v: = premier(F); Defiler(F); p:=G[v].suivant TQ p<>NIL faire w:=p^.IdNoeud Si G[w].Marque:=Non-visité alors G[w].Marque=Visité Enfiler(F,w) FSi FTQ Finbfs


Télécharger ppt "Chapitre VIII. Introduction aux graphes Définitions Structures de données Connexité Arbre couvrant de poids minimal Parcours des graphes orientés."

Présentations similaires


Annonces Google