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
- 10 autres exercices corrigés dans ce chapitre
- Les 2 QCM du chapitre, le premier sans compte
- Le tuteur, qui guide pas à pas sans donner la réponse
Sans compte : le cours et le premier QCM. Exercices et tuteur : inscription gratuite en 30 secondes, sans carte bancaire.