Vous êtes sur la page 1sur 2

Algorithme de FORD

Note
La règle (appelée « principe d’optimalité ») commune aux algorithmes de recherche de plus courts chemins
peut s’énoncer ainsi : un plus court chemin [S1, Sn] entre deux sommets S1 et Sn d’un graphe est constitué
de plus courts chemins reliant deux sommets du chemin [S1, Sn] ; on la démontre par l’absurde sans
problème.
La recherche du plus court chemin passe donc par la recherche des plus courts chemins reliant S1 à tous les
sommets du graphe susceptibles de se trouver sur le trajet ; reste à déterminer dans quel ordre on liste les
sommets intermédiaires : c’est principalement là que résident les différences d’un algorithme à l’autre.
Un des premiers algorithmes est dû au mathématicien FORD : son peu d’efficacité découle du fait qu’on liste
les sommets intermédiaires dans un ordre quelconque : on risque donc de se retrouver un grand nombre de fois
avec les mêmes sommets. Mais aucune hypothèse sur le signe des poids n’est nécessaire.
On donnera une version qui repose sur un examen pré ordonné des sommets, mais elle ne s’applique qu’aux
graphes orientés sans circuits.

Définition 1. – Soit G = (S, A) un graphe orienté, sans circuits et I un sommet choisi comme
sommet initial. On appelle niveau du sommet S∈ S, le nombre maximum d’arcs de tous les chemins
reliant I à S. Le niveau de I est 0.
Remarque : si un chemin reliant I à S contient un circuit, ce maximum n’existe pas, puisqu’à chaque tour de circuit,
on ajoute le nombre d’arcs dudit circuit.

Définition 2. – Un graphe dont les sommets ont été classés par niveau, est appelé graphe
ordonnancé. On dit aussi qu’on a partagé le graphe en niveaux.
Remarque : on « redessine » en général le graphe, en faisant apparaître les niveaux des sommets (voir exemple ci-
dessous).
Exemples :
S5

Le graphe G1 ci-contre ne
possédant aucun circuit, on peut
S4 6 classer les sommets par niveaux.
On choisit comme sommet initial
S5.
Le niveau de S5 est donc 0, celui
de S2 est 1, celui de S3 est 2, celui
6 de S1 est 3 et celui de S4 est 4.
2 9 La figure du graphe ordonnancé
associé au graphe G1 est donnée
S3 ci-dessous :
2
3
S1 6 S2

S3

3 6
S5 S2 S4
6 9
2
6 2

S1

0 1 2 3 4

Les différents niveaux des sommets du graphe


Si l’on ajoute les arcs [S1, S5] et [S4, S5] dans le graphe G1 ci-dessus, on obtient un nouveau graphe
G2 qui contient des circuits, par exemple : [S5, S2, S1, S5], [S5, S2, S4, S5], [S5, S2, S3, S4, S5], [S5, S2,
S3, S1, S5], etc. Il est donc impossible de partager le graphe G2 en niveaux.

Algorithme de FORD pour les graphes ordonnancés

Note
La question de l’ordonnancement d’un graphe ne doit pas constituer un problème pour les élèves : soit on
donne le graphe ordonnancé, soit on propose un graphe pour lequel l’ordonnancement se fait « naturellement ».
Il est hors de propos de présenter un algorithme donnant un graphe ordonnancé.
Afin de satisfaire votre curiosité et/ou votre soif inextinguible de connaissances (!), en voici un où M est la
matrice associée (encore appelée matrice d’adjacence) au graphe d’origine que l’on veut partager en niveaux :

i=0

i=i+1 S(i ) = {sommets correspondant aux colonnes non marquées ne


contenant que des 1 barrés ou des zéros}

Marquer les
colonnes de S(i ) et
Non Oui
barrer les lignes S(i ) = ∅ STOP
correspondantes

Pour vous entraîner (ou vérifier que l’algorithme « fonctionne »), appliquer cet algorithme au graphe de
l’exemple (1) ci-dessus : pour 0 ≤ i ≤ k, S(i ) est l’ensemble des sommets de niveau i. Les ensembles S(i ) sont
des ensembles stables.

Voici donc l’algorithme de FORD, décomposé en trois phases :


Phase 1 :
- Affecter le poids 0 au sommet de niveau 0
Phase 2 :
- Pour chaque niveau et chaque sommet S de ce niveau, lui affecter le poids obtenu en prenant le minimum des
sommes Σ = {poids d’un des prédécesseurs de S + poids de l’arc reliant ce prédécesseur à S}
Phase 3 :
- Le chemin de poids minimum est l’un de ceux qui réalisent le poids du dernier sommet : il suffit donc d’une
lecture « à l’envers »
Remarques :
L’attribution des poids pour les sommets est définitive (ce qui réduit fortement le nombre d’opérations à
effectuer), grâce au partage préalable du graphe en niveaux ;
S’il y a plusieurs sommets de niveau 0, on applique l’algorithme à chacun des sommets de niveau 0 (sauf si l’on
recherche un chemin minimal de sommet initial bien précis), puis on compare les différents poids obtenus par
l’algorithme ;
Cet algorithme, en l’adaptant, permet aussi de trouver un chemin maximal : le faire !
Appliquons l’algorithme au graphe de l’exemple (1) ci-dessus : on affecte successivement à S5 le poids 0 ; à S2, 6 ; à
S3, 9 ; à S1, 11 = min{9 + 2 ; 6 + 6} ; à S4, 13 = min{9 + 6 ; 6 + 9 ; 11 + 2}. Le sommet final est donc S4, le
précédent est S1 (c’est celui qui a permis d’obtenir 13), puis vient S3, ensuite S2, enfin S5 .
Le chemin minimal recherché est alors : [S5, S2, S3, S1, S4].

Vous aimerez peut-être aussi