Adloun

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 premier

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 →