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

Module 5 : Algorithmes de graphes. 19/7/2006Algorithmes de graphes2 Plan du module Arbre couvrant minimum Algorithme de Prim Algorithmes de plus court.

Présentations similaires


Présentation au sujet: "Module 5 : Algorithmes de graphes. 19/7/2006Algorithmes de graphes2 Plan du module Arbre couvrant minimum Algorithme de Prim Algorithmes de plus court."— Transcription de la présentation:

1 Module 5 : Algorithmes de graphes

2 19/7/2006Algorithmes de graphes2 Plan du module Arbre couvrant minimum Algorithme de Prim Algorithmes de plus court chemin Algorithme de Dijkstra Algorithme de Floyd Problème 10034

3 19/7/2006Algorithmes de graphes3 Arbre couvrant minimum Un arbre couvrant pour un graphe non- orienté G est composé de tous les sommets de G avec un sous-ensemble des arêtes de G qui Relient les sommets; il existe un chemin entre tous les sommets de larbre couvrant Forment un arbre sans racine, non ordonné, sans cycle.

4 19/7/2006Algorithmes de graphes4 Arbre couvrant minimum Un arbre couvrant minimum est un arbre couvrant dont la somme des étiquettes (valeurs attachées aux arêtes) est minimale.

5 19/7/2006Algorithmes de graphes5 Arbre couvrant minimum a c e d b a c e d b

6 19/7/2006Algorithmes de graphes6 Arbre couvrant minimum Algorithme de Prim Larbre est construit nœud après nœud partant dun nœud initial À chaque itération un nœud est ajouté à larbre couvrant On ajoute toujours le nœud reliant larbre avec larête de moindre poids

7 19/7/2006Algorithmes de graphes7 Arbre couvrant minimum a c e d b ABCDE intreeFFFFF distance parent a c e d b ABCDE intreeTFFFF distance0 parent

8 19/7/2006Algorithmes de graphes8 Arbre couvrant minimum a c e d b ABCDE intreeTFFFF distance0952 parentAAA Le nœud de départ est A. La table des distances et des parents est mise à jour pour tous les nœuds adjacents à A. On sélectionne parmi les nœuds restants celui relié par larête de plus petit poids.

9 19/7/2006Algorithmes de graphes9 Arbre couvrant minimum a c e d b ABCDE intreeTFFTF distance06424 parentDDAD Le nœud de départ est D. La table des distances et des parents est mise à jour pour tous les nœuds adjacents à D pas encore dans larbre. On sélectionne parmi les nœuds restants celui relié par larête de plus petit poids (ici C et E possibles).

10 19/7/2006Algorithmes de graphes10 Arbre couvrant minimum a c e d b ABCDE intreeTFTTF distance06424 parentDDAD Le nœud de départ est C. La table des distances et des parents est mise à jour pour tous les nœuds adjacents à C pas encore dans larbre. On sélectionne parmi les nœuds restants celui relié par larête de plus petit poids.

11 19/7/2006Algorithmes de graphes11 Arbre couvrant minimum a c e d b ABCDE intreeTFTTT distance05424 parentEDAD Le nœud de départ est E. La table des distances et des parents est mise à jour pour tous les nœuds adjacents à E pas encore dans larbre. On sélectionne parmi les nœuds restants celui relié par larête de plus petit poids.

12 19/7/2006Algorithmes de graphes12 Arbre couvrant minimum a c e d b ABCDE intreeTTTTT distance05424 parentEDAD Plus rien ne change. La table parent nous fournit larbre de couvrant minimum! a c e d b

13 19/7/2006Algorithmes de graphes13 Arbre couvrant minimum FOR i := 0 TO g.nvertices-1 DO BEGIN intree[i] := false; distance[i] := MAXINT; parent[i] := -1 END; distance[start] := 0; v := start; WHILE NOT intree[v] DO BEGIN intree[v] := true; FOR i := 0 TO g.degree[v]-1 DO BEGIN w := g.edges[v][i].v; weight := g.edges[v][i].weight; IF (distance[w] > weight) AND NOT intree[w] THEN BEGIN distance[w] := weight; parent[w] := v END END; v := start; dist := MAXINT; FOR i := 0 TO g.nvertices-1 DO BEGIN IF (NOT intree[i]) AND (dist > distance[i]) THEN BEGIN dist := distance[i]; v := i END

14 19/7/2006Algorithmes de graphes14 Algorithmes de plus court chemin Soit un graphe orienté ou non ayant des étiquettes sur les arêtes pour représenter leur « longueur ». On veut connaître la « distance » minimale entre deux sommets. En général, la distance minimale dun sommet u au sommet v est la distance minimum de tous les chemins de u à v.

15 19/7/2006Algorithmes de graphes15 Algorithme de Dijkstra Cest lalgorithme de choix pour trouver le chemin de distance minimum entre deux nœuds dun graphe. Cet algorithme calcule le plus court chemin entre un nœud donné et tous les autres dun graphe. Ne fonctionne que sur des graphes sans arêtes négatives.

