Vous êtes sur la page 1sur 78

Cours n: Graphes

Olivier Bournez

bournez@lix.polytechnique.fr LIX, Ecole Polytechnique

2011-12

Algorithmique

Aujourdhui
Rappels: les graphes Rappels: Les arbres Les arbres binaires Parcours darbres Repr esentation des graphes Matrice dadjacences Liste de successeurs Parcours de graphes Parcours g en erique Parcours en largeur BFS Parcours en profondeur DFS Calcul de distances Algorithme de Bellman-Ford Algorithme de Dijsktra Algorithme de Floyd Warshall
2

Un graphe orient e
Un graphe orient e (digraph) est donn e par un couple G = (V , E ), o` u
V est un ensemble. E V V.

Exemple:
V = {0, 1, . . . , 6}. E = {(0, 1), (3, 4), (5, 1), (6, 3), (6, 4), (6, 6)}.

4 1 5 0 3 6 2

Vocabulaire
4 1 5 0 3 6 2

Les el ements de V sont appel es des sommets (parfois aussi des nuds). Les el ements e de E sont appel es des arcs. Si e = (u , v ), u est appel e la source de e , v est appel e la destination de e . Remarque:
Les boucles (les arcs (u , u )) sont autoris ees.

Un graphe
Un graphe1 est donn e par un couple G = (V , E ), o` u
V est un ensemble. E est un ensemble de paires {u , v } avec u , v V .

On convient de repr esenter une paire {u , v } par (u , v ) ou (v , u ). Autrement dit, (u , v ) et (v , u ) d enotent la m eme ar ete. Exemple:
V = {0, 1, . . . , 6} E = {(0, 1), (3, 4), (5, 1), (6, 3), (6, 4)}.

4 1 5
1

3 6 2

Lorsquon ne pr ecise pas, par d efaut, un graphe est non-orient e.


5

Vocabulaire

4 1 5 0 3 6 2

Les el ements e de E sont appel es des ar etes. Si e = (u , v ), u et v sont appel es les extr emit es de e . Remarque: (sauf autre convention explicite)
Les boucles ne sont pas autoris ees.

Vocabulaire (cas non-orient e)

4 1 5 0 3 6 2

u et v sont dits voisins sil y a une ar ete entre u et v . Le degr e de u est le nombre de voisins de u .

Vocabulaire (cas non-orient e)


4 1 5 0 3 6 2

Un chemin du sommet s vers le sommet t est une suite e0 , e1 , , en de sommets telle que e0 = s , en = t , (ei 1 , ei ) E , pour tout 1 i n.
n est appel e la longueur du chemin, et on dit que t est joignable ` a partir de s . Le chemin est dit simple si les ei sont distincts deux-` a-deux. Un cycle est un chemin de longueur non-nulle avec e0 = en .

Le sommet s est dit ` a distance n de t sil existe un chemin de longueur n entre s et t , mais aucun chemin de longueur inf erieure.
8

Composantes connexes (cas non-orient e)


Prop. La relation etre joignable est une relation d equivalence. Les classes d equivalence sont appel ees les composantes connexes. 4 1 5 0 3 6 2

Un graphe est dit connexe sil ny a quune seule classe d equivalence.


Autrement dit, tout sommet est joignable ` a partir de tout sommet.

Les graphes sont partout!


