Qual è la differenza tra strutture di dati astratte e concrete?


17

Ho pensato che l'array associativo (cioè la mappa o il dizionario) e la tabella di hashing fossero lo stesso concetto, fino a quando non ho visto in Wikipedia che

Per i dizionari con un numero molto piccolo di associazioni, può avere senso implementare il dizionario usando un elenco di associazioni, un elenco collegato di associazioni. ...

L'implementazione di uso generale più frequentemente utilizzata di un array associativo è con una tabella hash: un array di associazioni, insieme a una funzione hash che mappa ogni possibile chiave in un indice di array. ...

I dizionari possono anche essere memorizzati in alberi di ricerca binari o in strutture dati specializzate in un particolare tipo di chiavi come alberi radix, try, array Judy o alberi van Emde Boas. ...

Quindi, penso, il mio problema risiede nel fatto che non so che un array associativo (ovvero una mappa o un dizionario) sia un tipo di dati astratto e che una tabella di hashing sia una struttura di dati concreta e che possano essere utilizzate diverse strutture di dati concreti per implementare stesso tipo di dati astratto.

Le mie domande sarebbero

  • Qual è la differenza e la relazione tra strutture dati astratte e strutture dati concrete?

  • Quali esempi sono per ciascuno di essi (strutture dati astratte e concrete)? Più meglio è.

  • Esiste un elenco di quali strutture di dati concreti possono essere utilizzate per implementare quali strutture di dati astratte? Sarebbe bello averne uno.

Risposte:


17

Il tipo di dati astratto (ADT) è essenzialmente un'API e una struttura di dati concreta fornisce un'implementazione di tale API. Per un dato ADT, ci sono spesso diverse scelte di strutture dati concrete che supportano le operazioni di query e aggiornamento descritte dall'ADT. Ogni struttura di dati concreta per un dato ADT deve supportare tutte le operazioni descritte dall'ADT (possibilmente con una certa probabilità di successo nel caso di strutture randomizzate), ma ogni struttura in calcestruzzo può offrire diverse garanzie sui tempi di esecuzione di ciascuna operazione. La scelta della struttura di dati concreta da attuare per un dato ADT di solito dipende dalle priorità di efficienza di ciascuna operazione (compresa l'inizializzazione della struttura) e dalla complessità di implementazione e mantenimento dei vari tipi di dati.

Esistono troppi ADT e corrispondenti strutture concrete da elencare in un'unica risposta, ma ecco alcuni esempi:

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

  • Inoltre Findsuccessor(x)SXtSS<t

  • Una coda di priorità è un ADT che richiede inserte delete-minoperazioni (e talvolta anche altre operazioni, come find-min increase-keyo delete-key). Le strutture dati che implementano l'ADT della coda di priorità includono:

    1. un elenco di link non ordinati, che ha velocità insertma è lento delete-min.

    2. un elenco collegato ordinato che ha veloce delete-minma lentoinsert

    3. insertdelete-minSort(n)

    4. un heap binario che ha logaritmico inserte delete-mininizializzazione tempo, e lineare.

    5. Esistono anche altre varianti delle implementazioni heap .

  • stabbing(x)X


9

Il tipo di dati astratto descrive quali operazioni sono disponibili e quali leggi rispettano. Ad esempio un dizionario consente di archiviare un valore in una determinata chiave e di recuperare un valore per una chiave, e promette che se si memorizza prima un valore e poi lo si recupera con la stessa chiave, si otterrà il valore memorizzato. Uno stack ha operazioni push e pop.

Il tipo di dati concreto indica come queste operazioni sono effettivamente implementate.


Grazie! Esistono elenchi di quale struttura di dati comune è quale, astratta o concreta?
StackExchange per tutto il

Non un elenco generale, ma potresti voler guardare xlinux.nist.gov/dads
Alexey Romanov,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.