Usi pratici di diverse strutture di dati [chiuso]


102

Si parla molto di strutture dati, ma non riesco a trovare un semplice elenco di strutture dati e del loro utilizzo pratico. Sto cercando di studiare per un colloquio e penso che questo mi aiuterebbe, insieme a molti altri. Sto cercando qualcosa di simile:

Struttura dati - Esempio / Usato per

Tabella hash: ricerca rapida dei dati ... quindi fai un esempio

Vettore - ...

Albero binario - ...

Se c'è una risorsa come questa da qualche parte, fammelo sapere.

Grazie!

EDIT: Voglio dire che wikipedia è buono e tutto, ma nella maggior parte delle pagine in realtà non elencano gli usi pratici. Sto cercando qualcosa di più di questo.

Risposte:


96

Ho trovato l'elenco in una domanda simile, precedentemente su StackOverflow:

Tabella hash: utilizzata per una rapida ricerca dei dati: tabella dei simboli per compilatori, indicizzazione del database, cache, rappresentazione dei dati univoca.

Trie - dizionario, come quello trovato su un telefono cellulare per il completamento automatico e il controllo ortografico.

Albero dei suffissi: ricerche di testo completo veloci utilizzate nella maggior parte dei programmi di videoscrittura.

Stack: operazioni di annullamento / ripristino in elaboratori di testi, valutazione delle espressioni e analisi della sintassi, molte macchine virtuali come JVM sono orientate allo stack.

Code - Ricerca di trasporti e operazioni in cui vengono memorizzate varie entità e trattenute per essere elaborate successivamente, ovvero la coda svolge la funzione di buffer.

Code prioritarie: pianificazione del processo nel kernel

Alberi: parser, file system

Radix tree - tabella di instradamento IP

Albero BSP - computer grafica 3D

Grafici - Connessioni / relazioni in siti di social networking, Routing, reti di comunicazione, organizzazione dati ecc.

Heap: allocazione dinamica della memoria in lisp

Questa è la risposta originariamente pubblicata da RV Pradeep

Alcuni altri link meno utili:

Le applicazioni sono elencate solo per alcune strutture di dati

Non focalizzato sull'applicazione, in buona sintesi e pertinente


1
il tuo primo collegamento è interrotto
Dan Beaulieu

Grazie, @DanBeaulieu. Ho rimosso il collegamento morto.
MXMLLN

1
Riepilogo molto bello. Probabilmente l'elenco degli usi non finisce mai, ma si capisce il punto.
Nick L.

1
Undo / redo sarebbe davvero uno Stack? Se l'annullamento è saltato fuori dalla parte superiore della pila, non saresti in grado di ripetere.
Tony L.

5
@TonyL. So che questa è una domanda precedente, ma credo che vengano utilizzati 2 stack o Annulla / Ripristina. Quando annulli un'azione, questa viene tolta dalla pila delle azioni e posizionata nella pila Ripeti. Se ripeti, lo rimuovi dallo Stack Ripeti e lo sposti nella pila delle azioni. Potrei aver sbagliato la terminologia, ma dovrebbero esserci esempi là fuori.
Rick Henderson

14

Sono sulla stessa barca di te. Devo studiare per interviste tecniche, ma memorizzare un elenco non è molto utile. Se hai 3-4 ore libere e vuoi fare un'immersione più profonda, ti consiglio di dare un'occhiata

mycodeschool
Ho cercato Coursera e altre risorse come blog e libri di testo, ma le trovo o non abbastanza complete o all'altra estremità dello spettro, troppo dense di terminologie informatiche prerequisiti.

Il tizio nel video ha un sacco di lezioni sulle strutture dati. Non preoccuparti dei disegni stupidi o del leggero accento. È necessario capire non solo quale struttura di dati selezionare, ma alcuni altri punti da considerare quando le persone pensano alle strutture di dati:

  • pro e contro delle strutture dati comuni
  • perché esiste ogni struttura di dati
  • come funziona effettivamente nella memoria
  • domande / esercizi specifici e decidere quale struttura utilizzare per la massima efficienza
  • lucida spiegazione Big 0

Ho anche pubblicato delle note su GitHub se sei interessato.


7

Secondo la mia comprensione, la struttura dei dati è qualsiasi dato che risiede nella memoria di qualsiasi sistema elettronico che può essere gestito in modo efficiente. Molte volte è un gioco di memoria o un'accessibilità più rapida dei dati. In termini di memoria, ancora una volta, ci sono compromessi fatti con la gestione dei dati basata sul costo per l'azienda di quel prodotto finale. Gestito in modo efficiente ci dice il modo migliore per accedere ai dati in base al requisito primario del prodotto finale. Questa è una spiegazione di livello molto alto, ma le strutture dei dati sono un argomento vasto. La maggior parte degli intervistatori si immerge in strutture di dati che possono permettersi di discutere nelle interviste a seconda del tempo a disposizione, che sono elenchi collegati e argomenti correlati.

