Adloun

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

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 →