diff --git a/slides/cours_25.md b/slides/cours_25.md index d142bf4ddb8ff6b993ef12b4833a49f3b4870a87..5b4c21ace3d064de6be88daa97adf86cb0474446 100644 --- a/slides/cours_25.md +++ b/slides/cours_25.md @@ -638,7 +638,7 @@ $$ :::: column -## Que vaut $D^{(0)}$? +## Que vaut $D^{(0)}$ (3min)? . . . @@ -656,14 +656,304 @@ $$ ::: +# Algorithme de Floyd--Warshall (exemple) + + +::: columns + +:::: column + +## On part de $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} +$$ + + +:::: + +:::: column + +## Que vaut $D^{(1)}$ (3min)? + +. . . + +$$ +D^{(0)}=\begin{bmatrix} +0 & 2 & 4 & \infty & 3 \\ +2 & 0 & \mathbf{6} & \infty & 1 \\ +6 & 2 & 0 & 4 & 3 \\ +1 & \mathbf{3} & \mathbf{5} & 0 & \mathbf{4} \\ +\infty & \infty & \infty & 1 & 0 \\ +\end{bmatrix} +$$ + +:::: + +::: + +# Algorithme de Floyd--Warshall (exemple) + + +::: columns + +:::: column + +## On part de $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} +$$ + + +:::: + +:::: column + +## Que vaut $D^{(1)}$ (3min)? + +. . . + +$$ +D^{(1)}=\begin{bmatrix} +0 & 2 & 4 & \infty & 3 \\ +2 & 0 & \mathbf{6} & \infty & 1 \\ +6 & 2 & 0 & 4 & 3 \\ +1 & \mathbf{3} & \mathbf{5} & 0 & \mathbf{4} \\ +\infty & \infty & \infty & 1 & 0 \\ +\end{bmatrix} +$$ +## Exemple + +$$ +D_{42}^{(1)}=D_{41}^{(0)}+D_{12}^{(0)}=1+2<\infty. +$$ + +:::: + +::: + +# Algorithme de Floyd--Warshall (exemple) + +::: columns + +:::: column +## On part de $D^{(1)}$ + +$$ +D^{(1)}=\begin{bmatrix} +0 & 2 & 4 & \infty & 3 \\ +2 & 0 & 6 & \infty & 1 \\ +6 & 2 & 0 & 4 & 3 \\ +1 & 3 & 5 & 0 & 4 \\ +\infty & \infty & \infty & 1 & 0 \\ +\end{bmatrix} +$$ + + +:::: + +:::: column + +## Que vaut $D^{(2)}$ (3min)? + +. . . + +$$ +D^{(2)}=\begin{bmatrix} +0 & 2 & 4 & \infty & 3 \\ +2 & 0 & 6 & \infty & 1 \\ +\mathbf{4} & 2 & 0 & 4 & 3 \\ +1 & 3 & 5 & 0 & 4 \\ +\infty & \infty & \infty & 1 & 0 \\ +\end{bmatrix} +$$ + +:::: + +::: + +# Algorithme de Floyd--Warshall (exemple) + +::: columns + +:::: column + +## On part de $D^{(2)}$ + +$$ +D^{(2)}=\begin{bmatrix} +0 & 2 & 4 & \infty & 3 \\ +2 & 0 & 6 & \infty & 1 \\ +4 & 2 & 0 & 4 & 3 \\ +1 & 3 & 5 & 0 & 4 \\ +\infty & \infty & \infty & 1 & 0 \\ +\end{bmatrix} +$$ + + +:::: + +:::: column + +## Que vaut $D^{(3)}$ (3min)? + +. . . + +$$ +D^{(3)}=\begin{bmatrix} +0 & 2 & 4 & \mathbf{8} & 3 \\ +2 & 0 & 6 & \mathbf{10} & 1 \\ +4 & 2 & 0 & 4 & 3 \\ +1 & 3 & 5 & 0 & 4 \\ +\infty & \infty & \infty & 1 & 0 \\ +\end{bmatrix} +$$ + +:::: + +::: + +# Algorithme de Floyd--Warshall (exemple) + +::: columns + +:::: column + +## On part de $D^{(3)}$ + +$$ +D^{(3)}=\begin{bmatrix} +0 & 2 & 4 & 8 & 3 \\ +2 & 0 & 6 & 10 & 1 \\ +4 & 2 & 0 & 4 & 3 \\ +1 & 3 & 5 & 0 & 4 \\ +\infty & \infty & \infty & 1 & 0 \\ +\end{bmatrix} +$$ + +:::: + +:::: column + +## Que vaut $D^{(4)}$ (3min)? + +. . . + +$$ +D^{(4)}=\begin{bmatrix} +0 & 2 & 4 & 8 & 3 \\ +2 & 0 & 6 & 10 & 1 \\ +4 & 2 & 0 & 4 & 3 \\ +1 & 3 & 5 & 0 & 4 \\ +\mathbf{2} & \mathbf{4} & \mathbf{6} & 1 & 0 \\ +\end{bmatrix} +$$ + +:::: + +::: + +# Algorithme de Floyd--Warshall (exemple) + +::: columns + +:::: column + +## On part de $D^{(4)}$ + +$$ +D^{(4)}=\begin{bmatrix} +0 & 2 & 4 & 8 & 3 \\ +2 & 0 & 6 & 10 & 1 \\ +4 & 2 & 0 & 4 & 3 \\ +1 & 3 & 5 & 0 & 4 \\ +2 & 4 & 6 & 1 & 0 \\ +\end{bmatrix} +$$ + +:::: + +:::: column + +## Que vaut $D^{(5)}$ (3min)? + +. . . + +$$ +D^{(5)}=\begin{bmatrix} +0 & 2 & 4 & \mathbf{4} & 3 \\ +2 & 0 & 6 & \mathbf{2} & 1 \\ +4 & 2 & 0 & 4 & 3 \\ +1 & 3 & 5 & 0 & 4 \\ +2 & 4 & 6 & 1 & 0 \\ +\end{bmatrix} +$$ + +:::: + +::: + +# Algorithme de Floyd--Warshall ## The pseudo-code (10min) * Quelle structure de données? * Quelle initialisation? -* Quel est le code pour +* Quel est le code pour le calcul de la matrice $D$? + +# Algorithme de Floyd--Warshall + +## The pseudo-code + +* Quelle structure de données? + +```C +int distance[n][n]; +``` . . . +* Quelle initialisation? + +```C +matrice ini_floyd_warshall(distance, n, w) + pour i de 1 à n + pour j de 1 à n + distance[i][j] = w(i,j) + retourne distance +``` + +# Algorithme de Floyd--Warshall + +## The pseudo-code + +* Quel est le code pour le calcul de la matrice $D$? + +```C +matrice floyd_warshall(distance, n, w) + pour k de 1 à n + pour i de 1 à n + pour j de 1 à n + distance[i][j] = min(distance[i][j], distance[i][k] + distance[k][j]) + retourne distance +``` + +# Algorithme de Floyd--Warshall + +## La matrice de précédence +