algorithmique (école d'ingénieur) · Chapitre 1 · Exercice de TD
Nombre de chemins
Glouton ou dynamique ? · niveau 2
Énoncé
On note le nombre de chemins de la case à la case (sauts de ou ).
- Justifier que pour et donner , , .
- Écrire une fonction
long nbChemins(int n)qui retourne en le nombre de chemins de la case à la case . Quelle est sa valeur pour un ruban de cases ?
Corrigé
- Tout chemin vers se termine par un saut depuis ou depuis , et ces deux familles sont disjointes ; chaque chemin vers (resp. ) se prolonge d'une seule façon. D'où . Base : (le chemin réduit à la case ), , . -
static long nbChemins(int n) {
long[] N = new long[Math.max(n, 3)];
N[0] = 1; N[1] = 0; N[2] = 1; // base
for (int j = 3; j < n; j++) N[j] = N[j-2] + N[j-3];
return N[n-1];
}
Une boucle de tours en temps constant : . Pour un ruban de cases, : un demi-million de millions de chemins, qu'aucune énumération ne parcourra. Le type long est nécessaire : la valeur dépasse Integer.MAX_VALUE.
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.