• Aucun résultat trouvé

4.2 L’algorithme de Dijkstra

4.2.1 Propriétés

Il faut bien distinguer co ˆut[u], qui est la valeur d’une table pour le sommetu cal-culée par l’algorithme, et le coût d’un chemin C, notion mathématique notée co ˆut(C) correspondant à la somme des poids de ses arêtes. Bien évidemment, il va se trouver que co ˆut[u] = co ˆut(C) oùC est un plus court chemin desàu, soit distG(s, u) d’après les rappels de la section4.1.3. Mais il va falloir le démontrer ! car c’esta priorideux choses différentes. D’ailleurs on verra plus tard que pourA*co ˆut[u] n’est pas forcément le coût d’un plus court chemin.

Les deux propriétés suivantes sont immédiates d’après l’algorithme. En fait, elle ne dépendent pas du choix deu dans l’instruction2aet seront donc communes avec l’al-gorithmeA*. On remarque que les tables co ˆut[u] et parent[u] ne sont définies que pour les sommets dePQ. De plus, à l’étape2a,Q= ({s} ∪N(P))\P.

Propriété 4.1 S’il existe un chemin desàt dansG, alors l’algorithme le trouve.

En effet, on peut vérifier facilement que si le chemin n’est pas trouvé, alors tous les sommets accessibles depuis sont été ajoutés à Q. Dit autrement, sit est accessible depuis s, l’algorithme finira par ajouter t àQ et trouvera le chemin (à cause du « Tant queQ,∅»).

Le propriété 4.1 est liée au fait que, pour tout arcuv, siu est accessible depuis s alors l’algorithme finira par ajouter v à Q, à cause de l’étape 2d. Donc tous les arcs d’un chemins→ · · · →uv→ · · · →t seront ajouter tôt ou tard dansQ, et donct sera trouver. Notons que cette propriété ne dépend en rien de la valuationωdes arêtes.

Dans le cas symétrique, l’algorithme réalise un parcours de la composante connexe de s. Dans le cas asymétrique, il est possible que t ne soit pas accessible depuis s et pourtant qu’il soit dans la même composante connexe comme dans l’exemple4.7.

4.2. L’ALGORITHME DE DIJKSTRA 141 t

s

Figure 4.7 – Exemple de graphe asymétrique où t n’est pas accessible de-puiss.

Propriété 4.2 SiuPQ, le coût du cheminu→parent[u]→parent[parent[u]]→ · · · → svautco ˆut[u]. De plus tous les sommets du chemin, sauf peut-êtreu, sont dansP.

C’est lié au fait que co ˆut[v] est construit en 2(d)iv par l’ajout à co ˆut[u] du poids ω(u, v) entre v et son père uP, ce qui de proche en proche constitue la somme des poids des arêtes du chemin desàv.

La propriété suivante, que l’on va démontrer, dépend du choix deudans l’étape2a.

Proposition 4.1 Soitu le sommet sélectionné à l’étape2a. Alorsco ˆut[u] = distG(s, u).

On déduit de cette proposition que co ˆut[u] = distG(s, u) pour toutuP∪ {t}puisque tous les sommets deP proviennent de l’ajout des sommets issus de l’étape2a, de même si u =t. En la combinant avec la propriété 4.2, on en déduit que le chemin défini par la table parent[ ] pour tout sommet deP ∪ {t}est un plus court chemin. Dit autrement co ˆut[u] représente effectivement le coût d’un plus court chemin entresetu.

Preuve.Pour démontrer par contradiction la proposition4.1, on va supposer qu’il existe un sommet u sélectionné à l’étape 2a ne vérifiant pas l’énoncé, donc avec co ˆut[u] , distG(s, u). Comme co ˆut[u] est le coût d’un chemin de s à u (propriété 4.2), c’est que co ˆut[u]>distG(s, u).

