• Aucun résultat trouvé

Algorithmique des graphes 6 — Plus courts chemins, la suite Anthony Labarre 10 mars 2021

N/A
N/A
Protected

Academic year: 2022

Partager "Algorithmique des graphes 6 — Plus courts chemins, la suite Anthony Labarre 10 mars 2021"

Copied!
152
0
0

Texte intégral

(1)Algorithmique des graphes 6 — Plus courts chemins, la suite Anthony Labarre. 10 mars 2021.

(2) Plus courts chemins : poids < 0. Tous les plus courts chemins. Techniques algorithmiques. Correction de l’algorithme de Kosaraju-Sharir. • Pour prouver que l’algorithme de Kosaraju-Sharir est correct, il est plus simple de s’imaginer que chaque CFC est supprimée du graphe dès qu’on l’identifie ;. 2.

(3) Plus courts chemins : poids < 0. Tous les plus courts chemins. Techniques algorithmiques. Correction de l’algorithme de Kosaraju-Sharir. • Pour prouver que l’algorithme de Kosaraju-Sharir est correct, il est plus simple de s’imaginer que chaque CFC est supprimée du graphe dès qu’on l’identifie ; • Le résultat suivant sera crucial :. 3.

(4) Plus courts chemins : poids < 0. Tous les plus courts chemins. Techniques algorithmiques. Correction de l’algorithme de Kosaraju-Sharir. • Pour prouver que l’algorithme de Kosaraju-Sharir est correct, il est plus simple de s’imaginer que chaque CFC est supprimée du graphe dès qu’on l’identifie ; • Le résultat suivant sera crucial :. Lemme 1 Soit v le sommet de G dont la date de fin d’exploration est maximale. Alors la CFC C de G contenant v est une source, c’est-à-dire qu’il n’existe pas d’arc (a, b) avec a 6∈ C et b ∈ C .. 4.

(5) Plus courts chemins : poids < 0. Tous les plus courts chemins. Techniques algorithmiques. Correction de l’algorithme de Kosaraju-Sharir Soit v le sommet de G dont la date de fin d’exploration est maximale. Alors la CFC C de G contenant v est une source, c’est-à-dire qu’il n’existe pas d’arc (a, b) avec a 6∈ C et b ∈ C ..

(6) Plus courts chemins : poids < 0. Tous les plus courts chemins. Techniques algorithmiques. Correction de l’algorithme de Kosaraju-Sharir Soit v le sommet de G dont la date de fin d’exploration est maximale. Alors la CFC C de G contenant v est une source, c’est-à-dire qu’il n’existe pas d’arc (a, b) avec a 6∈ C et b ∈ C .. C v. b.

(7) Plus courts chemins : poids < 0. Tous les plus courts chemins. Techniques algorithmiques. Correction de l’algorithme de Kosaraju-Sharir Soit v le sommet de G dont la date de fin d’exploration est maximale. Alors la CFC C de G contenant v est une source, c’est-à-dire qu’il n’existe pas d’arc (a, b) avec a 6∈ C et b ∈ C . Procédons par contradiction : on suppose. C v. b.

(8) Plus courts chemins : poids < 0. Tous les plus courts chemins. Techniques algorithmiques. Correction de l’algorithme de Kosaraju-Sharir Soit v le sommet de G dont la date de fin d’exploration est maximale. Alors la CFC C de G contenant v est une source, c’est-à-dire qu’il n’existe pas d’arc (a, b) avec a 6∈ C et b ∈ C . Procédons par contradiction : on suppose qu’il existe un arc (a, b) avec a 6∈ C et b ∈ C .. C v. a. b.

(9) Plus courts chemins : poids < 0. Tous les plus courts chemins. Techniques algorithmiques. Correction de l’algorithme de Kosaraju-Sharir Soit v le sommet de G dont la date de fin d’exploration est maximale. Alors la CFC C de G contenant v est une source, c’est-à-dire qu’il n’existe pas d’arc (a, b) avec a 6∈ C et b ∈ C . Procédons par contradiction : on suppose qu’il existe un arc (a, b) avec a 6∈ C et b ∈ C . Soit r le sommet à partir duquel l’exploration en profondeur mène au sommet a ; on sait que r ∈ / C , sinon on aurait a ∈ C ; donc r 6= v . C v. a. b. r.

(10) Plus courts chemins : poids < 0. Tous les plus courts chemins. Techniques algorithmiques. Correction de l’algorithme de Kosaraju-Sharir Soit v le sommet de G dont la date de fin d’exploration est maximale. Alors la CFC C de G contenant v est une source, c’est-à-dire qu’il n’existe pas d’arc (a, b) avec a 6∈ C et b ∈ C . Procédons par contradiction : on suppose qu’il existe un arc (a, b) avec a 6∈ C et b ∈ C . Soit r le sommet à partir duquel l’exploration en profondeur mène au sommet a ; on sait que r ∈ / C , sinon on aurait a ∈ C ; donc r 6= v . C v. a. b. Il existe un chemin r. a→b. v;. r.

(11) Plus courts chemins : poids < 0. Tous les plus courts chemins. Techniques algorithmiques. Correction de l’algorithme de Kosaraju-Sharir Soit v le sommet de G dont la date de fin d’exploration est maximale. Alors la CFC C de G contenant v est une source, c’est-à-dire qu’il n’existe pas d’arc (a, b) avec a 6∈ C et b ∈ C . Procédons par contradiction : on suppose qu’il existe un arc (a, b) avec a 6∈ C et b ∈ C . Soit r le sommet à partir duquel l’exploration en profondeur mène au sommet a ; on sait que r ∈ / C , sinon on aurait a ∈ C ; donc r 6= v . C v. a. b. Il existe un chemin r. a→b. ⇒ on finit d’explorer v avant r. v;. r.

(12) Plus courts chemins : poids < 0. Tous les plus courts chemins. Techniques algorithmiques. Correction de l’algorithme de Kosaraju-Sharir Soit v le sommet de G dont la date de fin d’exploration est maximale. Alors la CFC C de G contenant v est une source, c’est-à-dire qu’il n’existe pas d’arc (a, b) avec a 6∈ C et b ∈ C . Procédons par contradiction : on suppose qu’il existe un arc (a, b) avec a 6∈ C et b ∈ C . Soit r le sommet à partir duquel l’exploration en profondeur mène au sommet a ; on sait que r ∈ / C , sinon on aurait a ∈ C ; donc r 6= v . C v. a. r. b. Il existe un chemin r. a→b. v;. ⇒ on finit d’explorer v avant r ⇒ date fin(v ) < date fin(r ) ;.

(13) Plus courts chemins : poids < 0. Tous les plus courts chemins. Techniques algorithmiques. Correction de l’algorithme de Kosaraju-Sharir Soit v le sommet de G dont la date de fin d’exploration est maximale. Alors la CFC C de G contenant v est une source, c’est-à-dire qu’il n’existe pas d’arc (a, b) avec a 6∈ C et b ∈ C . Procédons par contradiction : on suppose qu’il existe un arc (a, b) avec a 6∈ C et b ∈ C . Soit r le sommet à partir duquel l’exploration en profondeur mène au sommet a ; on sait que r ∈ / C , sinon on aurait a ∈ C ; donc r 6= v . C v. a. r. b. Il existe un chemin r. a→b. v;. ⇒ on finit d’explorer v avant r ⇒ date fin(v ) < date fin(r ) ; ⇒ contradiction : date fin(v ) est censée être maximale..

(14) Plus courts chemins : poids < 0. Tous les plus courts chemins. Techniques algorithmiques. Correction de l’algorithme de Kosaraju-Sharir. On peut maintenant prouver que l’algorithme de Kosaraju-Sharir est correct : • le premier parcours nous donne les descendants de chaque sommet ;. 14.

(15) Plus courts chemins : poids < 0. Tous les plus courts chemins. Techniques algorithmiques. Correction de l’algorithme de Kosaraju-Sharir. On peut maintenant prouver que l’algorithme de Kosaraju-Sharir est correct : • le premier parcours nous donne les descendants de chaque sommet ; • le second parcours reconstruit chaque CFC C “sans déborder”, puisqu’il n’existe pas d’arc sortant de C dans G 0 ;.

(16) Plus courts chemins : poids < 0. Tous les plus courts chemins. Techniques algorithmiques. Correction de l’algorithme de Kosaraju-Sharir. On peut maintenant prouver que l’algorithme de Kosaraju-Sharir est correct : • le premier parcours nous donne les descendants de chaque sommet ; • le second parcours reconstruit chaque CFC C “sans déborder”, puisqu’il n’existe pas d’arc sortant de C dans G 0 ; • à chaque identification d’une CFC, on la supprime et on recommence ;.

(17) Plus courts chemins : poids < 0. Tous les plus courts chemins. Techniques algorithmiques. Plus courts chemins : poids < 0. • L’algorithme de Dijkstra fonctionne bien tant qu’il n’y a pas de poids négatifs dans notre graphe ;. 17.

(18) Plus courts chemins : poids < 0. Tous les plus courts chemins. Techniques algorithmiques. Plus courts chemins : poids < 0. • L’algorithme de Dijkstra fonctionne bien tant qu’il n’y a pas de poids négatifs dans notre graphe ; • Cela n’arrive pas dans le cas de distances ; quand pourrait-on en avoir ?. 18.

(19) Plus courts chemins : poids < 0. Tous les plus courts chemins. Techniques algorithmiques. Plus courts chemins : poids < 0. • L’algorithme de Dijkstra fonctionne bien tant qu’il n’y a pas de poids négatifs dans notre graphe ; • Cela n’arrive pas dans le cas de distances ; quand pourrait-on en avoir ? • quand les poids correspondent à des dépenses énergétiques ;. 19.

(20) Plus courts chemins : poids < 0. Tous les plus courts chemins. Techniques algorithmiques. Plus courts chemins : poids < 0. • L’algorithme de Dijkstra fonctionne bien tant qu’il n’y a pas de poids négatifs dans notre graphe ; • Cela n’arrive pas dans le cas de distances ; quand pourrait-on en avoir ? • quand les poids correspondent à des dépenses énergétiques ; • quand les poids correspondent à des coûts ou à des remises ;. 20.

