algorithmique (école d'ingénieur) · Chapitre 5 · Exercice de TD
Trois lignes de bus
Chemins de valeur optimale · niveau 2
Énoncé
On ajoute une troisième ligne, de à , de coût .
- Donner la base (combien de valeurs ?) et l'hérédité de la récurrence.
- Écrire un programme dont une seule boucle traite toutes les valeurs , sans cas particulier pour les premières villes.
- L'exécuter avec , et .
- Montrer que ce problème est un cas particulier du problème « toutes les lignes directes ».
Corrigé
- Un trajet optimal vers arrive de , ou . L'hérédité à trois termes n'a de sens que pour : la base compte trois valeurs, , , . Hérédité : ,
- En ne considérant que les lignes telles que , une seule boucle couvre la base et l'hérédité :
static int[][] calculerMA(int[] D1, int[] D2, int[] D3) {
int n = D1.length;
int[][] D = {D1, D2, D3}; // D[l-1][i] : coût de i -> i+l
int[] M = new int[n], A = new int[n];
M[0] = 0; A[0] = -1; // base
for (int j = 1; j < n; j++) { // par j croissants
M[j] = Integer.MAX_VALUE;
for (int l = 1; l <= 3 && j - l >= 0; l++)
if (M[j - l] + D[l - 1][j - l] < M[j]) {
M[j] = M[j - l] + D[l - 1][j - l]; A[j] = j - l;
}
}
return new int[][] {M, A};
}
- , , :
M = [0, 10, 30, 60, 35]
A = [-1, 0, 1, 1, 1]
Coût minimum 35 : 0 -> 1 -> 4
nom : M
valeurs : 0 10 30 60 35
colorier : 4
vert : 0..3
fleches : 3->4 2->4 1->4
legende : m(4) = min(60 + 30, 30 + 60, 10 + 25) = 35 : trajet 0 → 1 → 4
- On pose , , et pour : la récurrence des lignes directes redonne celle-ci. Mais elle coûte au lieu de : le cas particulier se résout plus vite.
100 % 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.