• Aucun résultat trouvé

Graphes pondérés

N/A
N/A
Protected

Academic year: 2022

Partager "Graphes pondérés"

Copied!
23
0
0

Texte intégral

(1)

Graphes pondérés

Benjamin Monmege

(2)

Graphes pondérés

L’algorithme de parcours en largeur garantit d’obtenir unplus court chemin en terme du nombre d’arcs visités. . .

. . . mais vis-à-vis d’un problème de recherche d’itinéraire dans une ville, on peut vouloir mesurer une distance plus finement qu’en fonction du nombre d’arcs, par des poids:

Algorithme de Dijkstra

A

B

C

D

E 10

5

7

2 9 1

2 3

4 6

Edsger Wybe Dijkstra (1939-2002)

(3)

Graphes pondérés

L’algorithme de parcours en largeur garantit d’obtenir unplus court chemin en terme du nombre d’arcs visités. . .

. . . mais vis-à-vis d’un problème de recherche d’itinéraire dans une ville, on peut vouloir mesurer une distance plus finement qu’en fonction du nombre d’arcs, par des poids:

Algorithme de Dijkstra

A

B D

10

7 9 1

2 3

4 6

Edsger Wybe Dijkstra (1939-2002)

(4)

Représentation des graphes pondérés

Matrice d’adjacence où la case (u,v) abrite le poids de l’arc deu à v, ou∞ s’il n’y a pas de tel arc

Liste de successeurs, où chaque successeur v de la liste u est étiqueté par le poids de l’arc deu àv (dictionnaire de listes de paires)

Longueur d’un plus court chemin de u à v : δ(u,v) =