Beaucoup de probl` emes se mod elisent par des objets et des relations entre objets. Exemples:
Le graphe routier. Les r eseaux informatiques. Le graphe du web.

Beaucoup de probl` emes se ram` enent ` a des probl` emes sur les graphes. Th eorie des graphes:
Euler, Hamilton, Kirchho, K onig, Edmonds, Berge, Lov asz, Seymour,. . .

Les graphes sont omnipr esents en informatique.


10

Th eorie des graphes. Exemple 1: graphes planaires.


Un graphe est dit planaire sil peut se repr esenter sur un plan sans quaucune ar ete nen croise une autre. Planaire:

Non-planaire: K5

K3,3

Th eor` eme [Kuratowski-Wagner] Un graphe ni est planaire ssi il ne contient pas de sous-graphe qui soit une expansion de K5 ou de K3,3 .
Une expansion consiste ` a ajouter un ou plusieurs sommets sur une ou plusieurs ar etes (exemple: devient )

11

Th eorie des graphes. Exemple 1: graphes planaires.


Un graphe est dit planaire sil peut se repr esenter sur un plan sans quaucune ar ete nen croise une autre. Planaire:

Non-planaire: K5

K3,3

Th eor` eme [Kuratowski-Wagner] Un graphe ni est planaire ssi il ne contient pas de sous-graphe qui soit une expansion de K5 ou de K3,3 .
Une expansion consiste ` a ajouter un ou plusieurs sommets sur une ou plusieurs ar etes (exemple: devient )

11

Th eorie des graphes. Exemple 2: Coloriage de graphe.


Allouer des fr equences GSM correspond ` a colorier les sommets dun graphe.
sommets: des emetteurs radio. ar ete entre u et v : le signal de u perturbe v ou r eciproquement. couleur: fr equence radio.

Le probl` eme de coloriage dun graphe: colorier les sommets dun graphe de telle sorte quil ny ait aucune ar ete entre deux sommets dune m eme couleur.

Un coloriage avec 4 couleurs


12

Th eorie des graphes. Exemple 2: Coloriage de graphe.

Th eor` eme: Appel et Haken (76): tout graphe planaire est coloriable avec 4 couleurs (preuve avec 1478 cas critiques).
Robertson, Sanders, Seymour, Thomas, Gonthier, Werner.

