Sommaire ALGORITHMES POUR LES GRAPHES • Chap. 1 – Concepts de Base sur les Graphes • Chap.2 - Chemins • Chap. 3 – Arbres couvrants • Chap. 4 – Flots © L. B. Romdhane Ph.D. ISITCom / U. de Sousse / Tunisie © L. B. Romdhane; ISITCom MRID - Graph Algorithms 2 Sommaire GRAPHES: NOTIONS DE BASE © L. B. Romdhane Ph.D. • • • • Introduction Représentation Notions relatives aux nœuds Traversée – DFS – BFS ISITCom / U. de Sousse / Tunisie © L. B. Romdhane; ISITCom MRID - Graph Algorithms 4 Concepts de base (1) Concepts de base (2) • Un graphe est un ensemble d’objets (appelés nœuds) et un ensemble de relations entre les objets (appelées liens) • Les arêtes peuvent être orientées ou nonorientées • Graphe orienté : tous ses liens sont orientés. Ils sont appelés arcs • Graphe non-orienté : tous ses les liens sont non-orientées. Ils sont appelés arêtes • Graphe mixte : il y a des liens orientés (arcs) et des liens non-orientés (arêtes) Molécule • Objets = éléments chimiques •O, OH • Relations : liaisons © L. B. Romdhane; ISITCom MRID - Graph Algorithms 5 Concepts de base (3) © L. B. Romdhane; ISITCom MRID - Graph Algorithms 6 Concepts de base (4) • Facebook – Noeuds • personnes – Liens • amie-de Site web © L. B. Romdhane; ISITCom MRID - Graph Algorithms L7 © L. B. Romdhane; ISITCom MRID - Graph Algorithms 8 Concepts de base (5) Concepts de Base (6) • Graphe pondéré : les liens (arêtes ou arcs) et/ou les nœuds portent des informations – durée / coût pour un vol aérien – capacité de transmission pour une connexion réseau Réseau routier © L. B. Romdhane; ISITCom MRID - Graph Algorithms 9 Concepts de base (7) © L. B. Romdhane; ISITCom MRID - Graph Algorithms 10 Représentation (1) • Un graphe est un quadruple G(V, E, µ, λ) : – V : ensemble des nœuds – E ⊆ V x V : ensemble des liens – µ : V → LV : définit les étiquettes des nœuds – λ: E → LE : définit les étiquettes des liens © L. B. Romdhane; ISITCom MRID - Graph Algorithms 11 © L. B. Romdhane; ISITCom MRID - Graph Algorithms 12 Représentation (2) Représentation (3) • CONST N = …. • TYPE GRAPHE = tableau[N, N] d’entiers © L. B. Romdhane; ISITCom MRID - Graph Algorithms 13 Représentation (4) © L. B. Romdhane; ISITCom MRID - Graph Algorithms 14 Représentation (5) • CONST N = …. • TYPE nodeList = Structure Voisin : entier Suiv : * nodeList FinStructure GRAPHE = tableau[N] de *nodeList © L. B. Romdhane; ISITCom MRID - Graph Algorithms 15 © L. B. Romdhane; ISITCom MRID - Graph Algorithms 16 Voisinage & Degré (1) • Un nœud w est dit voisin d’un nœud v ssi il existe un lien de v vers w (orienté ou non) • Dans un graphe G(V, E); on a: Voisinage (x) = { w ∈ V / (x, w) ∈ E} NOTIONS RELATIVES AUX NOEUDS Voisinage(g) = {d, r, n} Voisinage (n) = {r, d, g, j} © L. B. Romdhane; ISITCom MRID - Graph Algorithms 17 Voisinage & Degré (2) MRID - Graph Algorithms MRID - Graph Algorithms 18 Voisinage & Degré (3) • On appelle degré d’un nœud le nombre des liens incidents sur v Degre (v) = nombre de liens incidents sur v • Dans un graphe orienté, on distingue deux mesures de degrés Voisinage(A) = {B} Voisinage (E) = {D, F} Voisinage (F) = ∅ © L. B. Romdhane; ISITCom © L. B. Romdhane; ISITCom 19 – Degré entrant d in (v ) = w /( w; v) ∈ E – Degré sortant d out (v ) = w /(v; w) ∈ E © L. B. Romdhane; ISITCom MRID - Graph Algorithms 20 Voisinage & Degré (3) Traversée d’un graphe • Traverser un graphe revient à visiter ses nœuds et ses arêtes efficacement – exécuter un algorithme dans chaque visite d in (E ) = 1 d (r ) = 4 © L. B. Romdhane; ISITCom • Deux grandes stratégies de parcours – DFS (Depth-First Search) : en profondeur d’abords d out (E ) = 2 MRID - Graph Algorithms – BFS (Breadth-First Search) : en largeur d’abords 21 © L. B. Romdhane; ISITCom DFS (1) MRID - Graph Algorithms 22 DFS (2) • Principe général A – Commencer la traversée à partir d’un nœud initial A B (2) B (1) D Choix des nœuds : ordre alphabétique décroissant D G G • une stratégie de choix pour le nœud initial – Récursivement explorer tous ses nœuds adjacents F F C C • nœuds adjacents sont les voisins directs • on doit avoir une stratégie pour choisir l’ordre d’exploration des nœuds adjacents D D (4) (3) B B G G F F C C MRID - Graph Algorithms A A – Marquer les nœuds/liens visités – Arrêt : il n’ya plus de nœuds à explorer © L. B. Romdhane; ISITCom E E 23 © L. B. Romdhane; ISITCom E E MRID - Graph Algorithms 24 DFS (3) DFS (4) D D A A (6) B (5) D D A A B G G B B (10) G (9) G F F C C ARRET A B (7) G F C (8) B G F E C MRID - Graph Algorithms E 25 1. Exécutée à partir du nœud A, l’algorithme DFS : • a pu joindre les nœuds: F, B, C, D • les nœuds E, G restent injoignables 2. On peut reprendre l’exécution de l’algorithme à partir de E © L. B. Romdhane; ISITCom MRID - Graph Algorithms DFS (5) DFS-Analyse (1) PROCEDURE DFS (G : Graphe, s : sommet) DEBUT • Théorème 1 • Théorème 2 POUR CHAQUE nœud v ∈ Voisins(s) FAIRE – Soit G(V, E) un graphe avec n nœuds et m arêtes sur lequel on a effectué un DFS à partir d’u nœud w0. Le DFS visite tous les liens du graphe connexe de w0; et les liens visités forment un arbre maximal de G (graphe connexe acyclique) SI NonMarqué(v) alors DFS(G,v) FinSi FinPour FIN. MRID - Graph Algorithms 26 – Soit G(V, E) un graphe avec n nœuds et m arêtes implémenté avec la liste d’adjacence, alors l’algorithme DFS s’effectue en un temps O(n + m) Marquer(s); // pour éviter de le revisiter © L. B. Romdhane; ISITCom E E D A © L. B. Romdhane; ISITCom E E D F F C C 27 © L. B. Romdhane; ISITCom MRID - Graph Algorithms 28 DFS-Analyse (2) DFS-Analyse (3) • Théorème – Soit G(V, E) un graphe avec n nœuds et m arêtes implémenté avec la liste d’adjacence, alors il existe aussi des variantes du DFS s’effectuant en un temps O(n + m) pour : G F C E D A B G • Déterminer toutes les composantes connexes de G – exécuter plusieurs fois le DFS à partir d’un nœud non visité Composantes connexes F C • Déterminer le(s) chemin(s) entre deux nœuds MRID - Graph Algorithms A B • Tester la connectivité de G © L. B. Romdhane; ISITCom D Arbre DFS 29 BFS (1) E © L. B. Romdhane; ISITCom 30 MRID - Graph Algorithms BFS (2) 0 0 • Principe général D D A 1 A B – Commencer la traversée à partir d’un nœud initial B G G 1 F – A partir d’un nœud donné, explorer en même temps, C F E C 1 E tous ses nœuds adjacents 2 0 – Marquer les nœuds/liens visités A B G 1 31 F 1 G 1 C © L. B. Romdhane; ISITCom D 1 B – Arrêt : il n’ya plus de nœuds à explorer MRID - Graph Algorithms A 1 – Numéroter les nœuds visités par niveau © L. B. Romdhane; ISITCom 2 0 D E MRID - Graph Algorithms F 1 C E 32 BFS (3) BFS (4) PROCEDURE BFS (V, E, s) DEBUT pour chaque noeud u dans V − {s} faire color[u] ← WHITE ; d[u] ← infinity : π[u] ← NIL fin pour color[s] ← GRAY; d[s] ← 0 ; π[s] ← NIL ; Q ← créer_file( ); enfiler(s, Q) tant que NON(file_vide(Q)) faire u ← defiler(Q) pour chaque v adjacent à u faire si (color[v] = WHITE) alors Color[v] ← GRAY; d[v] ←d[u] + 1; π[v] ← u; enfiler(Q,v) finsi finpour color[u] ← BLACK fin tantque FIN © L. B. Romdhane; ISITCom MRID - Graph Algorithms 33 BFS (5) © L. B. Romdhane; ISITCom © L. B. Romdhane; ISITCom MRID - Graph Algorithms 34 MRID - Graph Algorithms 36 BFS (6) MRID - Graph Algorithms 35 © L. B. Romdhane; ISITCom BFS-Analyse • Théorème – Soit G(V, E) un graphe avec n nœuds et m arêtes implémenté avec la liste d’adjacence, alors l’algorithme BFS s’effectue en un temps O(n + m) • Théorème – Soit G(V, E) avec n nœuds et m arêtes sur lequel on a effectué un BFS à partir de w0; alors: • Les liens marqués « finis » forment un arbre maximal T du graphe connexe de w0 • Pour chaque nœud v à un niveau i , le chemin dans T entre v et w0 est minimal (en terme du nombre d’arêtes) et possède i liens © L. B. Romdhane; ISITCom MRID - Graph Algorithms 37