Les graphes

download Les graphes

of 31

  • date post

    22-Feb-2016
  • Category

    Documents

  • view

    64
  • download

    1

Embed Size (px)

description

Les graphes. Pr ZEGOUR Djamel Eddine. Les graphes. Introduction. Les graphes sont des modèles pour représenter des relations entre objets( G raphe orienté ). C. B. Si les relations sont symétriques, on parlera de graphe non orienté. I. A. D. E. - PowerPoint PPT Presentation

Transcript of Les graphes

Les piles

Pr ZEGOUR Djamel EddineLes graphesLes graphesIntroductionLes sommets d'un graphe peuvent par exemple reprsenter des objets et les arcs des relations entre objets. Les graphes sont des modles pour reprsenter des relations entre objets(Graphe orient)BAEIGCDHFSi les relations sont symtriques, on parlera de graphe non orientLes graphesGraphes orientsA chaque couple(u, v) est associ un arc u-->v. Nous dirons que u est adjacent v. Ensemble de couples (u, v), u et v appartiennent un ensemble de sommet( ou de nuds). u est appel la tte et v la queue.Un chemin est la squence v1, v2, ...vn de sommets tels que v1v2, v2 v3, ...vn-1 vn sont des arcs. Longueur dun chemin : nombre d'arcs qui le composent. Un chemin simple : tous les nuds, sauf ventuellement le premier et le dernier, sont distincts.Graphe tiquet : Attribuer des valeurs aux arcsCircuit: chemin simple tel que v1=vnLes graphesGraphes orientsFormellement, soit G=(V, E) un graphe. On peut partitionner V en classes d'quivalence C1, C2, ...CrComposante fortement connexe d'un graphe est compos de l'ensemble maximal de nuds dans lequel il existe un chemin de tout nud de l'ensemble vers chaque autre nud de l'ensemble. v equiv w Il existe un chemin de v w et un chemin de w v.Classe dquivalence = Composante fortement connexe Un graphe est dit fortement connexe s'il a une seule composante fortement connexe.Les graphesGraphes non orientsOn parlera de Chaine au lieu de chemin, Cycle au lieu de circuit,. Graphe connexe, etc.Ensemble de paires ou d'artes(u, v). Chaque arte (u, v) reprsente en fait les deux arcs u-->v et v-->u.Arbre : Graphe non orient connexe sans cycle.Les graphesMachine abstraiteCrerNoeud(G, u) Crer un nud u du graphe G.Liberernoeud(G, u)Librer le nud dadresse u du graphe G.CreerArc(u, v, info)Crer un arc de u vers v avec linformation infoLibererArc(u, v)Librer larc de u vers vInfo(u)Info rattache au nud uAff_info(u, info)Affecter la valeur info au nud uArc(u, v)Info rattache larc u vAff_arc(u, v, info)Affecter la valeur info larc u - vAdjacent(u, i)Accs au I-me nud adjacent uDegre(u)Nombre de nuds adjacents uNoeudGraphe ( G, i )Accs au I-me nud du graphe GNbreGraphe ( G )Nombre de nuds du graphe GLes graphesParcours des graphesCest le parcours le plus utilis sur les graphesDFS : Depht First Search ( Recherche en profondeur d'abord )C'est la gnralisation du parcours Prordre sur les arbresLes graphesDFS : principeInitialement tous les nuds sont marqus " non visits".Choisir un nud v de dpart et le marquer " visit". Chaque nud adjacent v, non visit, est son tour visit en utilisant DFS rcursivement. Une fois tous les nuds accessibles partir de v ont t visits, la recherche de v ( DFS(v) ) est complte.Si certains nuds du graphe restent "non visits", slectionner un comme nouveau nud de dpart et rpter le processus jusqu' ce que tous les nuds soient visits.Les graphesDFS : Algorithme Dfs(v):Mark(v) := "visit"Pour i:=1, Degre(v)Si Mark(Adjacent(v, i)) = " non visit" Dfs(Adjacent(v, i))FsiFinpourLes graphesDFS : AlgorithmeInitialisation :Pour i:=1, Nbregraphe(G)Mark(Noeudgraphe(G, i)):=" non visit " FinpourAppelant :Pour v =1, Nbregraphe(G) Si Mark(Noeudgraphe(G, i)) ="non visit" DFS(Noeudgraphe(G, i)) Fsi FinpourL'algorithme construit une fort (implicite) de recouvrement des recherches.Les graphesDFS : ExempleBAEIGCDHFFG12H1Choisir AChoisir FChoisir HABDECI213546Les graphesParcours des graphesCest le parcours le moins utilis sur les graphesBFS : Breadh First Search ( Recherche en largeur)C'est la gnralisation du parcours niveau par niveau dfini sur les arbresLes graphesBFS : principeInitialement tous les nuds sont marqus " non visits".Choisir un nud v de dpart et le marquer " visit". Chaque nud adjacent v, non visit, est son tour visit en utilisant BFSUne fois tous les nuds accessibles partir de v ont t visits, la recherche de v ( BFS(v) ) est complte Si certains nuds du graphe restent "non visits", slectionner un comme nouveau nud de dpart et rpter le processus jusqu' ce que tous les nuds soient visits.Les graphesBFS : Algorithme BFS(v):Mark(v) := "visit"CreerFile(F) ; Enfiler(F, v)Tantque Non Filevide(F) : Dfiler(F, v) Pour i:=1, Degre(v) Si Mark(Adjacent(v, i))="non visit" Mark(Adjacent(v, i)):="visit" Enfiler(F, w) [Inserer( v-->w , Arbre )] Fsi FinpourFintantqueLes graphesBFS : Algorithme :Initialisation :Pour i:=1, Nbregraphe(G)Mark(Noeudgraphe(G, i)):=" non visit " FinpourAppelant :Pour v =1, Nbregraphe(G) Si Mark(Noeudgraphe(G, i)) ="non visit" BFS(Noeudgraphe(G, i)) Fsi FinpourL'algorithme construit une fort (implicite) de recouvrement des recherches.Les graphesBFS : ExempleBAEIGCDHFABDECI213456FG12H1Choisir AChoisir FChoisir HLes graphesGraphes : Application 1 Dtermination du plus court chemin ( Algorithme de Dijkstra)Soit G = (V, E) un graphe o V est l'ensemble des nuds et E l'ensemble des arcs. Chaque arc a une valeur positive. Soit S un nud quelconque. Le problme consiste dterminer le cot du plus court chemin de S vers tous les autres nuds de G ( longueur d'un chemin = somme des cots des arcs sur ce chemin)G peut tre par exemple, une carte de vols ariens, dans laquelle les nuds reprsentent les villes et chaque arc u-->v reprsente la ligne arienne de u vers v.

La valeur de l'arc est donc le temps de vol de u vers v.Les graphesGraphes : Application 1 Dtermination du plus court chemin ( Algorithme de Dijkstra)Considrations:Soient V = { 1, 2, ..., n} et S = {1}.

C[1..n, 1..n] tableau de cots tel que C[i, j] est le cot de l'arc ij sinon c'est l'infini.

D[2..n] : distances du nud 1 tous les autres nuds.

Le tableau D contiendra aprs excution, les plus courtes distances de S vers tous les autres nuds.Les graphesGraphes : Application 1 Dtermination du plus court chemin ( Algorithme de Dijkstra){Initialisation des distances de S vers tous les autres nuds}Pour i=2, n : D[i] := C[1, i] Finpour

Pour i=1, n-1. Choisir un nud w dans V-S tel que D[w] est minimale.. Ajouter w S. Pour chaque nud v dans V-S D[v]=Min(D[v],D[w]+C[w,v])FinpourFinpourLes graphesGraphes : Application 1 Dtermination du plus court chemin ( Algorithme de Dijkstra)ExempleS {1} {1,2} {1,2,4} {1,2,4,3} {1,2,4,3,5}w -2435D[2 ] 1010101010D[3]60505050D[4]3030303030D[5]100100906060

Les graphesGraphes : Application 2 Problme du Voyageur du Commerce (PVC)Un cycle Hamiltolnien dans un graphe non orient est un chemin incluant tous les nuds du graphe. Le PVC consiste trouver dans un graphe tiquet non orient un cycle Hamiltolnien de poids minimal.En dautres termes :

tant donn n cits avec des distances entre chacune d'entre elles. Trouver un cycle Hamiltonien de poids minimal.Les graphesGraphes : Application 2 PVC (Algorithme de Krustal)Algorithme1. Trier toutes les artes( il existe Cn2 )

2. Prendre les artes une une dans l'ordre en considrant les deux conditions suivantes :- Aucun sommet ne doit avoir un degr suprieur 2.- Le seul cycle form est le cycle final, quand le nombre d'artes acceptes est gal au nombre de sommets du graphe.Les graphesGraphes : Application 2 PVC (Algorithme de Krustal)Exemple6 villes avec les coordonnes suivantes :a=(0, 0)b=(4, 3)c=(1, 7)d=(15, 7)e=(15, 4)f=(18, 0)Il existe 6! = 720 permutations. Par contre seulement 15 artes ( ab, ac, ad, ae, af, bc, be, bd, be, bf, ...).Les graphesGraphes : Application 2 PVC (Algorithme de Krustal)ScnarioChoix de l'arte (d, e) car elle a une longueur gale 3, la plus courte.On examine ensuite les artes (b, c), (a, b) et (e, f) de poids 5.(ordre quelconque). Elles sont toutes les 3 acceptables conformment aux critres 1. et 2.La prochaine arte la plus petite est (a, c) de poids 7,08. Comme elle forme un cycle avec(a, b) et (c, d) elle est rejete.L'arte (d,e) est carte dans les mmes conditions.Les graphesGraphes : Application 2 PVC (Algorithme de Krustal)Scnario (suite)L'arte (b, e) est son tour carte car elle porte le degr de b et e 3.Idem pour (b, d)L'arte suivante(c, d) est accepte.On a maintenant un chemin a->b->c->d->e->fL'arte (a, f) est accepte et ferme l'itinraire.Les graphesGraphes : Reprsentation mmoire1. MatriceSi V = {v1, v2, ..., vn} est l'ensemble des sommets, le graphe est reprsent par une matrice A[n, n] de boolens tels que A[i, j] est vrai s'il existe un arc de i vers j. Si le graphe est tiquet, A[i, j] reprsentera la valeur.2. Tableaux de listes linaires chanesLe graphe est reprsent par un tableau Tete[1..n] o Tete[i] est un pointeur vers la liste des sommets adjacents i.3. Liste de listes linaires chanesLe graphe est reprsent par une liste de nuds. Chaque nud pointe vers la liste des sommets qui lui sont adjacents.Les graphesGraphes : Reprsentation mmoire

Les graphesGraphes : Reprsentation mmoire (1)BADECv1v2v3v4v5.A2B1C0.D1E1v1v3.v4.v2.v5.5GrapheListe de listesLes graphesBADECv1v2v3v4v5A2B1C0.D1E1v1v3.v4.v2.v5.5GrapheListe de listesGraphes : Reprsentation mmoire (2).Les graphesImplmentation des graphes en PASCAL ( DYNAMIQUE /Liste de listes)

{ Noeud } Typenoeud = ^Elementnoeud; Elementnoeud = RECORD Valnoeud : INTEGER; { Valeur rattache au noeud } Degre : INTEGER; { Degr du noeud } List : Typelistearc; { Liste des noeuds adjacents contenant les valeurs des arcs } END;{ Listes } Typeliste = ^Elementliste; Elementliste = RECORD Element : Typenoeud; Suivant : Typeliste END; Typelistearc = ^Elementlistearc; Elementlistearc = RECORD Valarc : INTEGER; { Valeur rattache l'arc } Noeud : Pointer; Suivant : Typelistearc END; { Graphes } Typegraphe = ^Un_graphe; Un_graphe = RECORD Prem : Typeliste; Dernier : Typeliste; Nbr : INTEGER; END;Reprsentation mmoire (1)Les graphesImplmentation des graphes en C (DYNAMIQUE / Lis