Adloun

algorithmique (école d'ingénieur) · Chapitre 7 · Exercice de TD

Trajet d'au plus lignes

Graphes sans circuit et ordonnancement de projets · niveau 3 (difficile)

Énoncé

Un voyageur refuse de changer de bus trop souvent : il veut un trajet de coût minimum de à empruntant au plus lignes directes.

  • On note le coût minimum d'un trajet de à d'au plus lignes. Donner la base () et l'hérédité.
  • Écrire le programme qui calcule le tableau . Quelle est sa complexité ?
  • Sur le réseau de l'exercice 7.4, donner pour .

Corrigé

  • Avec ligne, on reste en : et pour . Pour , un trajet optimal d'au plus lignes vers soit utilise au plus lignes, soit arrive par une dernière ligne précédée d'un trajet d'au plus lignes :

  • Calcul par croissants (la ligne ne dépend que de la ligne ) :

static int[][] auPlusK(Liste[] Gp, int[][] C, int K) { int n = Gp.length;
    int[][] M = new int[K + 1][n];
    Arrays.fill(M[0], INFINI); M[0][0] = 0;           // base k = 0
    for (int k = 1; k < K + 1; k++)
        for (int j = 0; j < n; j++) {
            M[k][j] = M[k - 1][j];                    // au plus k-1 lignes
            for (Liste l = Gp[j]; !vide(l); l = reste(l)) { int i = premier(l);
                M[k][j] = Math.min(M[k][j], M[k - 1][i] + C[i][j]); // dernière ligne i --> j
            }
        }
    return M;
}

Chaque ligne du tableau coûte : la complexité est .

  • Exécution :

k=0 : [0, inf, inf, inf, inf]
k=1 : [0, 5, inf, 20, 30]
k=2 : [0, 5, 10, 20, 25]
k=3 : [0, 5, 10, 20, 25]

Avec une seule ligne, seul le trajet direct () est possible ; dès deux lignes, on atteint l'optimum de l'exercice 7.4.

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 →