Nous sommes à la recherche du chemin le plus court. Cela signifie que la somme des poids des arcs du chemin sélectionné doit être le plus faible possible.
Si nous sommes certains que notre graphe ne présente pas de circuit, nous pouvons appliquer l'algorithme de Bellman-Kalaba qui nous permet une exploration progressive, sans back-tracking (retours en arrière)[4].
Nous utiliserons un ensemble D (definedVertices) qui contiendra les sommets traités.
Au départ, definedVertices contient seulement le sommet racine.
A chaque étape, si le degré extérieur du sommet en cours est > 1 (donc si plusieurs arcs partent du sommet en cours) nous éliminerons les arcs dont certains sommet précédents ne sont pas présents dans l'ensemble D.
Ensuite, nous comparerons les poids des arcs restants afin de sélectionner le poids le plus faible.

Nous pouvons décomposer notre algorithme en deux phases : une phase d'initialisation des valeurs, et une phase d'exécution qui décrit ce qui se passe lorsque l'algorithme est exécuté.
Dans cette approche, nous utilisons des collections indexées (par exemple des tableaux) pour maintenir les différentes informations relatives aux états de chaque objet Sommet. Dans une approche "orienté-objet", nous pouvons maintenir ces informations par exemple dans l'objet Sommet lui même.
Nous utiliserons aussi certaines variables supplémentaires :
arrayFirstIndex : indice du premier élément dans un tableau[5].
Nous devons initialiser les tableaux avec une taille correspondant à n.
Nous emploierons ∀j pour raccourcir la notation ∀(j ≥ arrayFirstIndex) ∧ (j < n+arrayFirstIndex), ce qui signifie pour tout emplacement du tableau
.
//Il reste des sommets non traités /*i est l'indice de x x est non traité mais tous ses précédents le sont*/ i := choisir x ∈ {y | (y ∈ X\definedVertices) ∧ (Γ<sup>-1</sup>(y) ⊂ definedVertices ≠ ∅)}; //trouver le coût minimum pathMinWeights[i] := minimum{ pathMinWeigths[j]+weight(j,i)∀j∈&Gamma<sup>-1</sup>(x)}; //j est l'indice du sommet qui a satisfait le test du minimum verticesLabels[i] := j; k := k+1; //i est défini comme ∈ au chemin de poids minimum definedVertices[k] := i;
A la ligne 2, le test de comparaison k < n s'applique aux langages pour lesquels le premier indice d'un tableau est 0. Dans le cas où le premier indice est 1, nous devons remplacer le test par k ≤ n.
Les instructions des lignes 9 et 12 (recherche du sommet suivant parmi les candidats) peuvent être détaillées comme le montre le bloc de code suivant.
/* ∃ j précédent de i i est l'indice de x dans X*/ //on évite de faire calcul plusieurs fois temp := pathMinWeights[j] + weight(j,i); //le résultat est meilleur //mémoriser comme meilleur candidat au minimum tempMin := temp; //indice du sommet meilleur candidat tempVertrex := j; pathMinWeights[i] := pathMinWeigths[j]+weight(j,i); verticesLabels[i] := i;
Selon les implémentations possibles, nous pouvons descendre jusqu'à une complexité de
(n) pour le choix de x. La complexité générale est donc de
(n2).
Vous pouvez modifier vos préférences dans votre profil pour ne plus afficher les interactions avec les réseaux sociaux sur ces pages.
23 mots clés dont 14 définis manuellement (plus d'information...).
Vous pouvez modifier vos préférences dans votre profil pour ne plus afficher le nuage de mots clés.
Cours de Théorie des Graphes et réseaux de Petri(Septembre 2008)
Ces références et liens indiquent des documents consultés lors de la rédaction de cette page, ou qui peuvent apporter un complément d'information, mais les auteurs de ces sources ne peuvent être tenus responsables du contenu de cette page.
L'auteur de ce site est seul responsable de la manière dont sont présentés ici les différents concepts, et des libertés qui sont prises avec les ouvrages de référence. N'oubliez pas que vous devez croiser les informations de sources multiples afin de diminuer les risques d'erreurs.
Recherche (afficher)
Utilisateur (masquer)
Navigation (masquer)
Apparence (afficher)
Stats (afficher)
Citation (masquer)