Sans perte de généralité, on supposera que u est le premier sommet pour lequel co ˆut[u]>distG(s, u). Dans la suite, les ensemblesP etQ correspondent aux ensembles définis par l’algorithme lorsque le sommetuest sélectionné en2a.

Tous les sommets sélectionnés en 2a avant u se trouvent dans P. Donc co ˆut[x] = distG(s, x) pour toutxP. Notons quesP (et doncP ,∅), car co ˆut[s] = 0 = distG(s, s) et doncu,s.

Soit C un plus court chemin de s à u, et soit u0 le premier sommet en parcourant C de s à u qui ne soit pas dans P (cf. figure 4.8). Ce sommet existe carsP etu <P. CommeQ⊂ {s} ∪N(P), c’est queu0Q. À ce point de la preuveu0=uest parfaitement possible.

Comme étape intermédiaire, nous allons montrer que7co ˆut[u0]6distG(s, u0).

7. D’après la propriété4.2, on a évidement co ˆut[u0]>distG(s, u0) et donc on aura montré co ˆut[u0] = distG(s, u0). On pourrait donc croire, qu’après cette étape, on a montré que pouru0 Q, on a toujours co ˆut[u0] = distG(s, u0) soit l’égalité recherchée, et que cela suffit. Mais c’est incorrect ! En effet, au mieux on a montré l’égalité pourunsommet particulier deQ, pas pouru.

142 CHAPITRE 4. NAVIGATION

Q u

u0 v0

P

s C

Figure4.8 – Illustration de la preuve de la proposition4.1. NB : Les flèches représentent la relation de parentéw→parent[w], pas les arcs du graphe. Le plus court cheminC de s à u peut pénétrer plusieurs fois P etQ, et ne pas suivre l’arborescence dansP à cause de poids nuls.

Lorsqueuest choisi, tous les arcs du typewu0avecwP ont été visité à cause de l’instruction2d. À cause de l’instruction2(d)iiion a :

co ˆut[u0] = co ˆut[parent[u0]] +ω(parent[u0], u0) = min

wP

co ˆut[w] +ω(w, u0) . (4.1) Soitv0 le prédécesseur deu0surC, en parcourantCdesàu0. Par construction deu0, v0P. Il est possible d’avoirv0,parent[u0] comme illustré par la figure4.8. À cause de l’équation (4.1), et puisquev0P,

co ˆut[u0] 6 co ˆut[v0] +ω(v0, u0).

NotonsC[x, y] la partie du cheminC allant dexày, pour toutx, yC. L’observation est queC[x, y] est un plus court chemin entrexety, carCest un plus court chemin. Dit autrement,

co ˆut(C[x, y]) = X

eE(C[x,y])

ω(e) = distG(x, y).

(NB : ici co ˆut( ) est la valeur mathématique, pas co ˆut[ ].) Comme v0P, co ˆut[v0] = distG(s, v0) = co ˆut(C[s, v0]) puisques, v0C qui est un plus court chemin. Or l’arc (v0, u0) appartient àC. On a donc :

co ˆut[u0]6co ˆut[v0] +ω(v0, u0) = co ˆut(C[s, v0]) +ω(v0, u0) = co ˆut(C[s, u0]) = distG(s, u0). On a donc montré, comme souhaité, que co ˆut[u0]6distG(s, u0).

On a donc co ˆut[u0] 6 distG(s, u0) 6 distG(s, u) mais aussi, par hypothèse, distG(s, u) < co ˆut[u]. Il suit que co ˆut[u0] < co ˆut[u], ce qui contredit le choix de u à l’étape 2a comme étant le sommet de Q de coût minimum. Par conséquent

co ˆut[u] = distG(s, u), ce qu’on voulait montrer. 2

On remarquera que la preuve de la proposition 4.1n’utilise pas l’inégalité triangu-laire des poids. On utilise seulement le fait que le sous-chemin d’un plus court chemin est un plus court chemin.

4.2. L’ALGORITHME DE DIJKSTRA 143