Fiche à trous · Première · NSI
Structures de données — Listes, piles, files
Complétez de mémoire, puis vérifiez avec la page de corrigé.
Une pile d'assiettes et une file d'attente contiennent les mêmes objets et n'en rendent pas le même en premier. On choisit une structure d'après l'ordre dans lequel les choses doivent ressortir.
Deux structures aux ordres opposés
Règle
2Propriété
Tableau ou liste chaînée
Définition — Liste chaînée :
Piège
Supposer qu'accéder au i-ième élément d'une liste chaînée coûte autant que dans un tableau.
Pour parcourir une liste chaînée, suivre les références, jamais les indices.
Le compromis est symétrique et c'est ce qui rend le choix intéressant. Le tableau donne un accès direct et une insertion coûteuse — il faut décaler. La liste chaînée donne une insertion locale bon marché et un accès coûteux. Aucune n'est meilleure : la question est de savoir quelle opération sera la plus fréquente dans le programme.
Dictionnaires et hachage
Définition — Dictionnaire :
Deux conséquences pratiques. Une clé doit être immuable : si l'objet servant de clé changeait, son hachage changerait et la valeur deviendrait introuvable — c'est pourquoi une liste ne peut pas servir de clé. Et la performance annoncée est une moyenne : une fonction de hachage mal choisie concentre les collisions et fait retomber l'accès vers O(n).
Les arbres
Définition — Arbre binaire :
Un arbre binaire dégénéré, où chaque nœud n'a qu'un seul enfant, n'est rien d'autre qu'une liste chaînée déguisée : sa hauteur vaut n, et toute recherche y redevient linéaire. C'est pourquoi les structures d'arbres utilisées en pratique maintiennent leur équilibre lors des insertions : l'efficacité annoncée dépend entièrement de cette propriété.
Choisir la structure adaptée à un problème
- 7.
- 8.
- 9.
- 10.
- 11.
- Ai-je choisi d'après l'ordre de sortie et non d'après le contenu ?
- LIFO pour une pile, FIFO pour une file : ai-je vérifié ?
- Ai-je évité d'accéder par indice dans une liste chaînée ?
- Ai-je dit que l'accès d'un dictionnaire est O(1) en moyenne ?
- Mes clés de dictionnaire sont-elles immuables ?
- Ai-je vérifié qu'un arbre binaire est équilibré avant d'annoncer log n ?