16 19/7/2006Algorithmes de graphes16 Algorithme de Dijkstra Lidée de base est très semblable à lalgorithme de Prim. À chaque itération, on ajoute un nœud à larbre de nœuds pour lequel nous connaissons le plus court chemin depuis la source s.

17 19/7/2006Algorithmes de graphes17 Algorithme de Dijkstra Mais dans le problème du plus court chemin : nous ajoutons un nœud qui est le plus proche en distance de la source s Cette distance est fonction du poids de la nouvelle arête et de la distance depuis la source s de larbre de nœuds auquel larête est adjacente.

18 19/7/2006Algorithmes de graphes s uv x y Algorithme de Dijkstra

19 19/7/2006Algorithmes de graphes s uv x y 8 8 (s,x) est le plus court chemin utilisant une seule arête. Cest aussi le plus court chemin de s à x. Algorithme de Dijkstra

20 19/7/2006Algorithmes de graphes s uv x y Algorithme de Dijkstra

21 19/7/2006Algorithmes de graphes s uv x y Algorithme de Dijkstra

22 19/7/2006Algorithmes de graphes s uv x y Algorithme de Dijkstra

23 19/7/2006Algorithmes de graphes s uv x y Algorithme de Dijkstra

24 19/7/2006Algorithmes de graphes24 Algorithme de Dijkstra BEGIN FOR i := 0 TO g.nvertices-1 DO BEGIN intree[i] := false; distance[i] := inf; parent[i] := -1 END; distance[start] := 0; v := start; WHILE NOT intree[v] DO BEGIN intree[v] := true; FOR i := 0 TO g.degree[v]-1 DO BEGIN w := g.edges[v][i].v; weight := g.edges[v][i].weight; IF (distance[w] > distance[v]+weight) AND NOT intree[w] THEN BEGIN distance[w] := distance[v]+weight; parent[w] := v END END; v := 0; dist := MAXINT; FOR i := 0 TO g.nvertices-1 DO BEGIN IF (NOT intree[i]) AND (dist > distance[i]) THEN BEGIN dist := distance[i]; v := i END END; print_shortest_paths(g,0) END;

25 19/7/2006Algorithmes de graphes25 Algorithme de Floyd Trouver tous les plus courts chemins entre toutes les paires de nœuds dun graphe. Le graphe peut contenir des arêtes négatives, mais pas de cycle à coût négatif

26 19/7/2006Algorithmes de graphes26 Algorithme de Floyd Représentation du graphe : Une matrice de poids W(i,j)=0 si i=j W(i,j)= sil ny a pas darête entre i et j W(i,j) = poids de larête

27 19/7/2006Algorithmes de graphes27 Algorithme de Floyd v1v1 v2v2 v3v3 v4v4 v5v

28 19/7/2006Algorithmes de graphes28 Algorithme de Floyd Comment définir la distance la plus courte d i,j en termes de problèmes plus petits? Une façon de faire consiste à se limiter à des chemins nincluant que des nœuds dun sous-ensemble restreint.

29 19/7/2006Algorithmes de graphes29 Algorithme de Floyd Initialement, ce sous-ensemble est vide. Ensuite il est augmenté progressivement, un nœud à la fois, jusquà ce quil contienne tous les nœuds du graphe.

30 19/7/2006Algorithmes de graphes30 Algorithme de Floyd Soit D (k) [i,j]=poids du plus court chemin de v i à v j nutilisant que les nœuds {v 1,v 2,…,v k } comme nœuds intermédiaires dans le chemin D (0) =W D (n) =D cest la matrice finale Comment calculer D (k) depuis D (k-1) ?

31 19/7/2006Algorithmes de graphes31 Algorithme de Floyd Cas 1: Un plus court chemin de v i à v j limité aux nœuds {v 1,v 2,…,v k } comme nœuds intermédiaires nutilise pas v k. Alors D (k) [i,j]= D (k-1) [i,j]. Cas 2: Un plus court chemin de v i à v j limité aux nœuds {v 1,v 2,…,v k } comme nœuds intermédiaires utilise v k. Alors D (k) [i,j]= D (k-1) [i,k]+ D (k-1) [k,j]. ViVi VjVj VkVk Plus court chemin utilisant les nœuds { V 1,... V k -1 } Plus court chemin utilisant les nœuds {V 1,... V k }

32 19/7/2006Algorithmes de graphes32 Algorithme de Floyd Comme D (k) [i,j]= D (k-1) [i,j] or D (k) [i,j]= D (k-1) [i,k]+ D (k-1) [k,j]. On obtient: D (k) [i,j]= min{ D (k-1) [i,j], D (k-1) [i,k]+ D (k-1) [k,j] } ViVi VjVj VkVk Plus court chemin utilisant les nœuds { V 1,... V k -1 } Plus court chemin utilisant les nœuds {V 1,... V k }

33 19/7/2006Algorithmes de graphes33 Algorithme de Floyd W = D 0 = P =

