Algorithmique Cours 10 : Chemins de coût minimum ROB3 ...

of 44 /44
Algorithmique Cours 10 : Chemins de coût minimum ROB3 – année 2014-2015

Embed Size (px)

Transcript of Algorithmique Cours 10 : Chemins de coût minimum ROB3 ...

Présentation PowerPointROB3 – année 2014-2015
Soit G=(S,A) un graphe orienté (n sommets, m arcs). Soit c:AR une fonction coût sur les arcs. Soient un sommet origine s et un sommet destination p.
Coût d'un chemin l = (a1,a2,…,ap), noté c(l) de G est la somme k=1..pc(ak).
Plus courts chemins à origine fixe
Etant donnés 2 sommets s et p, on veut : a) savoir s’il existe un chemin de coût minimum de s
à p ; b) si oui, déterminer un tel chemin.
Une donnée du problème est notée (G,c,s,p)
s 1 2 k p
n = 3(k+1) +1 Nombre de chemins de s à p : 2(k+1) = 2((n-1)/3).
Un chemin n'empruntant pas 2 fois le même arc, le nombre de chemins de s à p est fini.
Remarque : il peut être très grand (exponentiel en n).
Une instance du problème est notée (G,c,s,p). Problème : Déterminer un chemin de coût minimum de s à p.
Propriété : Il existe un chemin de s à p de coût Minimum si et seulement si p est un descendant de s dans G.
Propriété : Supposons que p soit un descendant de s dans G. Si G ne possède pas de circuit absorbant, alors il existe un chemin de coût minimum de s à p qui est élémentaire.
Définition: Un circuit est dit absorbant si son coût est strictement négatif.
s x
p chemin '
chemin
Preuve: Si est un chemin de coût minimum de s à p, tout chemin élémentaire ' extrait de (lemme de Koenig) satisfait c(') ≤ c().
Le sous-graphe G(s,p) Les sommets x du graphe qui n'appartiennent pas à un chemin de s à p peuvent être supprimés de G. G(s,p) est le sous-graphe de G obtenu après suppression de ces sommets.
p s
G(s,p):sous-graphe rouge
Propriété 1: c chemin de s à p dans G c chemin de s à p dans G(s,p)
Arborescence des chemins de coût minimum
Soit G=(S,A) un graphe. Soit c une valuation des arcs, c(a) est le "coût" de l’arc a. Soit s un sommet de G.
Hypothèses (H1) Le sommet s est une racine de G; (H2) G ne possède pas de circuit absorbant.
Propriété: G possède une arborescence couvrante H de racine s telle que pour tout sommet x de G, le chemin de s à x dans H est un chemin de coût minimum de s à x dans G.
H est appelée arborescence des chemins de coût minimum d’origine s.
Algorithme générique
Soit G=(S,A) un graphe. Soit c une valuation des arcs, c(a) est le coût de l’arc A. Soit s un sommet de G.
Hypothèse (H1) s est une racine de G; (H2) G ne possède pas de circuit absorbant.
Propriété: Soit H une arborescence couvrante de racine s dans G. Soit d(x) le coût du chemin de s à x dans H. H est une arborescence des chemins de coût minimum pour G si et seulement si pour tout arc (x,y) de G on a : d(y) ≤ d(x) + c(x,y). (C)
La propriété précédente est à la base de la plupart des algorithmes de calcul des chemins de coût minimum
Tout algorithme de ce type construit une arborescence couvrante satisfaisant les inégalités (C).
Notations : L'arborescence « courante » H=(X,U) (de racine s) en cours.
Si xX, le coût du chemin de s à x dans H est noté d(x). Si xX-{s}, le père de x dans H est noté pH(x).
Un arc (x,y) de G est dit incompatible pour H si : soit : xX et yX ; {type I1} soit : xX, yX et d(y) > d(x) + c(x,y)) ; {type I2}
Propriété: Tout arc arrière (x,y) pour H est compatible
Preuve : le coût du circuit formé du chemin de H de y à x et de l'arc (x,y), égal à d(x)-d(y)+c(x,y) est ≥ 0. (H2).
0
2
3 2
H arborescence courante sommets et arcs rouges valeurs d(x) dans les sommets rouges
Arcs incompatibles en bleu. 2 types d’arcs incompatibles :
- origine et extrémité couvertes (rouges) - origine couverte (rouge) et extrémité non couverte (bleue)
Sommets non couverts en bleu.
Si (x,y) est un arc incompatible alors l’itération fondamentale est définie par la procédure de mise à jour MAJ(x,y) suivante : MAJ(x,y) : si (x,y) est de type I1 alors [X:=X{y} ;U:=U{(x,y)}] sinon U:=U-{(pH(y),y)} {(x,y)}
Initialisation : H=({s},))
Propriété : Soit (x,y) un arc incompatible. Après l’exécution de MAJ(x,y), H=(X,U) est une arborescence de racine s et d(y) a diminué strictement (les autres valeurs d(z) n'ont pas changé).
0
2
0
2
Algorithme générique : Initialisation Tantqu’il existe un arc incompatible (x,y) dans G
faire MAJ(x,y)
Théorème : L’algorithme générique se termine et est valide. Preuve : Le nombre d’exécutions de MAJ portant sur des arcs d’extrémité y est fini car :
- le nombre de valeurs possibles de d(y) est fini, - les valeurs d(y) décroissent strictement.
Donc l’algorithme générique se termine.
L’arborescence H terminale est donc une arborescence des chemins de coût minimum d'origine s car :
- H est une arborescence couvrante (si un sommet z n’est pas dans H, tout chemin de s à z contient un arc incompatible) ;
- pour tout arc (x,y) de G : d(y) ≤ d(x)+c(x,y) .
Exemple d’exécution de l’algorithme générique
0
Preuve (Exemple étudié en TD)
Les algorithmes spécifiques diffèrent par la règle de choix d’un arc incompatible. La complexité de l’algorithme est très liée à ce choix.
Les algorithmes les plus efficaces sont obtenus en regroupant les exécutions de MAJ(x,y) sur les arcs incompatibles entrant ou sortant d’un même sommet. La procédure associée est appelée : examen d’un sommet.
Il faut alors une règle de choix du prochain sommet à examiner.
Cette règle doit conduire à un nombre d’examens de sommet aussi faible que possible.
Algorithme de Bellman-Ford
• Cas général. Source s et destination p • Le graphe G=(S,A) peut contenir des arcs avec des
coûts négatifs. • L'existence d'un plus court chemin n'est pas
assurée.
• L'algorithme renvoie – soit un plus court chemin entre s et p – soit un circuit de coût négatif dans G(s,p).
Idée générale
• Algorithme itératif à n étapes
• A l'étape k, on calcule les plus courts chemins entre s et chaque sommet x qui contiennent au plus k arcs.
// Initialisation d(s) = 0; pour tout x≠s faire d(x) = ∞
// Boucle principale Pour k = 1 à n faire
Pour x≠s faire d(x) = min{d(a-)+c(a) | a+=x}
Algorithme de Bellman-Ford
// Boucle principale Pour k = 1 à n faire
dk(s) = 0 Pour x≠s faire dk(x) = min{dk-1(a-)+c(a) | a+=x} Si dk(x) = dk-1(x) pour tout x alors stop: optimum
// Détection de circuit Si il existe x tel que dn(x) ≠ dn-1(x) alors il n'existe pas de plus court chemin entre s et x
Algorithme de Bellman-Ford
• Pour k=0, le théorème est vrai.
• Supposons qu'il est vrai jusqu'au rang k-1 – Considérons un plus court chemin P de s à x avec au
plus k arcs. Soit y le prédécesseur de x sur ce chemin. – La longueur du chemin P entre s et y est forcément un
plus court chemin de s à y avec au plus k-1 arcs. – La longueur de P est donc dk-1(y) + c(y,x) ≥ dk(x)
Théorème Les valeurs calculées dk(x) représentent le plus court chemin de s à x si on impose que les chemins contiennent au plus k arcs.
• Inversement, – Considérons l'arc a* qui minimise
{dk-1(a-)+c(a) | a+=x} – Comme il existe un chemin de s à a*- avec au plus k-1
arcs, il existe un chemin de s à x, de coût dk(x) – dk(x) est donc supérieur ou égal à la longueur de P.
• P est donc exactement de longueur dk(x).
Preuve de l'algorithme
• Complexité temporelle en O(mn)
• Complexité en espace en O(n²) peut être réduite en O(n) si on ne stocke que les valeurs dk-1(.) et dk(.)
// Initialisation d0(s) = 0; pour tout x≠s faire d0(x) = ∞
// Boucle principale Pour k = 1 à n faire
dk(s) = 0 Pour x≠s faire dk(x) = min{dk-1(a-)+c(a) | a+=x} Si dk(x) = dk-1(x) pour tout x alors stop: optimum
// Détection de circuit Si il existe x tel que dn(x) ≠ dn-1(x) alors il n'existe pas de plus court chemin entre s et x
Graphes sans circuits Algorithme de Bellman
Donnée : G=(S,A) graphe sans circuits, Le sommet s racine de G, Fonction coût c sur les arcs.
Algorithme de Bellman (2 étapes) : Etape 1 : Déterminer une liste topologique L =(s1,…,sn) des sommets de G telle que s=s1; Initialisation; Etape 2 : Pour k de 1 à n faire Examiner(sk) FinPour.
Examiner(x) Pour tout successeur y de x faire
Si d(y) > d(x)+c(x,y) alors d(y) = d(x)+c(x,y); ouvrir(y); FinSi
FinPour fermer(x);
Initialisation d(s1) = 0; ouvrir(s1); Pour tout k de 2 à n faire
d(sk) = + ∞ ; Fin Pour
Preuve (Algorithme de Bellman) Si le sommet sj est ouvert lors de l’examen de sk, alors j > k. Un sommet fermé n’est donc jamais ré-ouvert. Après l’examen de sn, tous les sommets sont donc fermés.
Complexité : O(n+m)
• Un sommet est dit ouvert si son évaluation d décroit. • Il est dit fermé à l’issue de l’exécution de la procédure examiner.
Algorithme de Bellman (2 étapes) : Etape 1 : Déterminer une liste topologique L =(s1,…,sn) des sommets de G telle que s=s1; Initialisation; Etape 2 : Pour k de 1 à n faire Examiner(sk) FinPour.
Exemple.
1
2-1-1 0 3 1
0-1-1 0 2 1
Coûts positifs ou nuls Algorithme de Dijkstra
Donnée : Graphe orienté G=(S,A), Sommet s racine de G, Fonction coût c sur les arcs telle que pour tout arc (x,y)
c(x,y) ≥ 0.
Algorithme de Dijkstra : Initialisation; Pour k de 1 à n faire
Soit x un sommet ouvert tel que d(x) est minimum ; Examiner(x); FinPour.
Examiner(x) Pour tout successeur y de x faire
Si d(y) > d(x)+c(x,y) alors d(y)= d(x)+c(x,y); ouvrir(y); FinSi
FinPour fermer(x);
Initialisation d(s1) = 0; ouvrir(s1); Pour tout k de 2 à n faire
d(sk) = + ∞ ; Fin Pour
Front de propagation autour de la source = ronds dans l'eau
Source Visités
Non visités
Front de propagation autour de la source = ronds dans l'eau
Source Visités
Non visités
Front de propagation autour de la source = ronds dans l'eau
Source Visités
Non visités
Front de propagation autour de la source = ronds dans l'eau
Source Visités
Non visités
Bordure
Preuve de l’algorithme de Dijkstra. A la fin de l’itération k, soit : F (resp. O) l’ensemble des sommets fermés (resp. ouverts) ; H l’arborescence courante ; z un sommet de O tel que : d(z) = MinyO d(y).
Théorème (invariant de la boucle Pour) : 1) Pour tout x de F, le chemin de s à x dans H est un
chemin de coût minimum de s à x dans G ; 2) La valeur d(z) est le coût minimum d’un chemin de s à z
dans G.
Complexité de l’algorithme de Dijkstra.
Rappel de l’algorithme : Initialisation; Pour k de 1 à n faire
Soit x un sommet ouvert tel que d(x) est minimum ; Examiner(x) FinPour
1) Initialisation : O(n) 2) Recherche d’un sommet ouvert / d minimum : O(n) 3) Examiner(x) : O(d+(x))
Complexité de l’algorithme : O(n2).
• L’ensemble dynamique O des sommets ouverts peut être géré en utilisant une structure de données implémentant un TAS.
• En utilisant un tas pour gérer l’ensemble dynamique O, on peut implémenter l’algorithme de Dijkstra avec une complexité pire-cas de O((n+m)log(n)).
Gestion de l’ensemble des sommets ouverts dans l’algorithme de Dijkstra.
L’ensemble dynamique est O ; La priorité d’un sommet ouvert x est d(x) : coût du chemin de s à x dans l’arborescence H courante.
Soient à la fin de l’itération k : F l’ensemble des sommets fermés, O l’ensemble des sommets ouverts,
Un sommet ouvert z de priorité minimale est à la racine du tas. Donc, pour calculer z, complexité O(1)
Il faut insérer dans O chaque successeur y de z non couvert (c’est-à-dire ni dans O ni dans F) avec la priorité d(z)+c(z,y). Complexité : O(log(n)) par successeur
Pour chaque successeur y de z tel que y est ouvert et (z,y) est incompatible, il faut remplacer la priorité de y par la nouvelle évaluation de y : c’est-à-dire d(z)+c(z,y). Complexité : O(log(n)) par successeur
Il en résulte que si les sommets sont examinés dans l’ordre (z1,z2,…,zn), le nombre total d’opérations de mise à jour du tas est majoré par : C log(n)(n+d+(z1)+….+d+(zn)) = C (n+m)log(n).
Il faut supprimer z du tas : Complexité : O(log(n)) par sommet supprimé.
Complexité globale : O ((n+m)log(n))
Diapo 1
Diapo 2
Diapo 3
Diapo 4
Diapo 5
Diapo 6
Diapo 7
Diapo 8
Diapo 9
Diapo 10
Diapo 11
Diapo 12
Diapo 13
Diapo 14
Diapo 15
Diapo 16
Diapo 17
Diapo 18
Diapo 19
Diapo 20
Diapo 21
Diapo 22
Diapo 23
Diapo 24
Diapo 25
Diapo 26
Diapo 27
Diapo 28
Diapo 29
Diapo 30
Diapo 31
Diapo 32
Diapo 33
Diapo 34
Diapo 35
Diapo 36
Diapo 37
Diapo 38
Diapo 39
Diapo 40
Diapo 41
Diapo 42
Diapo 43
Diapo 44