(21) Plus courts chemins : poids < 0. Tous les plus courts chemins. Techniques algorithmiques. Plus courts chemins : poids < 0. • L’algorithme de Dijkstra fonctionne bien tant qu’il n’y a pas de poids négatifs dans notre graphe ; • Cela n’arrive pas dans le cas de distances ; quand pourrait-on en avoir ? • quand les poids correspondent à des dépenses énergétiques ; • quand les poids correspondent à des coûts ou à des remises ; • .... 21.

(22) Plus courts chemins : poids < 0. Tous les plus courts chemins. Techniques algorithmiques. Plus courts chemins : poids < 0. • L’algorithme de Dijkstra fonctionne bien tant qu’il n’y a pas de poids négatifs dans notre graphe ; • Cela n’arrive pas dans le cas de distances ; quand pourrait-on en avoir ? • quand les poids correspondent à des dépenses énergétiques ; • quand les poids correspondent à des coûts ou à des remises ; • .... • Comme on va le voir, l’algorithme de Dijkstra n’est plus fiable dans ces cas-là ;. 22.

(23) Plus courts chemins : poids < 0. Tous les plus courts chemins. Techniques algorithmiques. Dijkstra en présence de poids < 0. Exemple 1 (plus courts chemins depuis a) c. 2. −10. 2. b 1. d a. 3. étape. a. b. c. d. 0 1 2 3 4. 0 0 0 0 0. +∞ 1 1 1 1. +∞ 2 2 2 -7. +∞ 3 3 3 3. 23.

(24) Plus courts chemins : poids < 0. Tous les plus courts chemins. Techniques algorithmiques. Dijkstra en présence de poids < 0. Exemple 1 (plus courts chemins depuis a) c. 2. −10. 2. b 1. d a. 3. étape. a. b. c. d. 0 1 2 3 4. 0 0 0 0 0. +∞ 1 1 1 1. +∞ 2 2 2 -7. +∞ 3 3 3 3. 24.

(25) Plus courts chemins : poids < 0. Tous les plus courts chemins. Techniques algorithmiques. Dijkstra en présence de poids < 0. Exemple 1 (plus courts chemins depuis a) c. 2. −10. 2. b 1. d a. 3. étape. a. b. c. d. 0 1 2 3 4. 0 0 0 0 0. +∞ 1 1 1 1. +∞ 2 2 2 -7. +∞ 3 3 3 3. 25.

(26) Plus courts chemins : poids < 0. Tous les plus courts chemins. Techniques algorithmiques. Dijkstra en présence de poids < 0. Exemple 1 (plus courts chemins depuis a) c. 2. −10. 2. b 1. d a. 3. étape. a. b. c. d. 0 1 2 3 4. 0 0 0 0 0. +∞ 1 1 1 1. +∞ 2 2 2 -7. +∞ 3 3 3 3. 26.

(27) Plus courts chemins : poids < 0. Tous les plus courts chemins. Techniques algorithmiques. Dijkstra en présence de poids < 0. Exemple 1 (plus courts chemins depuis a) c. 2. −10. 2. b 1. d a. 3. étape. a. b. c. d. 0 1 2 3 4. 0 0 0 0 0. +∞ 1 1 1 1. +∞ 2 2 2 -7. +∞ 3 3 3 3. 27.

(28) Plus courts chemins : poids < 0. Tous les plus courts chemins. Techniques algorithmiques. Dijkstra en présence de poids < 0. Exemple 1 (plus courts chemins depuis a) c. 2. −10. 2. b 1. d a. 3. étape. a. b. c. d. 0 1 2 3 4. 0 0 0 0 0. +∞ 1 1 1 1. +∞ 2 2 2 -7. +∞ 3 3 3 3. 28.

(29) Plus courts chemins : poids < 0. Tous les plus courts chemins. Techniques algorithmiques. Dijkstra en présence de poids < 0. Exemple 1 (plus courts chemins depuis a) c. 2. −10. 2. b 1. d a. 3. étape. a. b. c. d. 0 1 2 3 4. 0 0 0 0 0. +∞ 1 1 1 1. +∞ 2 2 2 -7. +∞ 3 3 3 3. 29.

(30) Plus courts chemins : poids < 0. Tous les plus courts chemins. Techniques algorithmiques. Dijkstra en présence de poids < 0. Exemple 1 (plus courts chemins depuis a) c. 2. −10. 2. b 1. d a. 3. étape. a. b. c. d. 0 1 2 3 4. 0 0 0 0 0. +∞ 1 1 1 1. +∞ 2 2 2 -7. +∞ 3 3 3 3. 30.

(31) Plus courts chemins : poids < 0. Tous les plus courts chemins. Techniques algorithmiques. Dijkstra en présence de poids < 0. Exemple 1 (plus courts chemins depuis a) c. 2. −10. 2. b 1. d a. 3. étape. a. b. c. d. 0 1 2 3 4. 0 0 0 0 0. +∞ 1 1 1 1. +∞ 2 2 2 -7. +∞ 3 3 3 3. 31.

(32) Plus courts chemins : poids < 0. Tous les plus courts chemins. Techniques algorithmiques. Dijkstra en présence de poids < 0. Exemple 1 (plus courts chemins depuis a) c. 2. −10. 2. b 1. d a. 3. étape. a. b. c. d. 0 1 2 3 4. 0 0 0 0 0. +∞ 1 1 1 1. +∞ 2 2 2 -7. +∞ 3 3 3 3. On rate le chemin optimal a. d. c. b de poids −5.. 32.

(33) Plus courts chemins : poids < 0. Tous les plus courts chemins. Techniques algorithmiques. Problèmes de Dijkstra. • En l’absence de poids négatifs, Dijkstra s’en sortait puisqu’il n’était pas nécessaire de revenir sur ses décisions ;. 33.

(34) Plus courts chemins : poids < 0. Tous les plus courts chemins. Techniques algorithmiques. Problèmes de Dijkstra. • En l’absence de poids négatifs, Dijkstra s’en sortait puisqu’il n’était pas nécessaire de revenir sur ses décisions ; • Dans le contre-exemple, un arc de poids < 0 nous a permis de trouver un meilleur chemin ;. 34.

(35) Plus courts chemins : poids < 0. Tous les plus courts chemins. Techniques algorithmiques. Problèmes de Dijkstra. • En l’absence de poids négatifs, Dijkstra s’en sortait puisqu’il n’était pas nécessaire de revenir sur ses décisions ; • Dans le contre-exemple, un arc de poids < 0 nous a permis de trouver un meilleur chemin ; • Mais comme l’algorithme se termine, les autres chemins n’en bénéficieront pas ;. 35.

(36) Plus courts chemins : poids < 0. Tous les plus courts chemins. Techniques algorithmiques. Problèmes de Dijkstra. • En l’absence de poids négatifs, Dijkstra s’en sortait puisqu’il n’était pas nécessaire de revenir sur ses décisions ; • Dans le contre-exemple, un arc de poids < 0 nous a permis de trouver un meilleur chemin ; • Mais comme l’algorithme se termine, les autres chemins n’en bénéficieront pas ; • L’algorithme de Bellman-Ford règlera ce problème en examinant les arcs plusieurs fois ;. 36.

(37) Plus courts chemins : poids < 0. Tous les plus courts chemins. Techniques algorithmiques. L’algorithme de Bellman-Ford. • L’algorithme de Bellman-Ford recherche également des raccourcis entre les sommets ;.

(38) Plus courts chemins : poids < 0. Tous les plus courts chemins. Techniques algorithmiques. L’algorithme de Bellman-Ford. • L’algorithme de Bellman-Ford recherche également des raccourcis entre les sommets ; • Le fonctionnement est différent de celui de Dijkstra, qui cherchait des chemins moins coûteux de la source s à un sommet u en passant par un autre sommet v ;.

(39) Plus courts chemins : poids < 0. Tous les plus courts chemins. Techniques algorithmiques. L’algorithme de Bellman-Ford. • L’algorithme de Bellman-Ford recherche également des raccourcis entre les sommets ; • Le fonctionnement est différent de celui de Dijkstra, qui cherchait des chemins moins coûteux de la source s à un sommet u en passant par un autre sommet v ; • Ici, on vérifie pour chaque arc (u, v ) s’il existe un chemin moins coûteux de u à v ;.

(40) Plus courts chemins : poids < 0. Tous les plus courts chemins. Techniques algorithmiques. L’algorithme de Bellman-Ford. • L’algorithme de Bellman-Ford recherche également des raccourcis entre les sommets ; • Le fonctionnement est différent de celui de Dijkstra, qui cherchait des chemins moins coûteux de la source s à un sommet u en passant par un autre sommet v ; • Ici, on vérifie pour chaque arc (u, v ) s’il existe un chemin moins coûteux de u à v ; • On examine l’ensemble de tous les arcs |V | fois..

(41) Plus courts chemins : poids < 0. Tous les plus courts chemins. Techniques algorithmiques. Déroulement de l’algorithme de Bellman-Ford On examine les arcs dans l’ordre lexicographique : (s, t), (s, y ), (t, x), (t, y ), (t, z), (x, t), (y , x), (y , z), (z, x).. Les coulisses. Exemple 2 (source = s) z 9 y. 7. −3 −4. 7. x. 8 5 s. −2. 6 t. étape. s. t. x. y. z. (a). 0. +∞. +∞. +∞. +∞. (b). 0. 6. 4. 7. 2. (c). 0. 2. 4. 7. 2.

(42) Plus courts chemins : poids < 0. Tous les plus courts chemins. Techniques algorithmiques. Déroulement de l’algorithme de Bellman-Ford On examine les arcs dans l’ordre lexicographique : (s, t), (s, y ), (t, x), (t, y ), (t, z), (x, t), (y , x), (y , z), (z, x).. Les coulisses. Exemple 2 (source = s) z 9 y. 7. −3 −4. 7. x. 8 5 s. −2. 6 t. étape. s. t. x. y. z. (a). 0. +∞. +∞. +∞. +∞. (b). 0. 6. 4. 7. 2. (c). 0. 2. 4. 7. 2.

