algorithmique (école d'ingénieur) · Chapitre 11 · Application directe du cours
Plus long plateau
Programmes justes : logique de Hoare et invariants · niveau 2
Énoncé
Un plateau est un sous-tableau non vide dont toutes les cases sont égales. Écrire en , sur un invariant que l'on énoncera, une fonction qui retourne les indices et du premier plus long plateau de . Donner l'initialisation, les implications de la progression et l'arrêt. Exemple : pour , on attend et .
Corrigé
On suit exactement le schéma du pplstc, en remplaçant « croissant » par « plateau ». Invariant : « est le premier plus long plateau du -préfixe de , et son plus long suffixe plateau » (sous-tableaux vides si ).
- Initialisation : .
- Progression :
- Arrêt : ; est le premier plus long plateau de .
static int[] plateau(int[] T) { int n = T.length;
// I(d,f,j,k) : T[d:f] premier plus long plateau et
// T[j:k] plus long suffixe plateau du k-préfixe
int d = 0, f = 0, j = 0, k = 0; // I(0,0,0,0)
while (k != n) { // I(d,f,j,k) et k ≠ n
if (k > 0 && T[k-1] != T[k]) j = k; // le suffixe plateau repart de k
k = k + 1; // T[j:k] plus long suffixe plateau
if (k - j > f - d) { d = j; f = k; } // I(d,f,j,k)
} // I(d,f,j,n)
return new int[] {d, f};
}
Sur l'exemple, la fonction retourne : le plateau , et non qui est aussi long mais vient après. Boucle de tours en temps constant : .
nom : T
valeurs : 5 5 1 1 1 7 2 2 2 9
vert : 2..4
colorier : 6..8
pointeurs : d=2 f=5 j=6 k=9
zone : 2..4 T[d:f]
zone : 6..8 T[j:k]
legende : k = 9 : T[j:k] est aussi long que T[d:f], on garde le premier100 % 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.