Adloun

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

Exercice suivant et tuteur

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.

Le cours du chapitre · Tous les exercices du chapitre

Exercice suivant et tuteur →