¿Cuál es la diferencia entre estructuras de datos abstractas y concretas?

17

Pensé que la matriz asociativa (es decir, el mapa o el diccionario) y la tabla hash eran el mismo concepto, hasta que vi en Wikipedia que

Para los diccionarios con un número muy pequeño de enlaces, puede tener sentido implementar el diccionario utilizando una lista de asociación, una lista vinculada de enlaces. ...

La implementación de propósito general más utilizada de una matriz asociativa es con una tabla hash: una matriz de enlaces, junto con una función hash que asigna cada clave posible en un índice de matriz. ...

Los diccionarios también se pueden almacenar en árboles de búsqueda binarios o en estructuras de datos especializadas para un tipo particular de claves, como árboles de radix, tries, matrices de Judy o árboles de van Emde Boas. ...

Entonces, creo que mi problema radica en que no sé si la matriz asociativa (es decir, el mapa o el diccionario) es un tipo de datos abstractos y la tabla hash es una estructura de datos concreta, y se pueden usar diferentes estructuras de datos concretas para implementar el mismo tipo de datos abstractos.

Mis preguntas serían

  • ¿Cuál es la diferencia y la relación entre las estructuras de datos abstractos y las estructuras de datos concretas?

  • ¿Qué ejemplos hay para cada uno de ellos (estructuras de datos abstractas y concretas)? Mientras más, mejor.

  • ¿Existe una lista de qué estructuras de datos concretas se pueden usar para implementar qué estructuras de datos abstractas? Sería bueno tener uno.

StackExchange para todos
fuente

Respuestas:

17

El tipo de datos abstractos (ADT) es esencialmente una API, y una estructura de datos concreta proporciona una implementación de esa API. Para un ADT dado, a menudo hay varias opciones diferentes de estructuras de datos concretas que admiten las operaciones de consulta y actualización descritas por el ADT. Cada estructura de datos concretos para un ADT dado debe soportar todas las operaciones descritas por el ADT (posiblemente con alguna probabilidad de éxito en el caso de estructuras aleatorias), pero cada estructura concreta puede garantizar diferentes tiempos de ejecución de cada operación. La elección de qué estructura de datos concretos implementar para un ADT determinado generalmente depende de las prioridades de eficiencia de cada operación (incluida la inicialización de la estructura) y la complejidad de implementar y mantener los diversos tipos de datos.

Hay demasiados ADT y estructuras concretas correspondientes para enumerar en una sola respuesta, pero aquí hay algunos ejemplos:

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

  • Findsuccessor(x)SXtSs<t

  • Una Cola prioritaria es un ADT que requiere operaciones inserty delete-minoperaciones (y a veces también otras operaciones, como find-min increase-keyo delete-key). Las estructuras de datos que implementan la cola ADT prioritaria incluyen:

    1. una lista enlazada sin clasificar, que tiene rápido insertpero lento delete-min.

    2. Una lista vinculada ordenada que tiene rápido delete-minpero lentoinsert

    3. insertdelete-minsort(norte)

    4. una pila binaria que tiene logarítmica inserty delete-minla inicialización de tiempo, y lineal.

    5. También hay otras variantes de implementaciones de montón .

  • stabbing(x)X

Joe
fuente
9

El tipo de datos abstractos describe qué operaciones están disponibles y qué leyes obedecen. Por ejemplo, un diccionario le permite almacenar un valor bajo una clave determinada y recuperar un valor para una clave, y le promete que si primero almacena un valor y luego lo recupera con la misma clave, obtendrá el valor que almacenó nuevamente. Una pila tiene operaciones push y pop.

El tipo de datos concreto dice cómo se implementan realmente estas operaciones.

Alexey Romanov
fuente
¡Gracias! ¿Hay listas de qué estructura de datos común es cuál, abstracta o concreta?
StackExchange para todos el
No es una lista general, pero es posible que desee ver xlinux.nist.gov/dads
Alexey Romanov