algorithmique (école d'ingénieur) · Chapitre 5 · Exercice de TD
Zébulon, encore
Chemins de valeur optimale · niveau 2
Énoncé
Reprendre le problème de Zébulon (chapitre 1) comme un problème de lignes de bus : les sauts de et de cases sont deux « lignes », et arriver sur la case rapporte .
- Écrire la récurrence de avec une seule boucle sur la longueur du saut, et mémoriser , case d'où part le dernier saut.
- Programmer
calculerMAet la fonction d'affichage, et les exécuter sur le ruban
Corrigé
- Un chemin optimal vers arrive depuis ou (s'ils existent et sont accessibles).
Base. .
Hérédité. : , avec ; est la case qui réalise le maximum. La case obtient ainsi sans cas particulier. -
static int[][] calculerMA(int[] R) {
int n = R.length;
int[] M = new int[n], A = new int[n];
M[0] = R[0]; A[0] = -1; // base
for (int j = 1; j < n; j++) { // par j croissants
M[j] = MOINS_INFINI; A[j] = -1; // aucun chemin connu
for (int saut = 2; saut <= 3; saut++) {
int i = j - saut; // case de départ du saut
if (i >= 0 && M[i] > MOINS_INFINI / 2 && M[i] + R[j] > M[j]) {
M[j] = M[i] + R[j]; A[j] = i;
}
}
}
return new int[][] {M, A};
}
static void acm(int[] A, int j) {
if (j == 0) { System.out.print("0"); return; }
acm(A, A[j]); // chemin jusqu'à a(j) affiché
System.out.print(" -> " + j); // puis la case j
}
M = [2, -oo, 5, 6, 0, 7, 12, 5, 15]
A = [-1, -1, 0, 0, 2, 3, 3, 5, 6]
Valeur maximum 15 : 0 -> 3 -> 6 -> 8
Le chemin optimal vaut .
nom : A
valeurs : -1 -1 0 0 2 3 3 5 6
colorier : 8
vert : 0 3 6
fleches : 8->6 6->3 3->0
legende : a(8) = 6, a(6) = 3, a(3) = 0 : chemin 0 → 3 → 6 → 8100 % gratuit
La suite du chapitre est sur Adloun
- 10 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.