34 19/7/2006Algorithmes de graphes34 D 1 = P = Algorithme de Floyd D 1 [2,3] = min( D 0 [2,3], D 0 [2,1]+D 0 [1,3] ) = min (, 7) = 7 D 1 [3,2] = min( D 0 [3,2], D 0 [3,1]+D 0 [1,2] ) = min (-3, ) = -3 K = 1 Le nœud 1 peut être nœud intermédiaire.

35 19/7/2006Algorithmes de graphes35 D 2 = P = Algorithme de Floyd D 2 [1,3] = min( D 1 [1,3], D 1 [1,2]+D 1 [2,3] ) = min (5, 4+7) = 5 D 2 [3,1] = min( D 1 [3,1], D 1 [3,2]+D 1 [2,1] ) = min (, -3+2) = -1 K = 2 Les nœuds 1 et 2 peuvent être nœuds intermédiaires.

36 19/7/2006Algorithmes de graphes36 D 3 = P = Algorithme de Floyd D 3 [1,2] = min(D 2 [1,2], D 2 [1,3]+D 2 [3,2] ) = min (4, 5+(-3)) = 2 D 3 [2,1] = min(D 2 [2,1], D 2 [2,3]+D 2 [3,1] ) = min (2, 7+ (-1)) = 2 K = 3 Les nœuds 1, 2, 3 peuvent être nœuds intermédiaires.

37 19/7/2006Algorithmes de graphes37 Algorithme de Floyd 1. D W // initialiser D avec les poids des arêtes 2. P 0 // initialiser P à 0 3. for k 1 to n 4. do for i 1 to n 5. do for j 1 to n 6. if (D[ i, j ] > D[ i, k ] + D[ k, j ] ) 7. then D[ i, j ] D[ i, k ] + D[ k, j ] 8. P[ i, j ] k;

38 19/7/2006Algorithmes de graphes38 Algorithme de Floyd Pourquoi peut-on travailler sur une même matrice ? D[i,j] ne dépend que des éléments de la kième ligne et kième colonne de la matrice. La kième ligne et kième colonne de la matrice restent inchangées lorsquon calcule D k

39 19/7/2006Algorithmes de graphes39 Algorithme de Floyd Les éléments de la diagonale principale restent à 0 car : D (k) [ j,j ] = min{ D (k-1) [ j,j ], D (k-1) [ j,k ] + D (k-1) [ k,j ] } = min{ 0, D (k-1) [ j,k ] + D (k-1) [ k,j ] } = 0

40 19/7/2006Algorithmes de graphes40 Algorithme de Floyd La kième colonne de D k est égale à la kième colonne de D k-1 : Pour tout i D (k) [i,k] = min{ D (k-1) [i,k], D (k-1) [i,k]+ D (k-1) [k,k] } = min { D (k-1) [i,k], D (k-1) [i,k]+0 } = D (k-1) [i,k]

41 19/7/2006Algorithmes de graphes41 Algorithme de Floyd La kième ligne de D k est égale à la kième ligne de D k-1 : Pour tout i D (k) [k,j] = min{ D (k-1) [k,j], D (k-1) [k,k]+ D (k-1) [k,j] } = min{ D (k-1) [ k,j ], 0+D (k-1) [k,j ] } = D (k-1) [ k,j ]

42 19/7/2006Algorithmes de graphes42 Algorithme de Floyd FOR k := 1 TO g.nvertices DO FOR i := 1 TO g.nvertices DO FOR j := 1 TO g.nvertices DO BEGIN through_k := g.weight[i,k]+g.weight[k,j]; IF through_k < g.weight[i,j] THEN BEGIN g.weight[i,j] := through_k; p[i,j] := k END

43 19/7/2006Algorithmes de graphes43 Problème In an episode of the Dick Van Dyke show, little Richie connects the freckles on his Dad's back to form a picture of the Liberty Bell. Alas, one of the freckles turns out to be a scar, so his Ripley's engagement falls through. Consider Dick's back to be a plane with freckles at various (x,y) locations. Your job is to tell Richie how to connect the dots so as to minimize the amount of ink used. Richie connects the dots by drawing straight lines between pairs, possibly lifting the pen between lines. When Richie is done there must be a sequence of connected lines from any freckle to any other freckle.

44 19/7/2006Algorithmes de graphes44 Problème Input The input begins with a single positive integer on a line by itself indicating the number of the cases following, each of them as described below. This line is followed by a blank line, and there is also a blank line between two consecutive inputs. The first line contains 0 < n <= 100, the number of freckles on Dick's back. For each freckle, a line follows; each following line contains two real numbers indicating the (x,y) coordinates of the freckle. Output For each test case, the output must follow the description below. The outputs of two consecutive cases will be separated by a blank line. Your program prints a single real number to two decimal places: the minimum total length of ink lines that can connect all the freckles.

45 19/7/2006Algorithmes de graphes45 Problème Sample Input Sample Output 3.41


Télécharger ppt "Module 5 : Algorithmes de graphes. 19/7/2006Algorithmes de graphes2 Plan du module Arbre couvrant minimum Algorithme de Prim Algorithmes de plus court."

Présentations similaires


Annonces Google