Vous êtes sur la page 1sur 24

Théorie des graphes et

optimisation
Chapitre 3:

Plus courts chemins et Algorithmes

Ghallabi Sameh
ISIMM
Problème
✓Le problème de Plus Court Chemin (PCC) est les plus importants
dans leurs applications.

✓Arriver d’un point `a un autre point le plus vite possible.

✓Le problème le PCC est le problème algorithmique qui consiste à


trouver un chemin d’un sommet à un autre de façons des poids des
arcs de ce chemins soit minimale.
Problème
✓Etant donnée graphe orienté valué, on associé à chaque arc u(i,j) un
nombre I(u) ou Ii,j, appelé la longueur ou les poids de l’arc.

✓le PCC entre deux sommets s (source ou l’origine) et d (destination)


du graphe consiste à déterminer.

Construire les plus courts chemins pondérés à partir d’un


sommet.
Cheminement optimal
✓Soit G=(X,U) un graphe orienté valué
✓• c : U IR poids, distance, coût

Problème : étant donné un sommet s, trouver le plus court chemin


de s à tous les sommets du graphe
Définitions
✓Un graphe pondère est un graphe dont les arêtes sont affectées de
coefficients positifs.

✓Le poids d’une chaine est la somme des coefficients des arêtes qui
la composent.

✓Une plus courte chaine entre deux sommets est, parmi les chaines
qui les relient une chaine de poids minimum.
Exemple de chemins
Plus courts chemins
Plus courts chemins
Plus courts chemins
Algorithme de Dijkstra
Calcul des plus courts chemins
✓ à partir d’un sommet donné, le sommet source,
✓ graphes orientés ou non orientés,
✓ arcs de poids positifs ou nuls,
✓la bonne représentation du graphe : des listes d’adjacence.

L’algorithme de Dijkstra découvre les plus courts chemins vers les


autres sommets du graphe en commençant par les plus courts.
Algorithme de Dijkstra
✓Algorithme de Dijkstra permet de trouver le plus court chemin d'un
sommet donné vers tous les autres sommets.

✓Le but de l'algorithme de Dijkstra est de trouver un chemin


le plus court entre deux sommets dans un graphe pondéré

✓Il n'est utilisable que pour les graphes à valuations non-négatives


Algorithme de Dijkstra
✓On maintient 2 ensembles disjoints E et F tels que E ∪ F = S.

✓L’ensemble E contient chaque sommet si pour lequel on connait un plus court chemin depuis
s0, d[si ] = δ(s0, si))

✓L’ensemble F contient tous les autres sommets.

✓A chaque itération de l’algorithme, on choisit le sommet Si dans F pour lequel la valeur d[si
] est minimale, on le rajoute dans E, et on relâche tous les arcs partant de ce sommet Si .

✓On le rajoute dans E, et on relâche tous les arcs partant de ce sommet Si .


Algorithme de Dijkstra
Exercice
Laurent s'occupe de distribuer le courrier dans les
bureaux d'une grande entreprise. Le graphe ci-
dessous représente les différents parcours qu'il peut
faire pour distribuer le courrier dans les bureaux A,
B, C, D, E, F et G.
Le poids de chaque arête indique le nombre
d'obstacles (portes, escaliers, machines à café.) qui
nuisent à la distribution du courrier. Laurent se voit
confier par le bureau A un colis à livrer au bureau
G.

Indiquer un parcours qui permette à Laurent de


partir du bureau A pour arriver au bureau G en
rencontrant le minimum d'obstacles.
Exercice
Une région est munie d’un réseau de trains,
représenté par le graphe ci-contre. Γ Les stations
sont symbolisées par les sommets A, B, C, D, E, F
et G. Chaque arête représente une ligne reliant deux
gares.
Les temps de parcours (correspondance comprise)
en minutes entre chaque sommet ont été rajoutés sur
le graphe.
1. Déterminer le plus court chemin en minutes,
reliant la gare B à la gare G. Justifier la réponse
grâce à un algorithme.
2. Quelle est la longueur en minutes de ce chemin ?
critique
Dijkstra ne fonctionne pas pour les graphes avec des arêtes de
poids négatifs.

Trouvez les chemins Les plus courts entre source et tous les
sommets dans le graphe donné. Le graphe peut contenir des
arêtes de poids négatifs.
Algorithme de Bellman-ford
✓L'algorithme de Bellman-Ford, aussi appelé algorithme de
Bellman–Ford–Moore, est un algorithme qui calcule des plus
courts chemins depuis un sommet source donné dans un
graphe orienté pondéré.

✓L'algorithme de Bellman-Ford résout le problème des plus


courts chemins.
Principe
✓ On a un graphe pondéré (positivement ou négativement).

✓Cherche le plus court chemin entre deux nœuds distincts.

✓Explorer toutes les combinaisons possibles de chemin

✓ Choisir celle qui obtient une pondération totale minimale.

✓ L’algorithme de Ford-Bellman est un algorithme de


programmation dynamique qui calcule les chemins les plus courts de
taille croissante
Principe
✓ Le chemin le plus court de l’origine à lui-même est de 0. Puis les
chemins de taille 1 sont calculés de telle sorte que nous ne gardons
que le plus court chemin de l’origine à tout autre sommet.

✓l’algorithme calcule les plus courts chemins des chemins de taille k


(pour l’itération k) à partir des plus courts chemins des chemins de
taille k-1, il est donc optimal quelle que soit l’itération d’arrêt de
l’algorithme.

✓Données: un Graphe pondère et sans circuit de cout négatifs.


Algorithme
Application
Différence entre les algorithmes
de Bellman Ford et de Dijkstra
Algorithme de Bellman Ford Algorithme de Dijkstra
L’algorithme de Bellman Ford fonctionne L’algorithme de Dijkstra peut fonctionner ou
lorsqu’il y a un bord de poids négatif, il non lorsqu’il y a un bord de poids négatif.
détecte également le cycle de poids négatif Mais ne fonctionnera certainement pas en
cas de cycle de poids négatif
Il peut facilement être mis en œuvre de Il ne peut pas être mis en œuvre facilement
manière distribuée. de manière distribuée.
L'algorithme de Bellman-Ford est plus lent L'algorithme de Bellman-Ford est plus
que Algorithme de Dijkstra, rapide que Algorithme de Dijkstra,

L’algorithme de Bellman Ford a plus de frais L’algorithme de Dijkstra a moins de frais


généraux que l’algorithme de Dijkstra. généraux que l’algorithme de Bellman Ford.
L’algorithme de Bellman Ford a moins L’algorithme de Dijkstra a plus
d’évolutivité que l’algorithme de Dijkstra. d’évolutivité que l’algorithme de Bellman
Ford.
Différence entre les algorithmes
de Bellman Ford et de Dijkstra
✓L'algorithme de Bellman-Ford est plus lent que Algorithme
de Dijkstra, mais il peut gérer les arêtes de poids négatifs dans
le graphe.

✓Bellman-Ford est également plus simple que Dijkstra et


convient parfaitement aux systèmes distribués.
Exercice d’application

Vous aimerez peut-être aussi