algorithmique (école d'ingénieur) · Chapitre 12 · Application directe du cours
Premier plus long sous-tableau croissant
Recherche séquentielle, dichotomique, arrière · niveau 3 (difficile)
Énoncé
On veut les indices et du premier plus long sous-tableau croissant (au sens large) de , en . Par exemple, pour : et . On se donne l'invariant : « et sont respectivement le premier plus long sous-tableau croissant et le plus long suffixe croissant de ».
- Initialisation : donner des valeurs des variables qui rendent vrai.
- Progression : comment rétablir l'invariant après ?
- Écrire la fonction
int[] pplstc(int[] T)commentée par son invariant, et justifier sa complexité.
Corrigé
- Pour , les trois sous-tableaux sont vides et est vrai.
- On ajoute la case au préfixe. Le plus long suffixe croissant de prolonge celui de si ou ; sinon il repart de :
Après , est le plus long suffixe croissant du nouveau préfixe. S'il est strictement plus long que , il devient le premier plus long sous-tableau croissant ; en cas d'égalité, on garde le premier. -
static int[] pplstc(int[] T) { int n = T.length;
int d = 0, f = 0, j = 0, k = 0;
// I(d,f,j,k) : T[d:f] est le pplstc de T[0:k]
// et T[j:k] son plus long suffixe croissant
while (k != n) {
if (k > 0 && T[k - 1] > T[k]) j = k; // le suffixe repart de k
k = k + 1; // T[j:k] : suffixe de T[0:k]
if (k - j > f - d) { d = j; f = k; } // strictement plus long
}
// I(d,f,j,n) : T[d:f] est le pplstc de T
return new int[] {d, f};
}
[3, 2, 1, 1, 2, 4, 1, 2, 2, 4] -> d=2 f=6 [1, 1, 2, 4]
[] -> d=0 f=0 []
[3, 2, 1] -> d=0 f=1 [3]
[1, 2, 0, 1, 2, 0, 1] -> d=2 f=5 [0, 1, 2]
nom : T
valeurs : 3 2 1 1 2 4 1 2 2 4
vert : 2..5
colorier : 6..9
pointeurs : d=2 f=6 j=6 k=n
zone : 2..5 T[d:f]
zone : 6..9 T[j:k]
legende : k = n : T[j:k] a la même longueur 4, on garde le premier
Le corps de boucle est en temps constant et s'exécute fois ( décroît de à chaque tour) : .
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 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.