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
- 12 autres exercices corrigés dans ce chapitre
- Les 2 QCM du chapitre, le premier sans compte
- Le tuteur, qui guide pas à pas sans donner la réponse
Sans compte : le cours et le premier QCM. Exercices et tuteur : inscription gratuite en 30 secondes, sans carte bancaire.