On ne conna t aucun algorithme pour d eterminer si un graphe g en eral est coloriable avec 4 couleurs (m eme avec 3) qui fonctionne en temps polynomial (le probl` eme est NP -complet).

13

Applications des graphes. Exemple 3: evaluer une page de la toile


Brevet Method for Node Ranking in a Linked Database (Universit e Stanford, Janvier 1997). En simpliant.
On consid` ere le graphe des liens entre pages. Mod` ele th eorique:
Avec probabilit e 0 < c < 1, un surfeur abandonne la page actuelle et recommence sur une des n pages du web, choisie de mani` ere equiprobable. Avec probabilit e 1 c , le surfeur suit un des liens de la page actuelle j , choisie de mani` ere equiprobable parmi tous les liens lj emis.

Quelle que soit la distribution initiale, on convergera vers une unique distribution stationnaire. On evalue une page par la probabilit e de cette page dans la distribution stationnaire.
14

Aujourdhui
Rappels: les graphes Rappels: Les arbres Les arbres binaires Parcours darbres Repr esentation des graphes Matrice dadjacences Liste de successeurs Parcours de graphes Parcours g en erique Parcours en largeur BFS Parcours en profondeur DFS Calcul de distances Algorithme de Bellman-Ford Algorithme de Dijsktra Algorithme de Floyd Warshall
15

Les arbres
Un graphe2 connexe sans cycle est appel e un arbre (libre). Un graphe2 sans-cycle est appel e une for et:
chacune de ses composantes connexes est un arbre.

4 1 5 0 3 6 2

non-orient e.

Les arbres sont partout!


Un graphe2 connexe sans cycle est appel e un arbre (libre). Un graphe2 sans-cycle est appel e une for et:
chacune de ses composantes connexes est un arbre.

D` es quon a des objets, des relations entre objets, et pas de cycle, on a donc un arbre ou une for et. 4 1 5 0 3 6 2

non-orient e.

Les arbres sont partout!


Un graphe2 connexe sans cycle est appel e un arbre (libre). Un graphe2 sans-cycle est appel e une for et:
chacune de ses composantes connexes est un arbre.

D` es quon a des objets, des relations entre objets, et pas de cycle, on a donc un arbre ou une for et. 4 1 5 0 3 6 2

Les arbres sont omnipr esents en informatique.


2

non-orient e.

Une caract erisation & Quelques propri et es


Soit G = (V , E ) un graphe3 . Les propri et es suivantes sont equivalentes: G est un arbre (libre). Deux sommets quelconques de V sont connect es par un unique chemin simple. G est connexe, mais ne lest plus si on enl` eve nimporte laquelle de ses ar etes. G est connexe, et |E | = |V | 1. G est sans cycle, et |E | = |V | 1. G est sans cycle, mais ne lest plus si lon ajoute nimporte quelle ar ete. 4 1 5
3

3 6 2
17

non-orient e.

Les arbres poussent de haut en bas en informatique


On distingue souvent un sommet que lon appelle sa racine. On dessine un arbre
en pla cant la racine tout en haut. puis en pla cant les sommets ` a distance i de la racine ` a la ligne i.

Exemple: pour larbre libre pr ec edent, en prenant le sommet d etiquette 3 comme racine. 3

2
18

Une vision r ecursive: cas g en eral

Un arbre correspond ` a un couple form e


1. dun sommet particulier, appel e sa racine, 2. et dune partition des sommets restants en un ensemble darbres.

Cette vision permet de faire des preuves inductives.


Exemple: montrer quun arbre dont tous les sommets sont darit e au moins 2 poss` ede plus de feuilles que de sommets internes.

Mais reste informatiquement encore un peu compliqu ee.

19

Plan
Rappels: les graphes Rappels: Les arbres Les arbres binaires Parcours darbres Repr esentation des graphes Matrice dadjacences Liste de successeurs Parcours de graphes Parcours g en erique Parcours en largeur BFS Parcours en profondeur DFS Calcul de distances Algorithme de Bellman-Ford Algorithme de Dijsktra Algorithme de Floyd Warshall
20

Une vision r ecursive: arbres binaires


Plus simple: Les arbres binaires. 3 1 5 Un arbre binaire est
soit vide soit lunion disjointe dun sommet, appel e sa racine, dun arbre binaire, appel e sous-arbre gauche, et dun arbre binaire, appel e sous-arbre droit.

4 2 0

Autrement dit, un arbre binaire dentiers est solution de l equation: A = null (A int A)
21

Attention: Arbre binaire = Arbre darit e 2.


Un arbre binaire a tous ses sommets darit e 0, 1 ou 2. Mais les concept darbre de degr e 2 et darbre binaire sont di erents. En fait, 1 et 1

3 ne sont pas les m eme arbres binaires, car (((, 3, ), 2, ), 1, ) = (, 1, ((, 3, ), 2, ))

22

D enir un arbre binaire en JAVA


Slogan: Liste: 1 Arbre binaire: 1

On code un arbre vide par la r ef erence null , et un arbre non-vide par une instance de la classe Arbre.
class Arbre { int val; Arbre gauche, droite; Arbre (Arbre gauche, int val, Arbre droite) { this.gauche = gauche; this.val = val; this.droite = droite; }}

Construire un arbre binaire


new Arbre ( new Arbre ( new Arbre (null ,5,null), 1, null), 3, new Arbre ( new Arbre (null ,2,null), 4, new Arbre (null ,0,null)))

3 1 5 2 4 0
24

Plan
Rappels: les graphes Rappels: Les arbres Les arbres binaires Parcours darbres Repr esentation des graphes Matrice dadjacences Liste de successeurs Parcours de graphes Parcours g en erique Parcours en largeur BFS Parcours en profondeur DFS Calcul de distances Algorithme de Bellman-Ford Algorithme de Dijsktra Algorithme de Floyd Warshall
25

Parcourir un arbre
Beaucoup dalgorithmes sur les arbres n ecessitent de parcourir (traiter) tous les sommets
Exemple: Tester lexistence dune valeur particuli` ere dans un arbre. Exemple: Acher un arbre.

Il existe une terminologie standard pour qualier les parcours.


On peut parcourir de gauche ` a droite, ou de droite ` a gauche. Une fois ce choix fait, on distingue les parcours
en largeur. en profondeur: pr exe, inxe, suxe.

26

Parcourir en largeur
Parcours en largeur dabord.
on parcourt par distance croissante ` a la racine.

Si le traitement dun sommet consiste ` a lacher, on achera dans lordre 3, 1, 4, 5, 2, 0. Cest peut- etre le parcours le plus naturel, mais cest le plus d elicat ` a programmer avec les arbres binaires.
27

Parcourir en profondeur

Parcours en profondeur dabord:


on parcourt r ecursivement.

Mais il reste trois possibilit es


Pr exe: traiter la racine, parcourir le sous-arbre gauche, puis le sous-arbre droit. Inxe: parcourir le sous-arbre gauche, traiter la racine, parcourir les sous-arbre droit. Suxe (appel e aussi postxe): parcourir le sous-arbre gauche, le sous-arbre droit, puis traiter la racine.

28

Parcours en profondeur: pr exe


3

Si le traitement dun sommet consiste ` a lacher, on achera dans lordre 3, 1, 5, 4, 2, 0.


static void Affiche(Arbre a) { i f (a==null) return; System.out.println(a.val+" "); Affiche(a.gauche); Affiche(a.droite); }
29

Parcours en profondeur: inxe


3

Si le traitement dun sommet consiste ` a lacher, on achera dans lordre 5, 1, 3, 2, 4, 0.


static void Affiche(Arbre a) { i f (a==null) return; Affiche(a.gauche); System.out.println(a.val+" "); Affiche(a.droite); }
30

Parcours en profondeur: postxe


3

Si le traitement dun sommet consiste ` a lacher, on achera dans lordre 5, 1, 2, 0, 4, 3.


static void Affiche(Arbre a) { i f (a==null) return; Affiche(a.gauche); Affiche(a.droite); System.out.println(a.val+" "); }
31

De lit eratif? Parcourir en largeur?

Voici un algorithme g en erique it eratif de parcours darbre. ParcoursGenerique(Arbre a, racine s):


L := {s } B := {s .gauche , s .droite } Tant que B =
choisir u dans B L := L {u }. B := B {u }. B := B ({u .gauche , u .droite } L)

Si B est impl ement e


par une pile, on parcourt en profondeur (pr exe). par une le, on parcourt en largeur.

32

Aujourdhui
Rappels: les graphes Rappels: Les arbres Les arbres binaires Parcours darbres Repr esentation des graphes Matrice dadjacences Liste de successeurs Parcours de graphes Parcours g en erique Parcours en largeur BFS Parcours en profondeur DFS Calcul de distances Algorithme de Bellman-Ford Algorithme de Dijsktra Algorithme de Floyd Warshall
33

Plan
Rappels: les graphes Rappels: Les arbres Les arbres binaires Parcours darbres Repr esentation des graphes Matrice dadjacences Liste de successeurs Parcours de graphes Parcours g en erique Parcours en largeur BFS Parcours en profondeur DFS Calcul de distances Algorithme de Bellman-Ford Algorithme de Dijsktra Algorithme de Floyd Warshall
34

Repr esentation des graphes: matrice dadjacence


Matrice dajacence. Pour G = (V , E ), V = {1, 2, . . . , n}, on repr esente G par une matrice M n n. Mi , j = 1 si (i , j ) E 0 sinon

Si graphe valu e: Mi ,j = v (i , j ).

4 1 5 0 3 6 2

0 1 0 0 0 0 0

1 0 0 0 0 1 0

0 0 0 0 0 0 0

0 0 0 0 1 0 1

0 0 0 1 0 0 1

0 1 0 0 0 0 0

0 0 0 1 1 0 0

35

Plan
Rappels: les graphes Rappels: Les arbres Les arbres binaires Parcours darbres Repr esentation des graphes Matrice dadjacences Liste de successeurs Parcours de graphes Parcours g en erique Parcours en largeur BFS Parcours en profondeur DFS Calcul de distances Algorithme de Bellman-Ford Algorithme de Dijsktra Algorithme de Floyd Warshall
36

Repr esentation des graphes: liste de successeurs

On associe ` a chaque sommet i , la liste des sommets j tels que (i , j ) E . L[0] = (1) L[1] = (0, 5) 4 1 5 0 3 6 2 L[2] = () L[3] = (4, 6) L[4] = (3, 6) L[5] = (1) L[6] = (3, 4)

37

Meilleure repr esentation?

Matrice: m emoire O (n2 ) (mieux pour graphes denses). Listes: m emoire O (n + m) (mieux pour graphes creux). o` u n nombre de sommets, m nombre dar etes. Le mieux?: cela d epend du contexte.

38

Aujourdhui
Rappels: les graphes Rappels: Les arbres Les arbres binaires Parcours darbres Repr esentation des graphes Matrice dadjacences Liste de successeurs Parcours de graphes Parcours g en erique Parcours en largeur BFS Parcours en profondeur DFS Calcul de distances Algorithme de Bellman-Ford Algorithme de Dijsktra Algorithme de Floyd Warshall
39

Plan
Rappels: les graphes Rappels: Les arbres Les arbres binaires Parcours darbres Repr esentation des graphes Matrice dadjacences Liste de successeurs Parcours de graphes Parcours g en erique Parcours en largeur BFS Parcours en profondeur DFS Calcul de distances Algorithme de Bellman-Ford Algorithme de Dijsktra Algorithme de Floyd Warshall
40

Parcours g en erique

ParcoursGenerique(G,s): L := {s } B := Voisins (s ) Tant que B =


choisir u dans B L := L {u }. B := B {u }. B := B (Voisins (u ) L)

41

Application 1: num erotation

ParcoursNumerotation(G,s): num := 0 numero [s ] := num; num := num + 1. L := {s } B := Voisins (s ) Tant que B =


choisir u dans B numero [s ] := num; num := num + 1. L := L {u }. B := B {u }. B := B (Voisins (u ) L)

42

Application 2: composantes connexes


UneComposante(G,s): L := {s } B := Voisins (s ) Tant que B =
choisir u dans B L := L {u }. B := B {u }. B := B (Voisins (u ) L)

Retourner L ComposantesConnexes(G) Tant que V =


Choisir s dans V L := UneComposante (G , s ) Acher L V := V L
43

Plan
Rappels: les graphes Rappels: Les arbres Les arbres binaires Parcours darbres Repr esentation des graphes Matrice dadjacences Liste de successeurs Parcours de graphes Parcours g en erique Parcours en largeur BFS Parcours en profondeur DFS Calcul de distances Algorithme de Bellman-Ford Algorithme de Dijsktra Algorithme de Floyd Warshall
44

Parcours en largeur BFS


B est impl ement e par une le (FIFO = First In First Out). On explore les sommets par niveau: le niveau k correspond aux sommets ` a distance k du sommet s . Exemple:

45

BFS sur lexemple pr ec edent: (a), (b) et (c ) montre les niveaux successifs qui sont consid er es. Les sommets sont visit es dans lordre 1, 2, 3, 4, 5, 7, 8, 6.

Pour chaque k 1, le niveau k correspond aux sommets ` a distance exactement k de s . Il y a un chemin de s vers t si et seulement si t appara t dans un certain niveau. Si t appara t au niveau k , alors t est ` a distance k de s . Soit x et y deux sommets aux niveaux Li et Lj avec (x , y ) E . Alors i et j di` erent dau plus 1.
46

Plan
Rappels: les graphes Rappels: Les arbres Les arbres binaires Parcours darbres Repr esentation des graphes Matrice dadjacences Liste de successeurs Parcours de graphes Parcours g en erique Parcours en largeur BFS Parcours en profondeur DFS Calcul de distances Algorithme de Bellman-Ford Algorithme de Dijsktra Algorithme de Floyd Warshall
47

Parcours en profondeur DFS

DFS(s) Marquer s comme explor e et ajouter s ` a L. Pour chaque ar ete (s , v ) E


si v nest pas marqu e explor e alors
appeler r ecursivement DFS(v)

48

Sur le graphe pr ec edent, les sommets sont visit es cette fois dans lordre 1, 2, 3, 5, 4, 6, 7, 8. Le dessin plus bas montre les sommets dans lordre o` u ils sont d ecouverts.

49

Si on appelle T larbre couvrant produit (celui qui contient lhistoire du parcours: on d ecr` ete que v a u comme p` ere si lar ete (u , v ) a permis de d ecouvrir v ), on a: Pour chaque appel r ecursif DFS(u), tous les sommets qui sont marqu es explor es entre linvocation de lappel et son retour sont des descendants de u dans larbre T produit. Soit T un arbre DFS, et x et y deux sommets dans T , avec (x , y ) E qui nest pas une ar ete de T . Alors soit x est un anc etre de y , soit le contraire.

50

Impl ementer BFS(s)


Discovered [s ] := true ; Discovered [v ] := false pour v = s . L[0] = {s }; i:=0 // Layer counter Set T = // Arbre Tant que L[i ] =
L[i + 1] := Pour chaque u L[i ]
Pour chaque ar ete (u , v ) E Si Discovered [v ] == false alors Discovered[v]:=true; Ajouter (u , v ) ` a larbre T ( (v ) = u ). Ajouter v ` a L[i + 1] Fin si

Fin pour i:=i+1

Fin tant que Temps O (n + m), o` u n est le nombre de sommets, et m le nombre dar etes avec une repr esentation par liste de successeurs.
51

Impl ementer DFS(s)


Discovered [s ] := true ; Discovered [v ] := false pour v = s . Cr eer S comme la pile contenant uniquement l el ement s Tant que S =
Prendre le sommet u de S Si Discovered [u ] == false alors
Discovered [u ] := true Pour chaque ar ete (u , v ) E Ajouter u ` a la pile S Fin pour

Fin si

Fin while Temps O (n + m), o` u n est le nombre de sommets, et m le nombre dar etes, avec une repr esentation par liste de successeurs.

52

Aujourdhui
Rappels: les graphes Rappels: Les arbres Les arbres binaires Parcours darbres Repr esentation des graphes Matrice dadjacences Liste de successeurs Parcours de graphes Parcours g en erique Parcours en largeur BFS Parcours en profondeur DFS Calcul de distances Algorithme de Bellman-Ford Algorithme de Dijsktra Algorithme de Floyd Warshall
53

Plan
Rappels: les graphes Rappels: Les arbres Les arbres binaires Parcours darbres Repr esentation des graphes Matrice dadjacences Liste de successeurs Parcours de graphes Parcours g en erique Parcours en largeur BFS Parcours en profondeur DFS Calcul de distances Algorithme de Bellman-Ford Algorithme de Dijsktra Algorithme de Floyd Warshall
54

Algorithme de Bellman-Ford
Entr ee : Sortie: Un graphe G = (V , E ) avec une source s Une fonction de poids w : E R+ Un vecteur distance d Une fonction p` ere : V V

1. Initialisation des variables d et


1.1 d [s ] 0 ; [s ] s 1.2 Pour chaque sommet v de V faire d [v ] (v ) NIL

2. Calcul des distances et de larbre de plus court chemin


2.1 Pour i 1 ` a |V | 1 faire Pour chaque ar ete (u , v ) E faire
Si (d [v ] > d [u ] + w (u , v )) alors d [v ] d [u ] + w (u , v ) (v ) u

3. retourner d et

55

Exemple
5 2 A 1
A (0, A) B (, )

B 2 D
C (, )

3 3 1

C 1 E

5 F 2
E (, ) F ( , )

init

D (, )

Exemple
5 2 A 1
A (0, A) (0, A) B (, ) (2, A)

B 2 D
C (, ) (5, A)

3 3 1

C 1 E

5 F 2
E (, ) (, ) F ( , ) (, )

init 1

D (, ) (1, A)

Exemple
5 2 A 1
A (0, A) (0, A) (0, A) B (, ) (2, A) (2, A)

B 2 D
C (, ) (5, A) (4, D )

3 3 1

C 1 E

5 F 2
E (, ) (, ) (2, D ) F ( , ) (, ) (10, C )

init 1 2

D (, ) (1, A) (1, A)

56

Exemple
5 2 A 1
A (0, A) (0, A) (0, A) (0, A)

B 2 D

3 3 1

C 1 E

5 F 2
E F (, ) (, ) (, ) (, ) (2, D ) (10, C ) (2, D ) (4, E ) (d (.), (.))

init 1 2 3

B C D (, ) (, ) (, ) (2, A) (5, A) (1, A) (2, A) (4, D ) (1, A) (2, A) (3, E ) (1, A) les couples correspondent ` a

Plan
Rappels: les graphes Rappels: Les arbres Les arbres binaires Parcours darbres Repr esentation des graphes Matrice dadjacences Liste de successeurs Parcours de graphes Parcours g en erique Parcours en largeur BFS Parcours en profondeur DFS Calcul de distances Algorithme de Bellman-Ford Algorithme de Dijsktra Algorithme de Floyd Warshall
57

Algorithme de Dijkstra
Entr ee : Sortie: Un graphe G = (V , E ) avec une source s Une fonction de poids w : E R+ Un vecteur distance d Une fonction p` ere : V V

1. Initialisation de la source s
1.1 d [s ] 0 ; [s ] s 1.2 Pour chaque sommet v de V faire (v ) NIL d (v ) +

Algorithme de Dijkstra
Entr ee : Sortie: Un graphe G = (V , E ) avec une source s Une fonction de poids w : E R+ Un vecteur distance d Une fonction p` ere : V V

1. Initialisation de la source s
1.1 d [s ] 0 ; [s ] s 1.2 Pour chaque sommet v de V faire (v ) NIL d (v ) +

Algorithme de Dijkstra
Entr ee : Sortie: Un graphe G = (V , E ) avec une source s Une fonction de poids w : E R+ Un vecteur distance d Une fonction p` ere : V V

1. Initialisation de la source s
1.1 d [s ] 0 ; [s ] s 1.2 Pour chaque sommet v de V faire (v ) NIL d (v ) +

2. Q V ; S ; 3. Tant que (Q = ) faire


3.1 u Extraire-Le-Minimum(Q, d ); 3.2 S S {u }; 3.3 Pour chaque sommet v voisin de u faire d [v ] d [u ] + w (u , v ) Si (d [v ] > d [u ] + w (u , v )) alors (v ) u

4. retourner d et
58

Exemple
5 2 A 1 B 2 D 3 3 1 C 1 E 2 5 F

les couples correspondent ` a (d (.), (.)) Q A B C D E {ABCDEF } (0, ) (, ) (, ) (, ) (, )

F (, )

59

Exemple
5 2 A 1 B 2 D 3 3 1 C 1 E 2 5 F

I 1

les couples correspondent ` a (d (.), (.)) Q A B C D E {ABCDEF } (0, ) (, ) (, ) (, ) (, ) {BCDEF } (0, A) (2, A) (5, A) (1, A) (, )

F (, ) (, )

59

Exemple
5 2 A 1 B 2 D 3 3 1 C 1 E 2 5 F

I 1 2

les couples correspondent ` a (d (.), (.)) Q A B C D E {ABCDEF } (0, ) (, ) (, ) (, ) (, ) {BCDEF } (0, A) (2, A) (5, A) (1, A) (, ) {BCEF } (0, A) (2, A) (4, D ) (1, A) (2, D )

F (, ) (, ) (, )

59

Exemple
5 2 A 1 B 2 D 3 3 1 C 1 E 2 5 F

I 1 2 3

les couples correspondent ` a (d (.), (.)) Q A B C D {ABCDEF } (0, ) (, ) (, ) (, ) {BCDEF } (0, A) (2, A) (5, A) (1, A) {BCEF } (0, A) (2, A) (4, D ) (1, A) {CEF } (0, A) (2, A) (4, D ) (1, A)

E (, ) (, ) (2, D ) (2, D )

F (, ) (, ) (, ) (, )

59

Exemple
5 2 A 1 B 2 D 3 3 1 C 1 E 2 5 F

I 1 2 3 4

les couples correspondent ` a (d (.), (.)) Q A B C D {ABCDEF } (0, ) (, ) (, ) (, ) {BCDEF } (0, A) (2, A) (5, A) (1, A) {BCEF } (0, A) (2, A) (4, D ) (1, A) {CEF } (0, A) (2, A) (4, D ) (1, A) {CF } (0, A) (2, A) (3, E ) (1, A)

E (, ) (, ) (2, D ) (2, D ) (2, D )

F (, ) (, ) (, ) (, ) (4, E )

59

Exemple
5 2 A 1 B 2 D 3 3 1 C 1 E 2 5 F

I 1 2 3 4 5

les couples correspondent ` a (d (.), (.)) Q A B C D {ABCDEF } (0, ) (, ) (, ) (, ) {BCDEF } (0, A) (2, A) (5, A) (1, A) {BCEF } (0, A) (2, A) (4, D ) (1, A) {CEF } (0, A) (2, A) (4, D ) (1, A) {CF } (0, A) (2, A) (3, E ) (1, A) {F } (0, A) (2, A) (3, E ) (1, A)

E (, ) (, ) (2, D ) (2, D ) (2, D ) (2, D )

F (, ) (, ) (, ) (, ) (4, E ) (4, E )
59

Exemple
5 2 A 1 B 2 D 3 3 1 C 1 E 2 5 F

les couples correspondent ` a (d (.), (.)) Q A B C D I {ABCDEF } (0, ) (, ) (, ) (, ) 1 {BCDEF } (0, A) (2, A) (5, A) (1, A) 2 {BCEF } (0, A) (2, A) (4, D ) (1, A) 3 {CEF } (0, A) (2, A) (4, D ) (1, A) 4 {CF } (0, A) (2, A) (3, E ) (1, A) 5 {F } (0, A) (2, A) (3, E ) (1, A) 6 (0, A) (2, A) (3, E ) (1, A) Complexit e de lalgorithme: O (|V |2 )

E (, ) (, ) (2, D ) (2, D ) (2, D ) (2, D ) (2, D )

F (, ) (, ) (, ) (, ) (4, E ) (4, E ) (4, E )


59

Plan
Rappels: les graphes Rappels: Les arbres Les arbres binaires Parcours darbres Repr esentation des graphes Matrice dadjacences Liste de successeurs Parcours de graphes Parcours g en erique Parcours en largeur BFS Parcours en profondeur DFS Calcul de distances Algorithme de Bellman-Ford Algorithme de Dijsktra Algorithme de Floyd Warshall
60

Plus court chemin dans un graphe


Entr ee : Un graphe orient e G = (N , A) o` u chaque arc poss` ede une longueur non-n egative. Un des noeuds du graphe est appel e source. Probl` eme: Trouver la longueur du plus court chemin entre toutes les paires de noeuds. On suppose que N = {1, . . . n}. On suppose aussi que G est donn e sous forme de matrice L[1..n, 1..n] (on peut prendre L[i , j ] = lorsquil ny a pas dar ete entre i et j ) Algorithme de Floyd: cet algorithme construite une matrice D qui donne la longueur du plus court chemin entre chaque paire de noeuds.

61

Principe

1. On initialise D ` aL 2. Apr` es lit eration k , D donne la longueur du plus court chemin lorsque lon utilise que des noeuds dans {1, .., k } comme noeuds interm ediaires (ou eventuellement aucun noeud interm ediaire). D enition: Dk est la matrice D apr` es lit eration k . Le r esulat nal recherch e est Dn .

62

R ecurrence

Dk [i , j ] = min(Dk 1 [i , j ], Dk 1 [i , k ] + Dk 1 [k , j ])

Exercice: expliquer pourquoi.

63

Floyd(L[1..n,1..n])

Proc edure Floyd(L[1..n,1..n]) D:=L Pour k := 1 ` an


Pour i := 1 ` an
Pour j := 1 ` an D [i , j ] = min(D [i , j ], D [i , k ] + D [k , j ])

Retourner D.

Temps dans O (n3 ).

64