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
- 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.