Adloun

algorithmique (école d'ingénieur) · Chapitre 11 · Application directe du cours

Nombre d'occurrences

Programmes justes : logique de Hoare et invariants · niveau 1 (application)

Énoncé

Écrire, sur l'invariant : « est le nombre d'occurrences de dans le -préfixe de », une fonction int occurrences(int v, int[] T). Donner l'arrêt, l'initialisation, la progression, le variant et la complexité.

Corrigé

  • Arrêt : . Alors est le nombre d'occurrences de dans .
  • Initialisation : : le -préfixe est vide, il contient occurrence.
  • Progression : et .
  • Variant : , entier positif qui décroît de à chaque tour.

static int occurrences(int v, int[] T) { int n = T.length;
    int c = 0, k = 0;                 // I(0,0) : c = nombre de v dans T[0:0]
    while (k != n) {                  // I(c,k) et k ≠ n
        if (T[k] == v) c = c + 1;     // c = nombre de v dans T[0:k+1]
        k = k + 1;                    // I(c,k)
    }                                 // I(c,n) : c = nombre de v dans T
    return c;
}

tours de temps constant : . Par exemple occurrences(2, new int[] {2, 7, 2, 2, 5, 2}) retourne .


nom : T
valeurs : 2 7 2 2 5 2
colorier : 0 2 3
pointeurs : k=4
zone : 0..3 c = 3
zone : 4..5 non examiné
legende : v = 2 : I(3, 4), c compte les occurrences de v dans T[0:4]

100 % gratuit

La suite du chapitre est sur Adloun

Exercice suivant et tuteur

Sans compte : le cours et le premier QCM. Exercices et tuteur : inscription gratuite en 30 secondes, sans carte bancaire.

Le cours du chapitre · Tous les exercices du chapitre

Exercice suivant et tuteur →