Quelle est la différence entre les structures de données abstraites et concrètes?

17

Je pensais que le tableau associatif (c'est-à-dire la carte ou le dictionnaire) et la table de hachage étaient le même concept, jusqu'à ce que je voie sur Wikipedia que

Pour les dictionnaires avec un très petit nombre de liaisons, il peut être judicieux d'implémenter le dictionnaire à l'aide d'une liste d'associations, une liste liée de liaisons. ...

L'implémentation à usage général la plus fréquemment utilisée d'un tableau associatif est avec une table de hachage: un tableau de liaisons, ainsi qu'une fonction de hachage qui mappe chaque clé possible dans un index de tableau. ...

Les dictionnaires peuvent également être stockés dans des arbres de recherche binaires ou dans des structures de données spécialisées pour un type particulier de clés telles que les arbres radix, les essais, les tableaux Judy ou les arbres van Emde Boas. ...

Donc, je pense que mon problème réside dans le fait que je ne sais pas que le tableau associatif (c'est-à-dire la carte ou le dictionnaire) est un type de données abstrait et la table de hachage est une structure de données concrète, et différentes structures de données concrètes peuvent être utilisées pour implémenter le même type de données abstrait.

Mes questions seraient

  • Quelle est la différence et la relation entre les structures de données abstraites et les structures de données concrètes?

  • Quels sont les exemples pour chacun d'eux (structures de données abstraites et concrètes)? Plus c'est mieux.

  • Existe-t-il une liste des structures de données concrètes qui peuvent être utilisées pour mettre en œuvre quelles structures de données abstraites? Ce serait bien d'en avoir un.

StackExchange pour tous
la source

Réponses:

17

Le type de données abstrait (ADT) est essentiellement une API, et une structure de données concrète fournit une implémentation de cette API. Pour un ADT donné, il existe souvent plusieurs choix différents de structures de données concrètes qui prennent en charge les opérations de requête et de mise à jour décrites par l'ADT. Chaque structure de données concrète pour un ADT donné doit prendre en charge toutes les opérations décrites par l'ADT (éventuellement avec une certaine probabilité de succès dans le cas de structures aléatoires), mais chaque structure en béton peut offrir des garanties différentes des temps d'exécution de chaque opération. Le choix de la structure de données concrète à mettre en œuvre pour un ADT donné dépend généralement des priorités d'efficacité de chaque opération (y compris l'initialisation de la structure) et de la complexité de la mise en œuvre et de la maintenance des différents types de données.

Il y a beaucoup trop d'ADT et de structures concrètes correspondantes pour les énumérer dans une seule réponse, mais voici quelques exemples:

  • Find(x)XXInsert(x)Delete(x)

  • Findsuccessor(x)SXtSs<t

  • Une priorité de file d' attente est un ADT qui nécessite insertet les delete-minopérations (et parfois d' autres opérations, ainsi, par exemple find-min increase-keyou delete-key). Les structures de données qui implémentent la file d'attente prioritaire ADT incluent:

    1. une liste chaînée non triée, rapide insertmais lente delete-min.

    2. une liste chaînée triée qui a rapide delete-minmais lenteinsert

    3. insertdelete-minsort(n)

    4. un tas binaire qui a une initialisation logarithmique insertet delete-mintemporelle linéaire.

    5. Il existe également d'autres variantes d' implémentations de tas .

  • stabbing(x)X

Joe
la source
9

Le type de données abstrait décrit les opérations disponibles et les lois auxquelles elles obéissent. Par exemple, un dictionnaire vous permet de stocker une valeur sous une clé donnée et de récupérer une valeur pour une clé, et promet que si vous stockez d'abord une valeur puis la récupérez avec la même clé, vous obtiendrez la valeur que vous avez stockée. Une pile a des opérations push et pop.

Le type de données concret indique comment ces opérations sont réellement mises en œuvre.

Alexey Romanov
la source
Merci! Existe-t-il des listes de quelle structure de données commune est laquelle, abstraite ou concrète?
StackExchange pour tous
Pas une liste générale, mais vous voudrez peut-être consulter xlinux.nist.gov/dads
Alexey Romanov