(43) Plus courts chemins : poids < 0. Tous les plus courts chemins. Techniques algorithmiques. Déroulement de l’algorithme de Bellman-Ford On examine les arcs dans l’ordre lexicographique : (s, t), (s, y ), (t, x), (t, y ), (t, z), (x, t), (y , x), (y , z), (z, x).. Les coulisses. Exemple 2 (source = s) z 9 y. 7. −3 −4. 7. x. 8 5 s. −2. 6 t. étape. s. t. x. y. z. (a). 0. 6. +∞. +∞. +∞. (b). 0. 6. 4. 7. 2. (c). 0. 2. 4. 7. 2.

(44) Plus courts chemins : poids < 0. Tous les plus courts chemins. Techniques algorithmiques. Déroulement de l’algorithme de Bellman-Ford On examine les arcs dans l’ordre lexicographique : (s, t), (s, y ), (t, x), (t, y ), (t, z), (x, t), (y , x), (y , z), (z, x).. Les coulisses. Exemple 2 (source = s) z 9 y. 7. −3 −4. 7. x. 8 5 s. −2. 6 t. étape. s. t. x. y. z. (a). 0. 6. +∞. 7. +∞. (b). 0. 6. 4. 7. 2. (c). 0. 2. 4. 7. 2.

(45) Plus courts chemins : poids < 0. Tous les plus courts chemins. Techniques algorithmiques. Déroulement de l’algorithme de Bellman-Ford On examine les arcs dans l’ordre lexicographique : (s, t), (s, y ), (t, x), (t, y ), (t, z), (x, t), (y , x), (y , z), (z, x).. Les coulisses. Exemple 2 (source = s) z 9 y. 7. −3 −4. 7. x. 8 5 s. −2. 6 t. étape. s. t. x. y. z. (a). 0. 6. 11. 7. +∞. (b). 0. 6. 4. 7. 2. (c). 0. 2. 4. 7. 2.

(46) Plus courts chemins : poids < 0. Tous les plus courts chemins. Techniques algorithmiques. Déroulement de l’algorithme de Bellman-Ford On examine les arcs dans l’ordre lexicographique : (s, t), (s, y ), (t, x), (t, y ), (t, z), (x, t), (y , x), (y , z), (z, x).. Les coulisses. Exemple 2 (source = s) z 9 y. 7. −3 −4. 7. x. 8 5 s. −2. 6 t. étape. s. t. x. y. z. (a). 0. 6. 11. 7. +∞. (b). 0. 6. 4. 7. 2. (c). 0. 2. 4. 7. 2.

(47) Plus courts chemins : poids < 0. Tous les plus courts chemins. Techniques algorithmiques. Déroulement de l’algorithme de Bellman-Ford On examine les arcs dans l’ordre lexicographique : (s, t), (s, y ), (t, x), (t, y ), (t, z), (x, t), (y , x), (y , z), (z, x).. Les coulisses. Exemple 2 (source = s) z 9 y. 7. −3 −4. 7. x. 8 5 s. −2. 6 t. étape. s. t. x. y. (a). 0. 6. 11. 7. z 2. (b). 0. 6. 4. 7. 2. (c). 0. 2. 4. 7. 2.

(48) Plus courts chemins : poids < 0. Tous les plus courts chemins. Techniques algorithmiques. Déroulement de l’algorithme de Bellman-Ford On examine les arcs dans l’ordre lexicographique : (s, t), (s, y ), (t, x), (t, y ), (t, z), (x, t), (y , x), (y , z), (z, x).. Les coulisses. Exemple 2 (source = s) z 9 y. 7. −3 −4. 7. x. 8 5 s. −2. 6 t. étape. s. t. x. y. (a). 0. 6. 11. 7. z 2. (b). 0. 6. 4. 7. 2. (c). 0. 2. 4. 7. 2.

(49) Plus courts chemins : poids < 0. Tous les plus courts chemins. Techniques algorithmiques. Déroulement de l’algorithme de Bellman-Ford On examine les arcs dans l’ordre lexicographique : (s, t), (s, y ), (t, x), (t, y ), (t, z), (x, t), (y , x), (y , z), (z, x).. Les coulisses. Exemple 2 (source = s) z 9 y. 7. −3 −4. 7. x. 8 5 s. −2. 6 t. étape. s. t. x. y. (a). 0. 6. 4. 7. z 2. (b). 0. 6. 4. 7. 2. (c). 0. 2. 4. 7. 2.

(50) Plus courts chemins : poids < 0. Tous les plus courts chemins. Techniques algorithmiques. Déroulement de l’algorithme de Bellman-Ford On examine les arcs dans l’ordre lexicographique : (s, t), (s, y ), (t, x), (t, y ), (t, z), (x, t), (y , x), (y , z), (z, x).. Les coulisses. Exemple 2 (source = s) z 9 y. 7. −3 −4. 7. x. 8 5 s. −2. 6 t. étape. s. t. x. y. (a). 0. 6. 4. 7. z 2. (b). 0. 6. 4. 7. 2. (c). 0. 2. 4. 7. 2.

(51) Plus courts chemins : poids < 0. Tous les plus courts chemins. Techniques algorithmiques. Déroulement de l’algorithme de Bellman-Ford On examine les arcs dans l’ordre lexicographique : (s, t), (s, y ), (t, x), (t, y ), (t, z), (x, t), (y , x), (y , z), (z, x).. Les coulisses. Exemple 2 (source = s) z 9 y. 7. −3 −4. 7. x. 8 5 s. −2. 6 t. étape. s. t. x. y. (a). 0. 6. 4. 7. z 2. (b). 0. 6. 4. 7. 2. (c). 0. 2. 4. 7. 2.

(52) Plus courts chemins : poids < 0. Tous les plus courts chemins. Techniques algorithmiques. Déroulement de l’algorithme de Bellman-Ford On examine les arcs dans l’ordre lexicographique : (s, t), (s, y ), (t, x), (t, y ), (t, z), (x, t), (y , x), (y , z), (z, x).. Les coulisses. Exemple 2 (source = s) z 9 y. 7. −3 −4. 7. x. 8 5 s. −2. 6 t. étape. s. t. x. y. (a). 0. 6. 4. 7. z 2. (b). 0. 6. 4. 7. 2. (c). 0. 2. 4. 7. 2.

(53) Plus courts chemins : poids < 0. Tous les plus courts chemins. Techniques algorithmiques. Déroulement de l’algorithme de Bellman-Ford On examine les arcs dans l’ordre lexicographique : (s, t), (s, y ), (t, x), (t, y ), (t, z), (x, t), (y , x), (y , z), (z, x).. Les coulisses. Exemple 2 (source = s) z 9 y. 7. −3 −4. 7. x. 8 5 s. −2. 6 t. étape. s. t. x. y. (a). 0. 6. 4. 7. z 2. (b). 0. 6. 4. 7. 2. (c). 0. 2. 4. 7. 2.

(54) Plus courts chemins : poids < 0. Tous les plus courts chemins. Techniques algorithmiques. Déroulement de l’algorithme de Bellman-Ford On examine les arcs dans l’ordre lexicographique : (s, t), (s, y ), (t, x), (t, y ), (t, z), (x, t), (y , x), (y , z), (z, x).. Les coulisses. Exemple 2 (source = s) z 9 y. 7. −3 −4. 7. x. 8 5 s. −2. 6 t. étape. s. t. x. y. (a). 0. 6. 4. 7. z 2. (b). 0. 6. 4. 7. 2. (c). 0. 2. 4. 7. 2.

(55) Plus courts chemins : poids < 0. Tous les plus courts chemins. Techniques algorithmiques. Déroulement de l’algorithme de Bellman-Ford On examine les arcs dans l’ordre lexicographique : (s, t), (s, y ), (t, x), (t, y ), (t, z), (x, t), (y , x), (y , z), (z, x).. Les coulisses. Exemple 2 (source = s) z 9 y. 7. −3 −4. 7. x. 8 5 s. −2. 6 t. étape. s. t. x. y. (a). 0. 6. 4. 7. z 2. (b). 0. 6. 4. 7. 2. (c). 0. 2. 4. 7. 2.

(56) Plus courts chemins : poids < 0. Tous les plus courts chemins. Techniques algorithmiques. Déroulement de l’algorithme de Bellman-Ford On examine les arcs dans l’ordre lexicographique : (s, t), (s, y ), (t, x), (t, y ), (t, z), (x, t), (y , x), (y , z), (z, x).. Les coulisses. Exemple 2 (source = s) z 9 y. 7. −3 −4. 7. x. 8 5 s. −2. 6 t. étape. s. t. x. y. (a). 0. 6. 4. 7. z 2. (b). 0. 6. 4. 7. 2. (c). 0. 2. 4. 7. 2.

(57) Plus courts chemins : poids < 0. Tous les plus courts chemins. Techniques algorithmiques. Déroulement de l’algorithme de Bellman-Ford On examine les arcs dans l’ordre lexicographique : (s, t), (s, y ), (t, x), (t, y ), (t, z), (x, t), (y , x), (y , z), (z, x).. Les coulisses. Exemple 2 (source = s) z 9 y. 7. −3 −4. 7. x. 8 5 s. −2. 6 t. étape. s. t. x. y. (a). 0. 6. 4. 7. z 2. (b). 0. 6. 4. 7. 2. (c). 0. 2. 4. 7. 2.

(58) Plus courts chemins : poids < 0. Tous les plus courts chemins. Techniques algorithmiques. Déroulement de l’algorithme de Bellman-Ford On examine les arcs dans l’ordre lexicographique : (s, t), (s, y ), (t, x), (t, y ), (t, z), (x, t), (y , x), (y , z), (z, x).. Les coulisses. Exemple 2 (source = s) z 9 y. 7. −3 −4. 7. x. 8 5 s. −2. 6 t. étape. s. t. x. y. (a). 0. 6. 4. 7. z 2. (b). 0. 6. 4. 7. 2. (c). 0. 2. 4. 7. 2.

