Aller au contenu principal

Structures de données

Une structure de données combine une représentation et des invariants qui rendent un ensemble d’opérations efficace. Choisissez-la d’après la charge de travail, pas selon un classement générique d’« avantages » et d’« inconvénients ».

Commencer par les opérations

BesoinReprésentation typiquePoint fort
Accès aléatoire par positiontableau / tableau dynamiqueindexation en O(1)O(1), localité
Insertion locale avec un nœud connuliste chaînéemodification des pointeurs
Accès dernier entré, premier sortitype abstrait pilediscipline à une extrémité
Accès premier entré, premier sortitype abstrait filetraitement ordonné
Recherche exacte par clétable de hachagerecherche en temps constant en espérance
Clés ordonnées et intervallesarbre de recherche équilibréopérations ordonnées logarithmiques
Minimum ou maximum répététasmises à jour logarithmiques, accès constant à la racine
Relations arbitrairesreprésentation de grapheparcours et algorithmes de chemin

Représentation et interface

Une pile ou une file est un type abstrait de données : son contrat limite l’élément qui peut être retiré. Elle peut être implémentée avec un tableau, des nœuds chaînés ou un autre conteneur. Tableau et liste chaînée décrivent plutôt l’organisation du stockage.

Questions à poser

  1. Quelles opérations dominent et quels sont leurs coûts dans le pire cas ou amortis ?
  2. Les références, indices ou l’ordre d’itération doivent-ils rester stables après mutation ?
  3. La capacité est-elle bornée et l’allocation est-elle permise pendant l’opération ?
  4. Quelle importance ont la localité du cache et le surcoût par élément ?
  5. La concurrence, la persistance ou la propriété font-elles partie du contrat ?

Les coûts asymptotiques sont nécessaires mais incomplets : deux opérations en O(1)O(1) peuvent différer fortement en allocation, indirection et localité.

Considérer la charge complète

Supposons qu’un programme reçoive nn tâches avant de les traiter dans l’ordre d’arrivée. Les ajouter en fin de tableau dynamique demande un travail total linéaire, mais supprimer sans cesse la position zéro déplace (n1)+(n2)++1(n-1)+(n-2)+\cdots+1 références : un travail quadratique. Une file avec des opérations d’extrémité constantes conserve un coût total linéaire. Si les tâches sont plutôt consultées régulièrement par position numérique, le tableau dynamique peut mieux convenir. La comparaison des structures linéaires relie ces choix à des implémentations concrètes.

Le tableau oriente le choix de structures en mémoire contenant nn éléments ; ce n’est pas une garantie universelle. La recherche par hachage suppose une charge contrôlée et un hachage adapté, tout en payant le calcul du hachage et la comparaison des clés ; les collisions peuvent rendre le pire cas linéaire. Les bornes des arbres équilibrés comptent les comparaisons, et l’accès à la racine d’un tas suppose celui-ci non vide. Pour distinguer pire cas, espérance et amortissement, commencez par la complexité temporelle.

Source

Explorer les liensOuvrir le réseau