Adloun

algorithmique (école d'ingénieur) · Chapitre 14 · Application directe du cours

File de priorité

Les tris · niveau 2

Énoncé

Écrire une classe Tas munie d'un tableau T et d'une taille n (le tas occupe ), et de deux opérations en :

  • void inserer(int x) : on place en case , puis on le fait remonter tant qu'il est plus grand que son père ;
  • int extraireMax() : on retourne , on le remplace par la dernière valeur, puis on la fait descendre.

Insérer dans un tas vide, donner le tableau obtenu, puis l'ordre des extractions.

Corrigé

Le père de la case est la case , ses fils sont les cases et .


class Tas {
    int[] T; int n;                       // le tas occupe T[0:n]
    Tas(int capacite) { T = new int[capacite]; n = 0; }

    void inserer(int x) {
        if (n == T.length) T = Arrays.copyOf(T, 2 * n + 1); // agrandir
        T[n] = x; int i = n; n++;
        // I(i) : T[0:n] est un tas, sauf peut-être entre i et son père
        while (i > 0 && T[(i - 1) / 2] < T[i]) {
            echanger(T, i, (i - 1) / 2);
            i = (i - 1) / 2;
        }
    }

    int extraireMax() {                   // tas non vide
        int max = T[0];
        n--;
        T[0] = T[n];                      // la dernière valeur va à la racine
        int i = 0;
        // I(i) : T[0:n] est un tas, sauf peut-être entre i et ses fils
        while (2 * i + 1 < n) {
            int f = 2 * i + 1;
            if (f + 1 < n && T[f + 1] > T[f]) f++;  // le plus grand fils
            if (T[i] >= T[f]) break;
            echanger(T, i, f); i = f;
        }
        return max;
    }
}

14.6 : tas = [20, 12, 12, 5, 9, 3, 7]
14.6 : extractions : 20 12 12 9 7 5 3

nom : T
valeurs : 12 9 3 5 20
colorier : 4
fleches : 4->1 1->0
legende : insertion de 20 en case 4 : il remonte en case 1, puis à la racine

nom : T
valeurs : 20 12 12 5 9 3 7
fleches : 0->1 1->3 2->5
fleches-bas : 0->2 1->4 2->6
legende : le tas obtenu : chaque père i est ≥ ses fils 2i+1 et 2i+2

Une valeur qui remonte ou descend parcourt au plus une branche de l'arbre presque complet, de hauteur : chaque opération est en dans le pire cas. Les extractions successives donnent les valeurs par ordre décroissant : c'est le principe du tri par tas.

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 →