(59) Plus courts chemins : poids < 0. Tous les plus courts chemins. Techniques algorithmiques. Déroulement de l’algorithme de Bellman-Ford On examine les arcs dans l’ordre lexicographique : (s, t), (s, y ), (t, x), (t, y ), (t, z), (x, t), (y , x), (y , z), (z, x).. Les coulisses. Exemple 2 (source = s) z 9 y. 7. −3 −4. 7. x. 8 5 s. −2. 6 t. étape. s. t. x. y. (a). 0. 6. 4. 7. z 2. (b). 0. 2. 4. 7. 2. (c). 0. 2. 4. 7. 2.

(60) Plus courts chemins : poids < 0. Tous les plus courts chemins. Techniques algorithmiques. Déroulement de l’algorithme de Bellman-Ford On examine les arcs dans l’ordre lexicographique : (s, t), (s, y ), (t, x), (t, y ), (t, z), (x, t), (y , x), (y , z), (z, x).. Les coulisses. Exemple 2 (source = s) z 9 y. 7. −3 −4. 7. x. 8 5 s. −2. 6 t. étape. s. t. x. y. (a). 0. 6. 4. 7. z 2. (b). 0. 2. 4. 7. 2. (c). 0. 2. 4. 7. 2.

(61) Plus courts chemins : poids < 0. Tous les plus courts chemins. Techniques algorithmiques. Déroulement de l’algorithme de Bellman-Ford On examine les arcs dans l’ordre lexicographique : (s, t), (s, y ), (t, x), (t, y ), (t, z), (x, t), (y , x), (y , z), (z, x).. Les coulisses. Exemple 2 (source = s) z 9 y. 7. −3 −4. 7. x. 8 5 s. −2. 6 t. étape. s. t. x. y. (a). 0. 6. 4. 7. z 2. (b). 0. 2. 4. 7. 2. (c). 0. 2. 4. 7. 2.

(62) Plus courts chemins : poids < 0. Tous les plus courts chemins. Techniques algorithmiques. Déroulement de l’algorithme de Bellman-Ford On examine les arcs dans l’ordre lexicographique : (s, t), (s, y ), (t, x), (t, y ), (t, z), (x, t), (y , x), (y , z), (z, x).. Les coulisses. Exemple 2 (source = s) z 9 y. 7. −3 −4. 7. x. 8 5 s. −2. 6 t. étape. s. t. x. y. (a). 0. 6. 4. 7. z 2. (b). 0. 2. 4. 7. 2. (c). 0. 2. 4. 7. 2.

(63) Plus courts chemins : poids < 0. Tous les plus courts chemins. Techniques algorithmiques. Déroulement de l’algorithme de Bellman-Ford On examine les arcs dans l’ordre lexicographique : (s, t), (s, y ), (t, x), (t, y ), (t, z), (x, t), (y , x), (y , z), (z, x).. Les coulisses. Exemple 2 (source = s) z 9 y. 7. −3 −4. 7. x. 8 5 s. −2. 6 t. étape. s. t. x. y. (a). 0. 6. 4. 7. z 2. (b). 0. 2. 4. 7. 2. (c). 0. 2. 4. 7. 2.

(64) Plus courts chemins : poids < 0. Tous les plus courts chemins. Techniques algorithmiques. Déroulement de l’algorithme de Bellman-Ford On examine les arcs dans l’ordre lexicographique : (s, t), (s, y ), (t, x), (t, y ), (t, z), (x, t), (y , x), (y , z), (z, x).. Les coulisses. Exemple 2 (source = s) z 9 y. 7. −3 −4. 7. x. 8 5 s. −2. 6 t. étape. s. t. x. y. (a). 0. 6. 4. 7. z 2. (b). 0. 2. 4. 7. 2. (c). 0. 2. 4. 7. 2.

(65) Plus courts chemins : poids < 0. Tous les plus courts chemins. Techniques algorithmiques. Déroulement de l’algorithme de Bellman-Ford On examine les arcs dans l’ordre lexicographique : (s, t), (s, y ), (t, x), (t, y ), (t, z), (x, t), (y , x), (y , z), (z, x).. Les coulisses. Exemple 2 (source = s) z 9 y. 7. −3 −4. 7. x. 8 5 s. −2. 6 t. étape. s. t. x. y. (a). 0. 6. 4. 7. z 2. (b). 0. 2. 4. 7. 2. (c). 0. 2. 4. 7. 2.

(66) Plus courts chemins : poids < 0. Tous les plus courts chemins. Techniques algorithmiques. Déroulement de l’algorithme de Bellman-Ford On examine les arcs dans l’ordre lexicographique : (s, t), (s, y ), (t, x), (t, y ), (t, z), (x, t), (y , x), (y , z), (z, x).. Les coulisses. Exemple 2 (source = s) z 9 y. 7. −3 −4. 7. x. 8 5 s. −2. 6 t. étape. s. t. x. y. (a). 0. 6. 4. 7. z 2. (b). 0. 2. 4. 7. 2. (c). 0. 2. 4. 7. 2.

(67) Plus courts chemins : poids < 0. Tous les plus courts chemins. Techniques algorithmiques. Déroulement de l’algorithme de Bellman-Ford On examine les arcs dans l’ordre lexicographique : (s, t), (s, y ), (t, x), (t, y ), (t, z), (x, t), (y , x), (y , z), (z, x).. Les coulisses. Exemple 2 (source = s) z 9 y. 7. −3 −4. 7. x. 8 5 s. −2. 6 t. étape. s. t. x. y. (a). 0. 6. 4. 7. z 2. (b). 0. 2. 4. 7. 2. (c). 0. 2. 4. 7. 2.

(68) Plus courts chemins : poids < 0. Tous les plus courts chemins. Techniques algorithmiques. Déroulement de l’algorithme de Bellman-Ford On examine les arcs dans l’ordre lexicographique : (s, t), (s, y ), (t, x), (t, y ), (t, z), (x, t), (y , x), (y , z), (z, x).. Les coulisses. Exemple 2 (source = s) z 9 y. 7. −3 −4. 7. x. 8 5 s. −2. 6 t. étape. s. t. x. y. (a). 0. 6. 4. 7. z 2. (b). 0. 2. 4. 7. 2. (c). 0. 2. 4. 7. 2.

(69) Plus courts chemins : poids < 0. Tous les plus courts chemins. Techniques algorithmiques. Déroulement de l’algorithme de Bellman-Ford On examine les arcs dans l’ordre lexicographique : (s, t), (s, y ), (t, x), (t, y ), (t, z), (x, t), (y , x), (y , z), (z, x).. Les coulisses. Exemple 2 (source = s) z 9 y. 7. −3 −4. 7. x. 8 5 s. −2. 6 t. étape. s. t. x. y. (a). 0. 6. 4. 7. z 2. (b). 0. 2. 4. 7. 2. (c). 0. 2. 4. 7. -2.

(70) Plus courts chemins : poids < 0. Tous les plus courts chemins. Techniques algorithmiques. Déroulement de l’algorithme de Bellman-Ford On examine les arcs dans l’ordre lexicographique : (s, t), (s, y ), (t, x), (t, y ), (t, z), (x, t), (y , x), (y , z), (z, x).. Les coulisses. Exemple 2 (source = s) z 9 y. 7. −3 −4. 7. x. 8 5 s. −2. 6 t. étape. s. t. x. y. (a). 0. 6. 4. 7. z 2. (b). 0. 2. 4. 7. 2. (c). 0. 2. 4. 7. -2.

(71) Plus courts chemins : poids < 0. Tous les plus courts chemins. Techniques algorithmiques. Déroulement de l’algorithme de Bellman-Ford On examine les arcs dans l’ordre lexicographique : (s, t), (s, y ), (t, x), (t, y ), (t, z), (x, t), (y , x), (y , z), (z, x).. Les coulisses. Exemple 2 (source = s) z 9 y. 7. −3 −4. 7. x. 8 5 s. −2. 6 t. étape. s. t. x. y. (a). 0. 6. 4. 7. z 2. (b). 0. 2. 4. 7. 2. (c). 0. 2. 4. 7. -2.

(72) Plus courts chemins : poids < 0. Tous les plus courts chemins. Techniques algorithmiques. Déroulement de l’algorithme de Bellman-Ford On examine les arcs dans l’ordre lexicographique : (s, t), (s, y ), (t, x), (t, y ), (t, z), (x, t), (y , x), (y , z), (z, x).. Les coulisses. Exemple 2 (source = s) z 9 y. 7. −3 −4. 7. x. 8 5 s. −2. 6 t. étape. s. t. x. y. (a). 0. 6. 4. 7. z 2. (b). 0. 2. 4. 7. 2. (c). 0. 2. 4. 7. -2.

(73) Plus courts chemins : poids < 0. Tous les plus courts chemins. Techniques algorithmiques. Déroulement de l’algorithme de Bellman-Ford On examine les arcs dans l’ordre lexicographique : (s, t), (s, y ), (t, x), (t, y ), (t, z), (x, t), (y , x), (y , z), (z, x).. Les coulisses. Exemple 2 (source = s) z 9 y. 7. −3 −4. 7. x. 8 5 s. −2. 6 t. étape. s. t. x. y. (a). 0. 6. 4. 7. z 2. (b). 0. 2. 4. 7. 2. (c). 0. 2. 4. 7. -2.

(74) Plus courts chemins : poids < 0. Tous les plus courts chemins. Techniques algorithmiques. Déroulement de l’algorithme de Bellman-Ford On examine les arcs dans l’ordre lexicographique : (s, t), (s, y ), (t, x), (t, y ), (t, z), (x, t), (y , x), (y , z), (z, x).. Les coulisses. Exemple 2 (source = s) z 9 y. 7. −3. étape. s. t. x. y. (a). 0. 6. 4. 7. z 2. (b). 0. 2. 4. 7. 2. (c). 0. 2. 4. 7. -2. (les étapes suivantes ne changent plus rien). −4. 7. x. 8 5 s. −2. 6 t.

