Adloun

Probleme – Choisir d'après le profil des opérations

Exercice · niveau 3 (difficile) · informatique (MP2I/MPI), chapitre 6 — Types et structures de données abstraites

Énoncé

Deux applications manipulent entiers.

Corrigé

1. La prévision. On note .

TableauChaîne
A : insertions en tête (décalage)
\phantom{A :} lectures par indice chacune chacune
Total A
B : insertions en fin avec pointeur de queue
\phantom{B :} lectures par indice chacune chacune
Total B

Les deux profils sont exactement inverses : chacun est quadratique pour une structure et linéaire pour l'autre.

2. La mesure, en C, sans optimisation :


A : tableau 1,063 s     chaine  0,003 s        rapport : 350
B : tableau 0,0001 s    chaine  1,451 s        rapport : 14 500

La prévision est confirmée dans les deux sens. Et les rapports mesurés collent au compte d'opérations : pour A, le tableau fait déplacements contre pour la chaîne, soit un rapport prédit de pour mesurés ; pour B, la chaîne fait pas de parcours contre accès pour le tableau, soit prédits pour mesurés.

3. La règle, et son piège. La règle est celle du chapitre : si l'on accède par indice, tableau ; si l'on insère et supprime en tête, maillons.

Le piège qu'elle cache est qu'on ne l'applique pas au bon niveau. Ce qui décide n'est pas l'opération la plus visible dans le code, c'est celle qui est répétée le plus souvent — et les deux ne coïncident pas. Dans l'application A, la lecture par indice apparaît dans le programme au même titre que l'insertion ; elle n'a lieu que fois contre , et c'est cela qui tranche. Une structure ne se choisit pas sur la liste des opérations, mais sur leur profil, c'est-à-dire leurs nombres relatifs.

Deux corollaires pratiques.

Et l'on remarquera que rien de tout cela n'a demandé de changer l'algorithme : c'est le point de départ du chapitre, et sa conclusion.

Les autres exercices de ce chapitre Le cours du chapitre

Un blocage sur cet exercice ? Le tuteur d'Adloun guide par questions, sans donner la réponse.