Adloun

algorithmique (école d'ingénieur) · Chapitre 14 · Exercice de TD

Les plus grandes valeurs

Les tris · niveau 2

Énoncé

Écrire une fonction qui retourne, par ordre décroissant, les plus grandes valeurs d'un tableau de valeurs, en , à l'aide d'un tas min de taille (on pourra réutiliser la classe de l'exercice 14.6 en y rangeant les opposés des valeurs). Pourquoi un tas min, et non un tas max ?

Corrigé

On garde dans un tas min les plus grandes valeurs vues jusqu'ici. Sa racine est la plus petite d'entre elles, celle qu'une nouvelle valeur doit battre pour entrer. Avec un tas max, cette valeur serait une feuille quelconque : il faudrait la chercher en . On obtient un tas min en rangeant dans le tas max de l'exercice 14.6.


static int[] kPlusGrandes(int[] V, int k) {
    Tas t = new Tas(k);
    for (int x : V) {
        // I : t contient (au signe près) les k plus grandes valeurs vues
        if (t.n < k) t.inserer(-x);
        else if (x > -t.T[0]) { t.extraireMax(); t.inserer(-x); } // x bat le plus petit
    }
    int[] R = new int[t.n];
    for (int i = R.length - 1; i >= 0; i--) R[i] = -t.extraireMax(); // décroissant
    return R;
}

14.7 : 3 plus grandes de [14, 3, 27, 8, 19, 27, 1, 11, 22, 6] = [27, 27, 22]
14.7 : 200 tests aleatoires : true

Chaque valeur coûte au plus une extraction et une insertion dans un tas de taille : , mieux que pour un tri complet quand est petit, et la mémoire reste en .

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 →