(75) Plus courts chemins : poids < 0. Tous les plus courts chemins. Techniques algorithmiques. Déroulement de l’algorithme de Bellman-Ford On examine les arcs dans l’ordre lexicographique : (s, t), (s, y ), (t, x), (t, y ), (t, z), (x, t), (y , x), (y , z), (z, x).. Les coulisses. Exemple 2 (source = s) z 9 y. 7. −3. étape. s. t. x. y. (a). 0. 6. 4. 7. z 2. (b). 0. 2. 4. 7. 2. (c). 0. 2. 4. 7. -2. (les étapes suivantes ne changent plus rien). −4. 7. x. 8 5 s. −2. 6 t.

(76) Plus courts chemins : poids < 0. Tous les plus courts chemins. Techniques algorithmiques. En “pratique” (enfin, dans les exercices . . . ) Le déroulement complet étant long, on ne vous demandera généralement les détails que pour une passe sur tous les arcs. z 9 y. 7 −3. −4. 7. x. 8 5 s. −2. 6 t. étape. s. t. x. y. z. 0. 0. +∞. +∞. +∞. +∞. après traitement des arcs issus de ... (étape finale). 1. 0. 6. +∞. 7. +∞. s : (s, t), (s, y ). 0. 6. 11. 7. 2. t : (t, x), (t, y ), (t, z). 0. 6. 11. 7. 2. x : (x, t). 0. 6. 4. 7. 2. y : (y , x), (y , z). 0. 6. 4. 7. 2. z : (z, x). 2. 0. 2. 4. 7. 2. (étape finale). 3. 0. 2. 4. 7. -2. (étape finale). 4. 0. 2. 4. 7. -2. (étape finale). 5. 0. 2. 4. 7. -2. (étape finale). 76.

(77) Plus courts chemins : poids < 0. Tous les plus courts chemins. Techniques algorithmiques. En “pratique” (enfin, dans les exercices . . . ) Le déroulement complet étant long, on ne vous demandera généralement les détails que pour une passe sur tous les arcs. z 9 y. 7 −3. −4. 7. x. 8 5 s. −2. 6 t. étape. s. t. x. y. z. 0. 0. +∞. +∞. +∞. +∞. après traitement des arcs issus de ... (étape finale). 1. 0. 6. +∞. 7. +∞. s : (s, t), (s, y ). 0. 6. 11. 7. 2. t : (t, x), (t, y ), (t, z). 0. 6. 11. 7. 2. x : (x, t). 0. 6. 4. 7. 2. y : (y , x), (y , z). 0. 6. 4. 7. 2. z : (z, x). 2. 0. 2. 4. 7. 2. (étape finale). 3. 0. 2. 4. 7. -2. (étape finale). 4. 0. 2. 4. 7. -2. (étape finale). 5. 0. 2. 4. 7. -2. (étape finale). 77.

(78) Plus courts chemins : poids < 0. Tous les plus courts chemins. Techniques algorithmiques. En “pratique” (enfin, dans les exercices . . . ) Le déroulement complet étant long, on ne vous demandera généralement les détails que pour une passe sur tous les arcs. z 9 y. 7 −3. −4. 7. x. 8 5 s. −2. 6 t. étape. s. t. x. y. z. 0. 0. +∞. +∞. +∞. +∞. après traitement des arcs issus de ... (étape finale). 1. 0. 6. +∞. 7. +∞. s : (s, t), (s, y ). 0. 6. 11. 7. 2. t : (t, x), (t, y ), (t, z). 0. 6. 11. 7. 2. x : (x, t). 0. 6. 4. 7. 2. y : (y , x), (y , z). 0. 6. 4. 7. 2. z : (z, x). 2. 0. 2. 4. 7. 2. (étape finale). 3. 0. 2. 4. 7. -2. (étape finale). 4. 0. 2. 4. 7. -2. (étape finale). 5. 0. 2. 4. 7. -2. (étape finale). 78.

(79) Plus courts chemins : poids < 0. Tous les plus courts chemins. Techniques algorithmiques. En “pratique” (enfin, dans les exercices . . . ) Le déroulement complet étant long, on ne vous demandera généralement les détails que pour une passe sur tous les arcs. z 9 y. 7 −3. −4. 7. x. 8 5 s. −2. 6 t. étape. s. t. x. y. z. 0. 0. +∞. +∞. +∞. +∞. après traitement des arcs issus de ... (étape finale). 1. 0. 6. +∞. 7. +∞. s : (s, t), (s, y ). 0. 6. 11. 7. 2. t : (t, x), (t, y ), (t, z). 0. 6. 11. 7. 2. x : (x, t). 0. 6. 4. 7. 2. y : (y , x), (y , z). 0. 6. 4. 7. 2. z : (z, x). 2. 0. 2. 4. 7. 2. (étape finale). 3. 0. 2. 4. 7. -2. (étape finale). 4. 0. 2. 4. 7. -2. (étape finale). 5. 0. 2. 4. 7. -2. (étape finale). 79.

(80) Plus courts chemins : poids < 0. Tous les plus courts chemins. Techniques algorithmiques. En “pratique” (enfin, dans les exercices . . . ) Le déroulement complet étant long, on ne vous demandera généralement les détails que pour une passe sur tous les arcs. z 9 y. 7 −3. −4. 7. x. 8 5 s. −2. 6 t. étape. s. t. x. y. z. 0. 0. +∞. +∞. +∞. +∞. après traitement des arcs issus de ... (étape finale). 1. 0. 6. +∞. 7. +∞. s : (s, t), (s, y ). 0. 6. 11. 7. 2. t : (t, x), (t, y ), (t, z). 0. 6. 11. 7. 2. x : (x, t). 0. 6. 4. 7. 2. y : (y , x), (y , z). 0. 6. 4. 7. 2. z : (z, x). 2. 0. 2. 4. 7. 2. (étape finale). 3. 0. 2. 4. 7. -2. (étape finale). 4. 0. 2. 4. 7. -2. (étape finale). 5. 0. 2. 4. 7. -2. (étape finale). 80.

(81) Plus courts chemins : poids < 0. Tous les plus courts chemins. Techniques algorithmiques. En “pratique” (enfin, dans les exercices . . . ) Le déroulement complet étant long, on ne vous demandera généralement les détails que pour une passe sur tous les arcs. z 9 y. 7 −3. −4. 7. x. 8 5 s. −2. 6 t. étape. s. t. x. y. z. 0. 0. +∞. +∞. +∞. +∞. après traitement des arcs issus de ... (étape finale). 1. 0. 6. +∞. 7. +∞. s : (s, t), (s, y ). 0. 6. 11. 7. 2. t : (t, x), (t, y ), (t, z). 0. 6. 11. 7. 2. x : (x, t). 0. 6. 4. 7. 2. y : (y , x), (y , z). 0. 6. 4. 7. 2. z : (z, x). 2. 0. 2. 4. 7. 2. (étape finale). 3. 0. 2. 4. 7. -2. (étape finale). 4. 0. 2. 4. 7. -2. (étape finale). 5. 0. 2. 4. 7. -2. (étape finale). 81.

(82) Plus courts chemins : poids < 0. Tous les plus courts chemins. Techniques algorithmiques. En “pratique” (enfin, dans les exercices . . . ) Le déroulement complet étant long, on ne vous demandera généralement les détails que pour une passe sur tous les arcs. z 9 y. 7 −3. −4. 7. x. 8 5 s. −2. 6 t. étape. s. t. x. y. z. 0. 0. +∞. +∞. +∞. +∞. après traitement des arcs issus de ... (étape finale). 1. 0. 6. +∞. 7. +∞. s : (s, t), (s, y ). 0. 6. 11. 7. 2. t : (t, x), (t, y ), (t, z). 0. 6. 11. 7. 2. x : (x, t). 0. 6. 4. 7. 2. y : (y , x), (y , z). 0. 6. 4. 7. 2. z : (z, x). 2. 0. 2. 4. 7. 2. (étape finale). 3. 0. 2. 4. 7. -2. (étape finale). 4. 0. 2. 4. 7. -2. (étape finale). 5. 0. 2. 4. 7. -2. (étape finale). 82.

(83) Plus courts chemins : poids < 0. Tous les plus courts chemins. Techniques algorithmiques. En “pratique” (enfin, dans les exercices . . . ) Le déroulement complet étant long, on ne vous demandera généralement les détails que pour une passe sur tous les arcs. z 9 y. 7 −3. −4. 7. x. 8 5 s. −2. 6 t. étape. s. t. x. y. z. 0. 0. +∞. +∞. +∞. +∞. après traitement des arcs issus de ... (étape finale). 1. 0. 6. +∞. 7. +∞. s : (s, t), (s, y ). 0. 6. 11. 7. 2. t : (t, x), (t, y ), (t, z). 0. 6. 11. 7. 2. x : (x, t). 0. 6. 4. 7. 2. y : (y , x), (y , z). 0. 6. 4. 7. 2. z : (z, x). 2. 0. 2. 4. 7. 2. (étape finale). 3. 0. 2. 4. 7. -2. (étape finale). 4. 0. 2. 4. 7. -2. (étape finale). 5. 0. 2. 4. 7. -2. (étape finale). 83.

(84) Plus courts chemins : poids < 0. Tous les plus courts chemins. Techniques algorithmiques. En “pratique” (enfin, dans les exercices . . . ) Le déroulement complet étant long, on ne vous demandera généralement les détails que pour une passe sur tous les arcs. z 9 y. 7 −3. −4. 7. x. 8 5 s. −2. 6 t. étape. s. t. x. y. z. 0. 0. +∞. +∞. +∞. +∞. après traitement des arcs issus de ... (étape finale). 1. 0. 6. +∞. 7. +∞. s : (s, t), (s, y ). 0. 6. 11. 7. 2. t : (t, x), (t, y ), (t, z). 0. 6. 11. 7. 2. x : (x, t). 0. 6. 4. 7. 2. y : (y , x), (y , z). 0. 6. 4. 7. 2. z : (z, x). 2. 0. 2. 4. 7. 2. (étape finale). 3. 0. 2. 4. 7. -2. (étape finale). 4. 0. 2. 4. 7. -2. (étape finale). 5. 0. 2. 4. 7. -2. (étape finale). 84.

