algorithmique (école d'ingénieur) · Chapitre 7 · Exercice de TD
Toutes les lignes existent
Graphes sans circuit et ordonnancement de projets · niveau 2
Énoncé
Pour toutes villes , il existe une ligne directe de coût , rangé dans D[i][j] (les autres cases sont quelconques).
- Donner la récurrence du coût minimum d'un trajet de à .
- Écrire
int[][] calculerMA(int[][] D), sans construire de graphe, et donner sa complexité. - Calculer , et un trajet optimal de à pour
| 10 | 40 | 80 | 130 | ||
| 25 | 50 | 90 | |||
| 30 | 60 | ||||
| 20 |
Corrigé
- Ici : et, pour , .
- Le graphe symétrique est remplacé par une boucle sur :
static int[][] calculerMA(int[][] D) { int n = D.length;
int[] M = new int[n], A = new int[n];
M[0] = 0; A[0] = -1;
for (int j = 1; j < n; j++) {
M[j] = INFINI;
for (int i = 0; i < j; i++) // pred(j) = [0:j]
if (M[i] + D[i][j] < M[j]) { M[j] = M[i] + D[i][j]; A[j] = i; }
}
return new int[][] {M, A};
}
Le corps de la boucle intérieure s'exécute fois : , ce qui est bien puisque le graphe complet a arcs.
- Exécution :
MD = [0, 10, 35, 60, 80], AD = [-1, 0, 1, 1, 3]
0--(10)-->1--(50)-->3--(20)-->4
nom : M
valeurs : 0 10 35 60 80
vert : 0 1 3 4
fleches : 0->1 1->2 1->3 3->4
legende : flèches de a(j) vers j ; en vert : le trajet 0, 1, 3, 4 (coût 80)100 % gratuit
La suite du chapitre est sur Adloun
- 11 autres exercices corrigés dans ce chapitre
- Les 2 QCM du chapitre, le premier sans compte
- Le podcast et la vidéo du chapitre : 2 minutes d'écoute sans compte
- Le tuteur, qui guide pas à pas sans donner la réponse
Sans compte : le cours, le premier QCM et 2 minutes de podcast et de vidéo. Exercices et tuteur : inscription gratuite en 30 secondes, sans carte bancaire.