Licence Informatique Algorithmique des graphes Cours 8 Algorithmes de Dijkstra et Ordinal
Hypothèses particulières Sur les valeurs des arcs Sur la topologie du graphe Algorithmes GLOUTONS
Hypothèses particulières Sur les valeurs des arcs Sur la topologie du graphe Algorithmes GLOUTONS
Chemins de valeur additive minimale (min, +) Hypothèse : valeurs des arcs 0 plus généralement : valeurs des arcs moins bonnes que l’élément neutre de Algorithme de DIJKSTRA
Principe : exploration selon la stratégie « meilleur d’abord » INVARIANT Tout sommet z est : dehors ® non visité, l(z) = +¥ en attente visité, au moins un prédécesseur terminé, aucun arc sortant visité, l(z) = min(v(u)), u chemin de x à z dont l’avant-dernier sommet est terminé, pred(z) = prédécesseur minimal de z terminé ® visité, tous les arcs sortants visités, l(z) = min(v(u)), u chemin de x à z pred(z) = prédécesseur minimal de z
Arrêt : Init : plus de sommet en attente Les sommets dehors sont inaccessibles, les sommets terminés ont leurs attributs corrects. Init : défini non ; en attente ) ( pred(x) x état ¬ l(x) tous les autres sommets sont dehors
Progression : Soit y en attente d’attribut MINIMUM (des en attente) ; y devient terminé ; pourtout z successeur de y : fpourtout cas fcas z est dehors z devient en attente ; z est en attente z est terminé rien
Preuve Initialement, l’invariant est vérifié (par construction) La progression maintient l’invariant (voir détails plus loin) Finalement, le résultat obtenu est correct (Conjonction de l’invariant et de la condition d’arrêt)
Preuve Initialement, l’invariant est vérifié (par construction) La progression maintient l’invariant (voir détails plus loin) Finalement, le résultat obtenu est correct La condition d ’arrêt est obtenue après un nombre fini d’étapes (A chaque étape un nouveau sommet devient terminé).
Preuve La progression maintient l’invariant (détails) Invariant au début d’une étape Invariant à la fin de l’étape Pour tout sommet y subissant une transition d’état : dehors dehors : état non modifié
La progression maintient l’invariant (détail) Pour tout sommet z subissant une transition d’état : dehors en attente : z a un seul prédécesseur terminé (y) et ses attributs sont initialisés conformément à la propriété des sommets en attente. z est dehors z devient en attente ; cas en attente de minimal ur prédécesse terminé est sommet dernier avant l' dont à chemin )), ( min( z pred(z) x u v = l(z)
La progression maintient l ’invariant (détail) Pour tout sommet z subissant une transition d ’état : en attente en attente : z a un nouveau prédécesseur terminé (y) et ses attributs sont mis à jour conformément à la propriété des sommets en attente. z est en attente en attente de minimal ur prédécesse recouvert est sommet dernier avant l' dont à chemin )), ( min( z pred(z) x u v = l(z)
La progression maintient l’invariant (détail) Pour tout sommet y subissant une transition d ’état : en attente terminé : Il faut montrer que les attributs de y sont définitifs C’est-à-dire y en attente d’attribut (y) minimum (y)=valeur minimale des chemins de x à y.
T A y x t z Soit u = [x * y] un chemin de x à y Soit t=dernier sommet de u tel que tT u = [x * t].(t, z).[z * y]
T A y x t z u = [x * t].(t, z).[z * y] v(u) = v([x * t])+v(t, z)+v([z * y])
T A y x t z u = [x * t].(t, z).[z * y] v(u) = v([x * t])+v(t, z)+v([z * y]) 0 (hypothèse sur les arcs)
T A y x t z v(u) v([x * t])+v(t, z)
T A y x t z t est terminé v(u) v([x * t])+v(t, z) (t) (car t T) ® (t) = val. min. des chemins de x à t v(u) v([x * t])+v(t, z) (t) (car t T)
T A y x t z z est en attente dont l’avant dernier sommet est terminé ® (z) = val. min. des chemins de x à z dont l’avant dernier sommet est terminé v(u) (t) +v(t, z) (z) (car z A et t T)
T A y x t z v(u) (z) (y) (critère de choix de y)
T A y x t z v(u) (y)
T A y x t z v(u) (y) Réciproquement : Propriété de (y) pour y A : (y) = valeur minimum d’une catégorie de chemins donc : il existe un chemin de x à y, de valeur (y)
T A y x t z (y)= valeur minimum des chemins de x à y le sommet y devient terminé
Un exemple d’exécution 7 7 d g 3 5 3 1 1 1 12 a b e h i 4 4 8 1 4 12 c f en attente terminés (a, 0, /) Un exemple d’exécution
terminés en attente (a, 0, /) (d, 5, a) (b, 1, a) (c, 4, a) 7 7 d g 3 12 (0) a b e h i 4 4 8 1 4 12 c f en attente terminés (a, 0, /) (d, 5, a) (b, 1, a) (c, 4, a)
terminés en attente (a, 0, /) (d, 5, a) (c, 4, a) (b, 1, a) (d, 4, b) 7 7 d g 3 5 3 1 1 1 12 (0) a (1) b e h i 4 4 8 1 4 12 c f en attente terminés (a, 0, /) (d, 5, a) (c, 4, a) (b, 1, a) (d, 4, b)
terminés en attente (a, 0, /) (d, 4, b) (e, 12, c) (f, 8, c) (b, 1, a) 7 7 d g 3 5 3 1 1 1 12 (0) a (1) b e h i 4 4 8 1 4 12 c f (4) en attente terminés (a, 0, /) (d, 4, b) (e, 12, c) (f, 8, c) (b, 1, a) (c, 4, a)
terminés en attente (a, 0, /) (e, 12, c) (f, 8, c) (g, 11, d) 7 7 (4) d g 3 5 3 1 1 1 12 (0) a (1) b e h i 4 4 8 1 4 12 c f (4) en attente terminés (a, 0, /) (e, 12, c) (f, 8, c) (g, 11, d) (b, 1, a) (e, 7, d) (c, 4, a) (d, 4, b)
terminés en attente (a, 0, /) (f, 8, c) (g, 11, d) (h, 8, e) (b, 1, a) 7 7 (4) d g 3 5 3 1 1 1 12 (0) a (1) b (7) e h i 4 4 8 1 4 12 c f (4) en attente terminés (a, 0, /) (f, 8, c) (g, 11, d) (h, 8, e) (b, 1, a) (f, 7, e) (c, 4, a) (d, 4, b) (e, 7, d)
terminés en attente (a, 0, /) (g, 11, d) (h, 8, e) (i, 19, f) 7 7 (4) d g 3 5 3 1 1 1 12 (0) a (1) b (7) e h i 4 4 8 1 4 12 c (7) f (4) en attente terminés (a, 0, /) (g, 11, d) (h, 8, e) (i, 19, f) (b, 1, a) (c, 4, a) (d, 4, b) (e, 7, d) (f, 7, e)
terminés en attente (a, 0, /) (g, 11, d) (i, 19, f) (b, 1, a) 7 7 (4) d g 3 5 3 1 1 1 12 (0) a (1) b (7) e (8) h i 4 4 8 1 4 12 c (7) f (4) en attente terminés (a, 0, /) (g, 11, d) (i, 19, f) (b, 1, a) (g, 9, h) (c, 4, a) (d, 4, b) (e, 7, d) (f, 7, e) (h, 8, e)
terminés en attente (a, 0, /) (i, 19, f) (i, 16, g) (b, 1, a) 7 7 (4) d (9) g 3 5 3 1 1 1 12 (0) a (1) b (7) e (8) h i 4 4 8 1 4 12 c (7) f (4) en attente terminés (a, 0, /) (i, 19, f) (i, 16, g) (b, 1, a) (c, 4, a) (d, 4, b) (e, 7, d) (f, 7, e) (h, 8, e) (g, 9, h)
terminés en attente vide (a, 0, /) (b, 1, a) (c, 4, a) (d, 4, b) 7 7 (4) d (9) g 3 5 3 1 1 1 12 (0) a (1) b (7) e (8) h (16) i 4 4 8 1 4 12 c (7) f (4) en attente terminés (a, 0, /) vide (b, 1, a) (c, 4, a) (d, 4, b) (e, 7, d) (f, 7, e) (h, 8, e) (g, 9, h) (i, 16, g)
Les sommets sont terminés dans l’ordre des croissants 7 7 (4) d (9) g 3 5 3 1 1 1 12 (0) a (1) b (7) e (8) h (16) i 4 4 8 1 4 12 c (7) f (4) (a, 0, /) (b, 1, a) (c, 4, a) (d, 4, b) Les sommets sont terminés dans l’ordre des croissants (e, 7, d) (f, 7, e) (h, 8, e) (g, 9, h) (i, 16, g)
Complexité O(n2) A chaque étape : 1 sommet devient terminé Au plus n étapes A l’étape k : Sélection du sommet y à terminer : au plus n-k en attente au pire n-k-1 comparaisons Mise à jour des successeurs de y : au pire |(y)| tests (comparaisons) Globalement : O(n2) O(n2) + O(m) comparaisons Nombre d ’arcs
Hypothèses particulières Sur les valeurs des arcs Sur la topologie du graphe Algorithmes GLOUTONS
Hypothèse : GRAPHE SANS CIRCUIT hypothèse supplémentaire : le sommet de départ est racine du graphe
Hypothèse : GRAPHE SANS CIRCUIT hypothèse supplémentaire : le sommet de départ est racine du graphe point d’entrée tout sommet en est descendant Algorithme ORDINAL-RACINE
Principe : exploration selon la stratégie « points d’entrée » (Marimont) INVARIANT Tout sommet y est : dehors terminé
Arrêt : Init : tous les sommets sont terminés tous les autres sommets sont dehors
Progression : Soit y dehors dont tous les prédécesseurs sont terminés ; y devient terminé ;
Preuve Initialement, l’invariant est vérifié (par construction) La progression maintient l’invariant (voir détail + loin) Finalement, le résultat obtenu est correct (Conjonction de l’invariant et de la condition d’arrêt)
Preuve Initialement, l’invariant est vérifié (par construction) La progression maintient l’invariant (voir détail + loin) Finalement, le résultat obtenu est correct La condition d’arrêt est obtenue après un nombre fini d’étapes (A chaque étape un nouveau sommet devient terminé).
Preuve La progression maintient l’invariant (détail) Invariant au début d’une étape Invariant à la fin de l ’étape Pour tout sommet y subissant une transition d’état : dehors dehors : état non modifié
La progression maintient l’invariant (détail) Pour tout sommet y subissant une transition d ’état : dehors terminé : y a tous ses prédécesseurs terminés tout prédécesseur z de y a ses attributs définitifs Donc y reçoit ses attributs définitifs
T z1 x z2 y z3 meilleur chemin de x à y via z1, valeur (z1)=21 4 z1 x 22 2 z2 y 17 10 z3 meilleur chemin de x à y via z1, valeur (z1)=21 meilleur chemin de x à y via z2, valeur (z2)=22 meilleur chemin de x à y via z3, valeur (z3)=17
T z1 x z2 y z3 meilleure valeur de chemin de x à y : 21 z1 4 x 22 z2 2 y 17 z3 10 meilleur chemin de x à y via z1, valeur (z1)=21 meilleur chemin de x à y via z2, valeur (z2)=22 meilleur chemin de x à y via z3, valeur (z3)=17 meilleure valeur de chemin de x à y : min((z1) +v(z1,y) , (z2) +v(z2,y) , (z3) +v(z3,y)) = min(25, 24, 27) pred(y) = z2
Preuve La condition d’arrêt est obtenue après un nombre fini d’étapes (A chaque étape un nouveau sommet devient terminé). Progression : Soit y dehors dont tous les prédécesseurs sont terminés ; Choix toujours possible (absence de circuit) ; (cf. algorithme de Marimont)
Un exemple d’exécution 7 7 d g -3 5 3 1 -1 1 12 a a b e h i (0) 4 4 -1 8 -1 4 12 c f terminés (a, 0, /) (b)= (a)+1=1, pred(b)=a Un exemple d’exécution
(d)= min((a)+5, (b)+3)=4, pred(d)=b 7 7 d g -3 5 3 1 -1 1 12 a a b e h i (0) (1) 4 4 -1 8 -1 4 12 c f terminés (a, 0, /) (b, 1, a) (d)= min((a)+5, (b)+3)=4, pred(d)=b
(c)= min((a)+4, (b)+4)=4, pred(c)=a 7 7 (4) d g -3 5 3 1 -1 1 12 a a b e h i (0) (1) 4 4 -1 8 -1 4 12 c f terminés (a, 0, /) (b, 1, a) (d, 4, b) (c)= min((a)+4, (b)+4)=4, pred(c)=a
(e)= min((d)-3, (c)+8)=1, pred(e)=c 7 7 (4) d g -3 5 3 1 -1 1 12 a a b e h i (0) (1) 4 4 -1 8 -1 4 12 (4) c f terminés (a, 0, /) (b, 1, a) (d, 4, b) (e)= min((d)-3, (c)+8)=1, pred(e)=c (c, 4, a)
(f)= min((c)+4, (e)-1)=0, pred(f)=e 7 7 (4) d g -3 5 3 1 -1 1 12 a a b (1) e h i (0) (1) 4 4 -1 8 -1 4 12 (4) c f terminés (a, 0, /) (b, 1, a) (d, 4, b) (f)= min((c)+4, (e)-1)=0, pred(f)=e (c, 4, a) (e, 1, d)
(h)= min((e)-1, (f)-1)=-1, pred(h)=f 7 7 (4) d g -3 5 3 1 -1 1 12 a a b (1) e h i (0) (1) 4 4 -1 8 -1 4 12 (4) c (0) f terminés (a, 0, /) (b, 1, a) (d, 4, b) (h)= min((e)-1, (f)-1)=-1, pred(h)=f (c, 4, a) (e, 1, d) (f, 0, e)
(g)= min((d)+7, (h)+1)=0, pred(g)=h (4) d g -3 5 3 1 -1 1 12 a a b (1) e h i (0) (1) (-1) 4 4 -1 8 -1 4 12 (4) c (0) f terminés (a, 0, /) (b, 1, a) (d, 4, b) (g)= min((d)+7, (h)+1)=0, pred(g)=h (c, 4, a) (e, 1, d) (f, 0, e) (h, -1, f)
terminés (i)= min((f)+12, (h)+12, (g)+7 )=7, pred(i)=g (a, 0, /) (4) d g (0) -3 5 3 1 -1 1 12 a a b (1) e h i (0) (1) (-1) 4 4 -1 8 -1 4 12 (4) c (0) f terminés (a, 0, /) (b, 1, a) (d, 4, b) (i)= min((f)+12, (h)+12, (g)+7 )=7, pred(i)=g (c, 4, a) (e, 1, d) (f, 0, e) (h, -1, f) (g, 0, h)
terminés (a, 0, /) (b, 1, a) (d, 4, b) (c, 4, a) (e, 1, d) (f, 0, e) 7 7 (4) d g (0) -3 5 3 1 -1 1 12 a a b (1) e h (0) (1) (-1) (7) i 4 4 -1 8 -1 4 12 (4) c (0) f terminés (a, 0, /) (b, 1, a) (d, 4, b) (c, 4, a) (e, 1, d) (f, 0, e) (h, -1, f) (g, 0, h) (i, 7, g)