(85) Plus courts chemins : poids < 0. Tous les plus courts chemins. Techniques algorithmiques. En “pratique” (enfin, dans les exercices . . . ) Le déroulement complet étant long, on ne vous demandera généralement les détails que pour une passe sur tous les arcs. z 9 y. 7 −3. −4. 7. x. 8 5 s. −2. 6 t. étape. s. t. x. y. z. 0. 0. +∞. +∞. +∞. +∞. après traitement des arcs issus de ... (étape finale). 1. 0. 6. +∞. 7. +∞. s : (s, t), (s, y ). 0. 6. 11. 7. 2. t : (t, x), (t, y ), (t, z). 0. 6. 11. 7. 2. x : (x, t). 0. 6. 4. 7. 2. y : (y , x), (y , z). 0. 6. 4. 7. 2. z : (z, x). 2. 0. 2. 4. 7. 2. (étape finale). 3. 0. 2. 4. 7. -2. (étape finale). 4. 0. 2. 4. 7. -2. (étape finale). 5. 0. 2. 4. 7. -2. (étape finale). 85.

(86) Plus courts chemins : poids < 0. Tous les plus courts chemins. Techniques algorithmiques. Cycles négatifs. • Un cycle négatif C est un cycle tel que. P. a∈A(C ) w (a). < 0;. 86.

(87) Plus courts chemins : poids < 0. Tous les plus courts chemins. Techniques algorithmiques. Cycles négatifs. • Un cycle négatif C est un cycle tel que. P. a∈A(C ) w (a). < 0;. • Les poids négatifs ne posent pas problème à Bellman-Ford, mais les cycles négatifs oui — pour les mêmes raisons que Dijkstra ;. 87.

(88) Plus courts chemins : poids < 0. Tous les plus courts chemins. Techniques algorithmiques. Cycles négatifs. • Un cycle négatif C est un cycle tel que. P. a∈A(C ) w (a). < 0;. • Les poids négatifs ne posent pas problème à Bellman-Ford, mais les cycles négatifs oui — pour les mêmes raisons que Dijkstra ; • L’algorithme de Bellman-Ford comprendra un morceau permettant de détecter la présence d’un cycle négatif ;. 88.

(89) Plus courts chemins : poids < 0. Tous les plus courts chemins. Techniques algorithmiques. Intuitions sur Bellman-Ford. • Chaque arc (u, v ) a le potentiel d’améliorer le meilleur chemin actuel de s à v en passant par u ;. 89.

(90) Plus courts chemins : poids < 0. Tous les plus courts chemins. Techniques algorithmiques. Intuitions sur Bellman-Ford. • Chaque arc (u, v ) a le potentiel d’améliorer le meilleur chemin actuel de s à v en passant par u ; • Pourquoi parcourir tous les arcs exactement |V | fois ?.

(91) Plus courts chemins : poids < 0. Tous les plus courts chemins. Techniques algorithmiques. Intuitions sur Bellman-Ford. • Chaque arc (u, v ) a le potentiel d’améliorer le meilleur chemin actuel de s à v en passant par u ; • Pourquoi parcourir tous les arcs exactement |V | fois ? • tout chemin contient au plus |V | − 1 arcs ;.

(92) Plus courts chemins : poids < 0. Tous les plus courts chemins. Techniques algorithmiques. Intuitions sur Bellman-Ford. • Chaque arc (u, v ) a le potentiel d’améliorer le meilleur chemin actuel de s à v en passant par u ; • Pourquoi parcourir tous les arcs exactement |V | fois ? • tout chemin contient au plus |V | − 1 arcs ; • si on arrive à améliorer un chemin contenant le nombre maximal d’arcs, c’est forcément grâce à un cycle de poids négatif ;.

(93) Plus courts chemins : poids < 0. Tous les plus courts chemins. Techniques algorithmiques. L’algorithme de Bellman-Ford proprement dit Algorithme 1 :. BellmanFord(G , source). Entrées : un graphe pondéré orienté G , un sommet source. Sortie : la longueur d’un plus court chemin de la source à chacun des sommets du graphe (+∞ pour les sommets non accessibles), ou nil si le graphe contient un cycle négatif. 1 2. 3 4 5. 6 7 8. distances ← tableau(G .nombre sommets(), +∞); distances[source] ← 0; // parcourir chaque arc |V | − 1 fois pour i allant de 1 à G .nombre sommets() −1 faire pour chaque (u, v , p) ∈ G .arcs() faire distances[v ] ← min(distances[v ], distances[u] + p); // vérifier la présence d’un cycle négatif pour chaque (u, v , p) ∈ G .arcs() faire si distances[v ] > distances[u] + p alors renvoyer nil; renvoyer distances;. 93.

(94) Plus courts chemins : poids < 0. Tous les plus courts chemins. Complexité de l’algorithme de Bellman-Ford • La complexité est assez simple à calculer :. Techniques algorithmiques.

(95) Plus courts chemins : poids < 0. Tous les plus courts chemins. Complexité de l’algorithme de Bellman-Ford • La complexité est assez simple à calculer : • on examine tous les arcs |V | fois ;. Techniques algorithmiques.

(96) Plus courts chemins : poids < 0. Tous les plus courts chemins. Complexité de l’algorithme de Bellman-Ford • La complexité est assez simple à calculer : • on examine tous les arcs |V | fois ; • tous les calculs sont en O(1) ;. Techniques algorithmiques.

(97) Plus courts chemins : poids < 0. Tous les plus courts chemins. Complexité de l’algorithme de Bellman-Ford • La complexité est assez simple à calculer : • on examine tous les arcs |V | fois ; • tous les calculs sont en O(1) ;. • On a donc :. Techniques algorithmiques.

(98) Plus courts chemins : poids < 0. Tous les plus courts chemins. Complexité de l’algorithme de Bellman-Ford • La complexité est assez simple à calculer : • on examine tous les arcs |V | fois ; • tous les calculs sont en O(1) ;. • On a donc : • du O(|V |3 ) pour une matrice d’adjacence ;. Techniques algorithmiques.

(99) Plus courts chemins : poids < 0. Tous les plus courts chemins. Complexité de l’algorithme de Bellman-Ford • La complexité est assez simple à calculer : • on examine tous les arcs |V | fois ; • tous les calculs sont en O(1) ;. • On a donc : • du O(|V |3 ) pour une matrice d’adjacence ; • du O(|V ||A|) pour une liste d’adjacence ;. Techniques algorithmiques.

(100) Plus courts chemins : poids < 0. Tous les plus courts chemins. Techniques algorithmiques. Complexité de l’algorithme de Bellman-Ford • La complexité est assez simple à calculer : • on examine tous les arcs |V | fois ; • tous les calculs sont en O(1) ;. • On a donc : • du O(|V |3 ) pour une matrice d’adjacence ; • du O(|V ||A|) pour une liste d’adjacence ;. • Remarque : on peut s’arrêter quand l’algorithme “se stabilise”, donc quand les estimations ne subissent plus aucun changement ;.

(101) Plus courts chemins : poids < 0. Tous les plus courts chemins. Dijkstra vs. Bellman-Ford. • Quand utiliser Dijkstra ?. Techniques algorithmiques.

(102) Plus courts chemins : poids < 0. Tous les plus courts chemins. Dijkstra vs. Bellman-Ford. • Quand utiliser Dijkstra ? • quand tous les poids sont positifs ou nuls ;. Techniques algorithmiques.

(103) Plus courts chemins : poids < 0. Tous les plus courts chemins. Techniques algorithmiques. Dijkstra vs. Bellman-Ford. • Quand utiliser Dijkstra ? • quand tous les poids sont positifs ou nuls ; • sa complexité est meilleure que Bellman-Ford dans le cas orienté ;.

(104) Plus courts chemins : poids < 0. Tous les plus courts chemins. Techniques algorithmiques. Dijkstra vs. Bellman-Ford. • Quand utiliser Dijkstra ? • quand tous les poids sont positifs ou nuls ; • sa complexité est meilleure que Bellman-Ford dans le cas orienté ;. • Quand utiliser Bellman-Ford ?.

(105) Plus courts chemins : poids < 0. Tous les plus courts chemins. Techniques algorithmiques. Dijkstra vs. Bellman-Ford. • Quand utiliser Dijkstra ? • quand tous les poids sont positifs ou nuls ; • sa complexité est meilleure que Bellman-Ford dans le cas orienté ;. • Quand utiliser Bellman-Ford ? • quand le graphe est orienté avec des poids négatifs ;.

(106) Plus courts chemins : poids < 0. Tous les plus courts chemins. Techniques algorithmiques. Dijkstra vs. Bellman-Ford. • Quand utiliser Dijkstra ? • quand tous les poids sont positifs ou nuls ; • sa complexité est meilleure que Bellman-Ford dans le cas orienté ;. • Quand utiliser Bellman-Ford ? • quand le graphe est orienté avec des poids négatifs ;. • S’il y a des cycles négatifs dont le chemin cherché peut tirer profit, on ne peut rien faire ;.

(107) Plus courts chemins : poids < 0. Tous les plus courts chemins. Techniques algorithmiques. Motivations. • Jusqu’ici, on s’est intéressés au calcul de tous les plus courts chemins issus d’une source donnée ;. 107.

(108) Plus courts chemins : poids < 0. Tous les plus courts chemins. Techniques algorithmiques. Motivations. • Jusqu’ici, on s’est intéressés au calcul de tous les plus courts chemins issus d’une source donnée ; • Comment faire pour calculer les plus courts chemins entre chaque paire de sommets ?. 108.

(109) Plus courts chemins : poids < 0. Tous les plus courts chemins. Techniques algorithmiques. Motivations. • Jusqu’ici, on s’est intéressés au calcul de tous les plus courts chemins issus d’une source donnée ; • Comment faire pour calculer les plus courts chemins entre chaque paire de sommets ? • On pourrait lancer |V | fois Dijkstra ou Bellman-Ford ;.

(110) Plus courts chemins : poids < 0. Tous les plus courts chemins. Techniques algorithmiques. Motivations. • Jusqu’ici, on s’est intéressés au calcul de tous les plus courts chemins issus d’une source donnée ; • Comment faire pour calculer les plus courts chemins entre chaque paire de sommets ? • On pourrait lancer |V | fois Dijkstra ou Bellman-Ford ; • L’algorithme de Floyd-Warshall permet d’obtenir le résultat voulu avec une meilleure complexité ;.

