diff --git a/slides/cours_25.md b/slides/cours_25.md index 2f113608e026ffd9bc65f4c14d3c69ee9c7f0433..d142bf4ddb8ff6b993ef12b4833a49f3b4870a87 100644 --- a/slides/cours_25.md +++ b/slides/cours_25.md @@ -592,4 +592,78 @@ O(V) fp = changer_priorité(fp, v, n_distance) ## Solution alternative: Floyd--Warshall -* Complexité $\mathcal{O}(|V|^3)$, indiqué pour graphes denses. \ No newline at end of file +* Pour toutes paires de sommets $u,v\in V$, trouver le chemin de poids minimal reliant $u$ à $v$. +* Complexité $\mathcal{O}(|V|^3)$, indiqué pour graphes denses. +* Fonctionne avec la matrice d'adjacence. + +# Algorithme de Floyd--Warshall + +## Idée générale + +* Soit l'ensemble de sommets $V=\{1, 2, 3, 4, ..., n\}$. +* Pour toute paire de sommets, $i,j$, on considère tous les chemins passant par les sommets intermédiaires $\in\{1, 2, ..., k\}$ avec $k\leq n$. +* On garde pour chaque $k$ la plus petite valeur. + +## Principe + +* A chaque étape, $k$, on vérifie s'il est plus court d'aller de $i$ à $j$ en passant par le sommet $k$. +* Si à l'étape $k-1$, le coût du parcours est $p$, on vérifie si $p$ est plus petit que $p_1+p_2$, le chemin de $i$ à $k$, et $k$ à $j$ respectivement. + +# Algorithme de Floyd--Warshall + +## The algorithme + +Soit $d_{ij}(k)$ le plus court chemin de $i$ à $j$ passant par les sommets $\in\{1,2,...,k\}$ + +$$ +d_{ij}(k)=\left\{ +\begin{array}{ll} + w(i,j), & \mbox{si } k=0,\\ + \min(d_{ij}(k-1),d_{ik}(k-1)+d_{kj}(k-1)), & \mbox{sinon}. +\end{array} +\right. +$$ + +# Algorithme de Floyd--Warshall (exemple) + + +::: columns + +:::: column + + + + +:::: + +:::: column + +## Que vaut $D^{(0)}$? + +. . . + +$$ +D^{(0)}=\begin{bmatrix} +0 & 2 & 4 & \infty & 3 \\ +2 & 0 & 8 & \infty & 1 \\ +6 & 2 & 0 & 4 & 3 \\ +1 & \infty & \infty & 0 & 5 \\ +\infty & \infty & \infty & 1 & 0 \\ +\end{bmatrix} +$$ + +:::: + +::: + + + + +## The pseudo-code (10min) + +* Quelle structure de données? +* Quelle initialisation? +* Quel est le code pour + +. . . +