Adloun

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

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 →