(111) Plus courts chemins : poids < 0. Tous les plus courts chemins. Techniques algorithmiques. L’algorithme de Floyd-Warshall. • L’algorithme de Floyd-Warshall procède comme suit :.

(112) Plus courts chemins : poids < 0. Tous les plus courts chemins. Techniques algorithmiques. L’algorithme de Floyd-Warshall. • L’algorithme de Floyd-Warshall procède comme suit : • au départ, les plus courts chemins entre chaque paire de sommets sont les poids des arcs les reliant (ou +∞) ;.

(113) Plus courts chemins : poids < 0. Tous les plus courts chemins. Techniques algorithmiques. L’algorithme de Floyd-Warshall. • L’algorithme de Floyd-Warshall procède comme suit : • au départ, les plus courts chemins entre chaque paire de sommets sont les poids des arcs les reliant (ou +∞) ; • à la k ème itération, on cherche à améliorer le chemin u v en s’autorisant les sommets intermédiaires d’indice 0, 1, 2, . . ., k pour un certain k fixé ;.

(114) Plus courts chemins : poids < 0. Tous les plus courts chemins. Techniques algorithmiques. L’algorithme de Floyd-Warshall. • L’algorithme de Floyd-Warshall procède comme suit : • au départ, les plus courts chemins entre chaque paire de sommets sont les poids des arcs les reliant (ou +∞) ; • à la k ème itération, on cherche à améliorer le chemin u v en s’autorisant les sommets intermédiaires d’indice 0, 1, 2, . . ., k pour un certain k fixé ;. • Remarque : la seule modification à l’étape k consiste à vérifier si le chemin u k v est plus court que le chemin u v, puisque les sommets d’indice inférieur ont déjà été utilisés..

(115) Plus courts chemins : poids < 0. Tous les plus courts chemins. Techniques algorithmiques. Déroulement de l’algorithme de Floyd-Warshall Exemple 3 4 2. 1 -2 3. 3. -1 4 2. 115.

(116) Plus courts chemins : poids < 0. Tous les plus courts chemins. Techniques algorithmiques. Déroulement de l’algorithme de Floyd-Warshall Exemple 3. Les chemins 4. 2. 1 -2 3. k=0. 3. -1 4 2 1 2 3 4. 1 2 3 4 0 +∞ −2 +∞ 4 0 3 +∞ +∞ +∞ 0 2 +∞ −1 +∞ 0. 1. −2. 3. 2. 4. 1. 2. 3. 3. 3. 2. 4. 4. −1. 2. matrice de distances. 116.

(117) Plus courts chemins : poids < 0. Tous les plus courts chemins. Techniques algorithmiques. Déroulement de l’algorithme de Floyd-Warshall Exemple 3. Les chemins 4. 2. 1 -2 3. k=1 2. 3. -1 4 2 1 2 3 4. 1. 4 −2. 1. 4. 1. 3. 2. 4. −1. 3. 3. 2 4. −2. 2. 1 2 3 4 0 +∞ −2 +∞ 4 0 3 +∞ +∞ +∞ 0 2 +∞ −1 +∞ 0. matrice de distances. 117.

(118) Plus courts chemins : poids < 0. Tous les plus courts chemins. Techniques algorithmiques. Déroulement de l’algorithme de Floyd-Warshall Exemple 3. Les chemins 4. 2. 1 -2 3. k=1 2. 3. -1 4 2 1 2 3 4. 1. 4 −2. 1. 4. 1. 3. 2. 4. −1. 3. 3. 2 4. −2. 2. 1 2 3 4 0 +∞ −2 +∞ 4 0 2 +∞ +∞ +∞ 0 2 +∞ −1 +∞ 0. matrice de distances. 118.

(119) Plus courts chemins : poids < 0. Tous les plus courts chemins. Techniques algorithmiques. Déroulement de l’algorithme de Floyd-Warshall Exemple 3. Les chemins 4. 2. 1 -2 3. k=2 4. 3. -1 4 2 1 2 3 4. 1 2 3 4 0 +∞ −2 +∞ 4 0 2 +∞ +∞ +∞ 0 2 +∞ −1 +∞ 0. 4 2 1. −1 −1 4 −2. 2. 4. 1. 2. 4. 1. 1. 4. 1. 3. 2. 4. −1. −2. 3. 3. 3. 2 4. −2. 2. matrice de distances. 119.

(120) Plus courts chemins : poids < 0. Tous les plus courts chemins. Techniques algorithmiques. Déroulement de l’algorithme de Floyd-Warshall Exemple 3. Les chemins 4. 2. 1 -2 3. k=2 4. 3. -1 4 2 1 2 3 4. 1 2 3 4 0 +∞ −2 +∞ 4 0 2 +∞ +∞ +∞ 0 2 3 −1 1 0. 4 2 1. −1 −1 4 −2. 2. 4. 1. 2. 4. 1. 1. 4. 1. 3. 2. 4. −1. −2. 3. 3. 3. 2 4. −2. 2. matrice de distances. 120.

(121) Plus courts chemins : poids < 0. Tous les plus courts chemins. Techniques algorithmiques. Déroulement de l’algorithme de Floyd-Warshall Exemple 3. Les chemins 4. 2. 1 -2 3. k=3 1. 3. -1 4 2 1 2 3 4. 1 2 3 4 0 +∞ −2 +∞ 4 0 2 +∞ +∞ +∞ 0 2 3 −1 1 0. 2 4 4 2 1. −2 4 −1 −1 4 −2. 3 1 2 2 1. 4. 1. 3. 2. 4. −1. 4 3. 4. 1. 4. 1. −2. 2 −2. 4 3. 3. 3. 2 4. 2 −2. 2. matrice de distances. 121.

(122) Plus courts chemins : poids < 0. Tous les plus courts chemins. Techniques algorithmiques. Déroulement de l’algorithme de Floyd-Warshall Exemple 3. Les chemins 4. 2. 1 -2 3. k=3 1 2. 3. 4 4. -1 4 2 1 2 3 4. 1 2 3 0 +∞ −2 4 0 2 +∞ +∞ 0 3 −1 1. 2. 4 0 4 2 0. 1. −2 4 −1 −1 4 −2. 3 1 2 2 1. 4. 1. 3. 2. 4. −1. 4 3. 4. 1. 4. 1. −2. 2 −2. 4 3. 3. 3. 2 4. 2 −2. 2. matrice de distances. 122.

(123) Plus courts chemins : poids < 0. Tous les plus courts chemins. Techniques algorithmiques. Déroulement de l’algorithme de Floyd-Warshall Exemple 3. Les chemins 4. 2. 1 -2 3. k=4. 3. 1 2 3 4. 2. 4. 3. 2. 4. 1 1. -1 4 2 1 2 3 0 +∞ −2 4 0 2 +∞ +∞ 0 3 −1 1. 3. 2. 4 0 4 2 0. 4 4 2 1. −2 −2 4 −1 −1 4 −2. 2 2. 2. 4. 3. 2. 4. 1 2 2 1. −2. 3. 4. 1. 4. 1. −2. 4 −1 2 −2. 1 2 4 3. 3. 3. 4. 1. 3. 2. 4. −1. −1. 3. 2 4. −1. 2. matrice de distances. 123.

(124) Plus courts chemins : poids < 0. Tous les plus courts chemins. Techniques algorithmiques. Déroulement de l’algorithme de Floyd-Warshall Exemple 3. Les chemins 4. 2. 1 -2 3. k=4. 3. 1 2 3 4. matrice de distances. 2. 4. 3. 2. 4. 1 1. -1 4 2 1 2 3 0 −1 −2 4 0 2 5 1 0 3 −1 1. 3. 2. 4 0 4 2 0. 4 4 2 1. −2 −2 4 −1 −1 4 −2. 2 2. 2. 4. 3. 2. 4. 1 2 2 1 3. 4. 1. 3. 2. 4. −1. −1. 3. 2 4. −1. 2. −2. 3. 4. 1. 4. 1. −2. 3. 4 −1 2 −2. 1 2 4 3.

(125) Plus courts chemins : poids < 0. Tous les plus courts chemins. Techniques algorithmiques. L’algorithme de Floyd-Warshall proprement dit Si seules les distances nous intéressent, l’algorithme est assez simple à implémenter, car peu d’accès au graphe sont nécessaires. Algorithme 2 :. FloydWarshall(G ). Entrées : un graphe orienté pondéré G . Sortie : les distances entre toute paire de sommets du graphe. 1 2 3 4 5 6. 7 8 9 10. n ← G .nombre sommets(); distances ← matrice(n, n, +∞); pour i allant de 0 à n − 1 faire distances[i][i] ← 0; pour chaque (u, v , p) ∈ G .arcs() faire distances[u][v ] ← p; // chercher les améliorations en passant par k = 0, 1, 2, . . . pour k allant de 0 à n − 1 faire pour i allant de 0 à n − 1 faire pour j allant de 0 à n − 1 faire distances[i][j] ← min(distances[i][j], distances[i][k]+distances[k][j]);. 125.

(126) Plus courts chemins : poids < 0. Tous les plus courts chemins. Techniques algorithmiques. Complexité de l’algorithme de Floyd-Warshall • La complexité est assez simple à calculer :. 126.

(127) Plus courts chemins : poids < 0. Tous les plus courts chemins. Techniques algorithmiques. Complexité de l’algorithme de Floyd-Warshall • La complexité est assez simple à calculer : • on accède une fois à tous les arcs ;. 127.

(128) Plus courts chemins : poids < 0. Tous les plus courts chemins. Techniques algorithmiques. Complexité de l’algorithme de Floyd-Warshall • La complexité est assez simple à calculer : • on accède une fois à tous les arcs ; • on a trois boucles imbriquées indépendantes comportant chacune |V | itérations ;. 128.

(129) Plus courts chemins : poids < 0. Tous les plus courts chemins. Techniques algorithmiques. Complexité de l’algorithme de Floyd-Warshall • La complexité est assez simple à calculer : • on accède une fois à tous les arcs ; • on a trois boucles imbriquées indépendantes comportant chacune |V | itérations ; • les opérations sur la matrice de distances se font en O(1) ;. 129.