Ora, questi tipi di dati possono essere suddivisi in primitivi, astratti, composti, in base al modo in cui sono costruiti logicamente e accessibili.

  • Le strutture dati primitive sono elementi costitutivi di base per tutte le strutture dati, hanno una memoria continua per esse: boolean, char, int, float, double, string.
  • Le strutture dati composite sono strutture dati composte da più di un tipo di dati primitivo: classe, struttura, unione, matrice / record.
  • I tipi di dati astratti sono tipi di dati compositi che hanno il modo di accedervi in ​​modo efficiente, il che viene chiamato algoritmo. A seconda del modo in cui si accede ai dati, le strutture dei dati sono suddivise in tipi di dati lineari e non lineari. Elenchi, stack, code e così via collegati sono tipi di dati lineari. heap, alberi binari e tabelle hash ecc.Sono tipi di dati non lineari.

Spero che questo ti aiuti a immergerti.


6

L'eccellente libro " Algorithm Design Manual" di Skienna contiene un enorme archivio di algoritmi e struttura dei dati.

Per tonnellate di problemi, le strutture dati e l'algoritmo vengono descritti, confrontati e discussi l'uso pratico. L'autore fornisce anche riferimenti alle implementazioni e ai documenti di ricerca originali.

Il libro è fantastico averlo sulla scrivania se cerchi la migliore struttura di dati da risolvere per il tuo problema. È anche molto utile per la preparazione del colloquio.

Un'altra grande risorsa è il Dizionario NIST di strutture e algoritmi di dati .


4

Poche applicazioni più pratiche delle strutture dati

Alberi rosso-neri (utilizzati quando sono presenti frequenti inserimenti / eliminazioni e poche ricerche) - K-mean Clustering utilizzando albero rosso nero, database, database semplici, ricerca di parole all'interno di dizionari, ricerca sul web

Alberi AVL (più ricerche e meno inserimenti / eliminazioni): analisi dei dati e data mining e le applicazioni che comportano più ricerche

Min Heap - Algoritmi di clustering


3

Qualsiasi classificazione di varie strutture di dati sarà almeno parzialmente legata al contesto del problema. Sarebbe utile imparare come analizzare le prestazioni nel tempo e nello spazio degli algoritmi. Tipicamente, viene utilizzata la "notazione O grande", ad esempio la ricerca binaria è nel tempo O (log n), il che significa che il tempo per cercare un elemento è il logaritmo (in base 2, implicitamente) del numero di elementi. Intuitivamente, poiché ogni passaggio scarta metà dei dati rimanenti come irrilevante, raddoppiando il numero di elementi si aumenta il tempo di 1 passaggio. (La ricerca binaria viene scalata piuttosto bene.) Le prestazioni dello spazio riguardano il modo in cui la quantità di memoria aumenta per set di dati più grandi. Inoltre, si noti che la notazione O grande ignora i fattori costanti: per set di dati più piccoli, un algoritmo O (n ^ 2) potrebbe essere ancora più veloce di un algoritmo O (n * log n) che ha un fattore costante più alto.

Oltre al tempo e allo spazio, altre caratteristiche includono se una struttura dati è ordinata (alberi e liste skip sono ordinati, tabelle hash non lo sono), persistenza (alberi binari possono riutilizzare i puntatori di versioni precedenti, mentre le tabelle hash vengono modificate sul posto), ecc.

Sebbene sia necessario imparare il comportamento di diverse strutture di dati per poterle confrontare, un modo per sviluppare un'idea del perché differiscono nelle prestazioni è studiarne da vicino alcune. Suggerirei di confrontare elenchi collegati singolarmente, alberi di ricerca binari e elenchi di salto , tutti relativamente semplici, ma con caratteristiche molto diverse. Pensa a quanto lavoro ci vuole per trovare un valore, aggiungere un nuovo valore, trovare tutti i valori in ordine, ecc.

Ci sono vari testi sull'analisi degli algoritmi / prestazioni della struttura dati che le persone raccomandano, ma ciò che ha davvero senso per me è stato imparare OCaml. Avere a che fare con strutture di dati complesse è il punto forte del ML, e il loro comportamento è molto più chiaro quando puoi evitare i puntatori e la gestione della memoria come in C. (Imparare OCaml solo per capire le strutture dei dati è quasi certamente la strada più lunga, però. :))

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.