Adloun

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

Insertion dichotomique

Les tris · niveau 2

Énoncé

Dans le tri par insertion, on cherche la position d'insertion de dans par dichotomie (chapitre 12). Écrire ce tri en le gardant stable. Combien de comparaisons fait-il au total ? Combien de décalages ? Sa complexité change-t-elle ?

Corrigé

Pour rester stable, doit être inséré après les valeurs qui lui sont égales : on cherche le premier indice tel que , avec l'invariant de dernierIndice.


nom : T
valeurs : _ _ _ _ _ x _ _
colorier : 5
pointeurs : g=2 d=4 k=5
zone : 0..1 au plus x
zone : 2..3 inconnu
zone : 4..4 > x
legende : T[0:k] est trié : I(g,d) dit T[0:g] ≤ x < T[d:k]

static void triInsertionDicho(int[] T) { int n = T.length;
    for (int k = 1; k < n; k++) {
        int x = T[k], g = 0, d = k;
        // I(g,d) : T[0:g] <= x < T[d:k]
        while (g < d) {
            int m = g + (d - g) / 2;
            if (T[m] <= x) g = m + 1; else d = m;
        }
        for (int i = k; i > g; i--) T[i] = T[i - 1]; // décalage de T[g:k]
        T[g] = x;
    }
}

L'insertion de demande au plus comparaisons, soit au total environ . Mais les décalages sont les mêmes que dans le tri par insertion : pour l'insertion de , soit en moyenne et au pire .


14.3 n=1000 : trie=true, 8566 comparaisons (n log2 n = 9966), 250949 deplacements (n^2/4 = 250000)
14.3 n=4000 : trie=true, 42370 comparaisons (n log2 n = 47863), 4019225 deplacements (n^2/4 = 4000000)

La complexité reste à cause des décalages. Le gain est réel quand une comparaison coûte cher (comparer deux longues chaînes, par exemple) et qu'un décalage est bon marché.

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 →