(130) Plus courts chemins : poids < 0. Tous les plus courts chemins. Techniques algorithmiques. Complexité de l’algorithme de Floyd-Warshall • La complexité est assez simple à calculer : • on accède une fois à tous les arcs ; • on a trois boucles imbriquées indépendantes comportant chacune |V | itérations ; • les opérations sur la matrice de distances se font en O(1) ;. • ⇒ total : O(|V |3 ) ;. 130.

(131) Plus courts chemins : poids < 0. Tous les plus courts chemins. Techniques algorithmiques. Complexité de l’algorithme de Floyd-Warshall • La complexité est assez simple à calculer : • on accède une fois à tous les arcs ; • on a trois boucles imbriquées indépendantes comportant chacune |V | itérations ; • les opérations sur la matrice de distances se font en O(1) ;. • ⇒ total : O(|V |3 ) ; • Dans ce cas précis, la représentation du graphe importe peu : qu’on obtienne les arcs en O(|V |2 ) (matrice) ou en O(|A|) (listes), c’est le O(|V |3 ) qui domine ;. 131.

(132) Plus courts chemins : poids < 0. Tous les plus courts chemins. Techniques algorithmiques. Techniques algorithmiques. • Les algorithmes vus jusqu’ici sont des exemples de techniques algorithmiques dont on reparlera ;. 132.

(133) Plus courts chemins : poids < 0. Tous les plus courts chemins. Techniques algorithmiques. Techniques algorithmiques. • Les algorithmes vus jusqu’ici sont des exemples de techniques algorithmiques dont on reparlera ; • On a vu des algorithmes :. 133.

(134) Plus courts chemins : poids < 0. Tous les plus courts chemins. Techniques algorithmiques. Techniques algorithmiques. • Les algorithmes vus jusqu’ici sont des exemples de techniques algorithmiques dont on reparlera ; • On a vu des algorithmes : 1. gloutons : Dijkstra, Kruskal, Prim ;.

(135) Plus courts chemins : poids < 0. Tous les plus courts chemins. Techniques algorithmiques. Techniques algorithmiques. • Les algorithmes vus jusqu’ici sont des exemples de techniques algorithmiques dont on reparlera ; • On a vu des algorithmes : 1. gloutons : Dijkstra, Kruskal, Prim ;. 2. de programmation dynamique : Bellman-Ford, Floyd-Warshall ;.

(136) Plus courts chemins : poids < 0. Tous les plus courts chemins. Techniques algorithmiques. Algorithmes gloutons. • Les algorithmes gloutons (greedy en anglais) font des choix localement optimaux selon le(s) critère(s) visé(s) ;. 136.

(137) Plus courts chemins : poids < 0. Tous les plus courts chemins. Techniques algorithmiques. Algorithmes gloutons. • Les algorithmes gloutons (greedy en anglais) font des choix localement optimaux selon le(s) critère(s) visé(s) ; • dans un problème de minimisation, on sélectionne le choix le moins cher à chaque étape ;. 137.

(138) Plus courts chemins : poids < 0. Tous les plus courts chemins. Techniques algorithmiques. Algorithmes gloutons. • Les algorithmes gloutons (greedy en anglais) font des choix localement optimaux selon le(s) critère(s) visé(s) ; • dans un problème de minimisation, on sélectionne le choix le moins cher à chaque étape ; • dans un problème de maximisation, on sélectionne le choix le plus profitable à chaque étape ;.

(139) Plus courts chemins : poids < 0. Tous les plus courts chemins. Techniques algorithmiques. Algorithmes gloutons. • Les algorithmes gloutons (greedy en anglais) font des choix localement optimaux selon le(s) critère(s) visé(s) ; • dans un problème de minimisation, on sélectionne le choix le moins cher à chaque étape ; • dans un problème de maximisation, on sélectionne le choix le plus profitable à chaque étape ;. • Kruskal et Prim suivent clairement ce schéma : à chaque étape, on sélectionne l’arête de poids minimum (+ autres conditions) ;.

(140) Plus courts chemins : poids < 0. Tous les plus courts chemins. Techniques algorithmiques. Bilan des algorithmes gloutons. • Une fois qu’on a compris le principe, les algorithmes gloutons se révèlent très utiles :. 140.

(141) Plus courts chemins : poids < 0. Tous les plus courts chemins. Techniques algorithmiques. Bilan des algorithmes gloutons. • Une fois qu’on a compris le principe, les algorithmes gloutons se révèlent très utiles : • cette approche sert de bon “candidat de départ” si on n’a pas d’autre idée ;. 141.

(142) Plus courts chemins : poids < 0. Tous les plus courts chemins. Techniques algorithmiques. Bilan des algorithmes gloutons. • Une fois qu’on a compris le principe, les algorithmes gloutons se révèlent très utiles : • cette approche sert de bon “candidat de départ” si on n’a pas d’autre idée ; • elle est généralement simple à implémenter ;. 142.

(143) Plus courts chemins : poids < 0. Tous les plus courts chemins. Techniques algorithmiques. Bilan des algorithmes gloutons. • Une fois qu’on a compris le principe, les algorithmes gloutons se révèlent très utiles : • cette approche sert de bon “candidat de départ” si on n’a pas d’autre idée ; • elle est généralement simple à implémenter ;. • Malheureusement, rares sont les situations où ils sont optimaux ;. 143.

(144) Plus courts chemins : poids < 0. Tous les plus courts chemins. Techniques algorithmiques. Bilan des algorithmes gloutons. • Une fois qu’on a compris le principe, les algorithmes gloutons se révèlent très utiles : • cette approche sert de bon “candidat de départ” si on n’a pas d’autre idée ; • elle est généralement simple à implémenter ;. • Malheureusement, rares sont les situations où ils sont optimaux ; • Ils restent très utiles dans la conception d’algorithmes d’approximation ;. 144.

(145) Plus courts chemins : poids < 0. Tous les plus courts chemins. Techniques algorithmiques. Programmation dynamique • Les algorithmes gloutons échouent quand une solution optimale ne peut pas s’obtenir en se contentant de combiner des choix optimaux localement ;. 145.

(146) Plus courts chemins : poids < 0. Tous les plus courts chemins. Techniques algorithmiques. Programmation dynamique • Les algorithmes gloutons échouent quand une solution optimale ne peut pas s’obtenir en se contentant de combiner des choix optimaux localement ; • La programmation dynamique résoud ce problème en examinant aussi les choix non optimaux localement ;. 146.

(147) Plus courts chemins : poids < 0. Tous les plus courts chemins. Techniques algorithmiques. Programmation dynamique • Les algorithmes gloutons échouent quand une solution optimale ne peut pas s’obtenir en se contentant de combiner des choix optimaux localement ; • La programmation dynamique résoud ce problème en examinant aussi les choix non optimaux localement ; • De manière très informelle :. 147.

(148) Plus courts chemins : poids < 0. Tous les plus courts chemins. Techniques algorithmiques. Programmation dynamique • Les algorithmes gloutons échouent quand une solution optimale ne peut pas s’obtenir en se contentant de combiner des choix optimaux localement ; • La programmation dynamique résoud ce problème en examinant aussi les choix non optimaux localement ; • De manière très informelle : • pour chaque choix possible à une étape donnée, on évalue l’impact de ce choix ;. 148.

(149) Plus courts chemins : poids < 0. Tous les plus courts chemins. Techniques algorithmiques. Programmation dynamique • Les algorithmes gloutons échouent quand une solution optimale ne peut pas s’obtenir en se contentant de combiner des choix optimaux localement ; • La programmation dynamique résoud ce problème en examinant aussi les choix non optimaux localement ; • De manière très informelle : • pour chaque choix possible à une étape donnée, on évalue l’impact de ce choix ; • on optimise ensuite sur toutes les décisions possibles, en gardant le critère global en tête ;. 149.

(150) Plus courts chemins : poids < 0. Tous les plus courts chemins. Techniques algorithmiques. Programmation dynamique. • La programmation dynamique ne se fait en général pas avoir comme les algorithmes gloutons ;. 150.

(151) Plus courts chemins : poids < 0. Tous les plus courts chemins. Techniques algorithmiques. Programmation dynamique. • La programmation dynamique ne se fait en général pas avoir comme les algorithmes gloutons ; • Cela ne veut pas dire qu’elle fonctionne toujours !.

(152) Plus courts chemins : poids < 0. Tous les plus courts chemins. Techniques algorithmiques. Programmation dynamique. • La programmation dynamique ne se fait en général pas avoir comme les algorithmes gloutons ; • Cela ne veut pas dire qu’elle fonctionne toujours ! • Le problème étudié doit présenter une certaine structure : on parle de “sous-structure optimale”, ce qui signifie que l’on peut atteindre l’optimum global en résolvant des sous-problèmes de manière optimale ;.

(153)

Références

Documents relatifs

Dans un r´eseau sans circuit on peut trouver un plus long chemin aussi, en rempla¸cant min par max ` a

Introduction Les bases La m´ ethode de Ford-Fulkerson Coupes minimum Complexit´ e de l’algorithme

• Dans le cas o` u le graphe n’est pas biparti, le probl` eme reste soluble en temps polynomial mais l’algorithme est beaucoup plus complexe [2] ;. • Et si l’on veut des

3 combiner : combiner les solutions des sous-probl` emes pour obtenir la solution au probl` eme de d´ epart. • L’efficacit´ e de cette approche d´ epend fortement des complexit´ es

Introduction Principes Probl` eme de d´ ecoupe Distance d’´ edition Reconstruction des solutions optimales.. R´ esum´ e des ´ episodes pr´

Par convention, ils sont impl´ ement´ es sous la forme de fonctions avec un nom utilisant

Ce chapitre présente l’algorithme de Bellman-Ford, qui est lui capable de traiter les graphes possédant des poids négatifs — tant que l’on n’a pas de cycle de poids négatif

I La m´ ethode de Ford-Fulkerson proc` ede comme suit ; on d´ emarre avec un flot f nul partout pour le r´ eseau G , et ` a chaque it´ eration :.. on augmente au maximum f sur les