(min{poids(c)|c chemin deu àv} s’il existe un chemin deu à v

∞ sinon

(5)

Représentation des graphes pondérés

Matrice d’adjacence où la case (u,v) abrite le poids de l’arc deu à v, ou∞ s’il n’y a pas de tel arc

Liste de successeurs, où chaque successeur v de la liste u est étiqueté par le poids de l’arc deu àv (dictionnaire de listes de paires)

Longueur d’un plus court chemin de u à v : δ(u,v) =

(min{poids(c)|c chemin deu àv} s’il existe un chemin deu à v

∞ sinon

(6)

L’algorithme de parcours en largeur ne suffit plus à calculer des plus courts chemins !

Algorithme de Dijkstra

A

B

C

D

E 10

5

7

2 9 1

2 3

4 6

Edsger Wybe Dijkstra (1939-2002)

Exemple au tableau. . .

(7)

Différents algorithmes de plus courts chemins

Algorithme de Dijkstra: plus courts chemins à origine unique dans des graphes à poids positifs

Algorithme de Bellman-Ford: plus courts chemins à origine unique Algorithme de Floyd-Warshall: plus courts chemins pour tous couples de sommets (avec détection des cycles de poids strictement négatif)

(8)

Algorithmes de Dijkstra à partir d’une source s

Maintenir un attribut d(u) pour tout sommet u, qui est un majorant de la longueur d’un plus court chemin des àu

Maintenir un attribut π(u) pour tout sommet u, qui permet de représenter une arborescence (de plus courts chemins) de racines

Appliquer une procédure de relâchement: fonction relâcher(u, v, poids_arc):

si d(v) > d(u) + poids_arc(u,v)

alors d(v) = d(u) + poids_arc(u,v); pi(v) = u

(9)

Algorithmes de Dijkstra à partir d’une source s

Maintenir un attribut d(u) pour tout sommet u, qui est un majorant de la longueur d’un plus court chemin des àu

Maintenir un attribut π(u) pour tout sommet u, qui permet de représenter une arborescence (de plus courts chemins) de racines Appliquer une procédure de relâchement:

fonction relâcher(u, v, poids_arc):

si d(v) > d(u) + poids_arc(u,v)

alors d(v) = d(u) + poids_arc(u,v); pi(v) = u

(10)

Algorithme de Dijkstra Algorithme de Dijkstra

A

B

C

D

E 10

5

7

2 9 1

2 3

4 6

(11)

Algorithme de Dijkstra Algorithme de Dijkstra

A

B

C

D

E 10

5

7

2 9 1

2 3

4 6

0

∞ ∞

∞ ∞

(12)

Algorithme de Dijkstra Algorithme de Dijkstra

A

B

C

D

E 10

5

7

2 9 1

2 3

4 6

0

∞ ∞

∞ ∞

A

(13)

Algorithme de Dijkstra

5

Algorithme de Dijkstra

A

B

C

D

E 10

5

7

2 9 1

2 3

4 6

0

∞ ∞

A ∞

(14)

Algorithme de Dijkstra

5

Algorithme de Dijkstra

A

B

C

D

E 10

5

7

2 9 1

2 3

4 6

0

A ∞

10

(15)

Algorithme de Dijkstra

5

Algorithme de Dijkstra

A

B

C

D

E 10

5

7

2 9 1

2 3

4 6

0

10

C

A

(16)

Algorithme de Dijkstra

5

Algorithme de Dijkstra

A

B

C

D

E 10

5

7

2 9 1

2 3

4 6

0

8

C

A

(17)

Algorithme de Dijkstra

5

Algorithme de Dijkstra

A

B

C

D

E 10

5

7

2 9 1

2 3

4 6

0

8

C

A

14

(18)

Algorithme de Dijkstra

5

Algorithme de Dijkstra

A

B

C

D

E 10

5

7

2 9 1

2 3

4 6

0

8

C

A

14

7

(19)

Algorithme de Dijkstra

5

Algorithme de Dijkstra

A

B

C

D

E 10

5

7

2 9 1

2 3

4 6

0

8

A

14

C

E

7

(20)

Algorithme de Dijkstra

5

Algorithme de Dijkstra

A

B

C

D

E 10

5

7

2 9 1

2 3

4 6

0

8

A

13

C

E

7

(21)

Algorithme de Dijkstra

A

B

C

D

E

B D

5

Algorithme de Dijkstra

10

5

7

2 9 1

2 3

4 6

0

8

A

E 13

C

B

7

(22)

Algorithme de Dijkstra

5

Algorithme de Dijkstra

A

B

C

D

E 10

5

7

2 9 1

2 3

4 6

0

8

A

E 9

C

B

7

(23)

Algorithme de Dijkstra

5

Algorithme de Dijkstra

A

B

C

D

E 10

5

7

2 9 1

2 3

4 6

0

8

A

E 9

C

7 B

D

Références

Documents relatifs

Ce graphe est représenté par une matrice N lignes-N colonnes dans laquelle la valeur 1 placée en ligne i et colonne j indique l'existence d'un arc permettant de passer du point i

Il vous faut modifier le programme Heapsort pour qu’un sommet (donn´e par son indice s) ”connaisse” sa position dans le tas (indication : utilisez un tableau position[s] qui

Nous présentons ensuite les résultats d'une étude comparant des implémentations efficaces sur PC, appliquées à des graphes de grande taille modélisant des réseaux routiers. Sur

— L'algorithme étudié concerne le calcul des plus courts chemins dans un graphe non orienté* La méthode employée s'inspire de celle de Dantzig mais la réduction du nombre de

Écrivez une version modifiée de l’algorithme de Bellman-Ford, utilisant cette condition de relâ- chement modifiée, donnant les meilleurs taux de change d’une monnaie A vers toutes

Proposer un algorithme pour tester si l’ensemble de valuations vérifiant une contrainte E est inclus dans celui représenté par une contrainte E 0?. Est-ce ce possible de

Exercice 1 Calculer le plus court chemin depuis tous les sommets jusqu’` a un mˆ eme sommet destination?. Exercice 2 Que se passe-t-il s’il y a des distances

Si on désigne par x=OH, y=DH et z=FK (voir le parcours n°1), on calcule pour chacun des parcours la longueur de la ligne brisée passant par les 7 points en fonction de x,y et z..