2009-04-16 18 views
27

Un heap è una struttura di dati dell'albero in cui i livelli più alti dell'albero contengono sempre valori maggiori (o minori, se impostati in quel modo) rispetto ai livelli inferiori. "L'heap" è un mucchio di RAM gratuita che un programma ha a disposizione per l'allocazione dinamica. Sono entrambi chiamati "heap", ma cosa c'entra l'uno con l'altro?Qual è la relazione tra "un" heap e "l'" heap?

+0

Post correlati [qui] (https://stackoverflow.com/q/1699057/465053) e [qui] (https://stackoverflow.com/q/660855/465053) – RBT

risposta

23

Niente, a dire il vero. Immagino che la parola heap sia stata semplicemente presa con il suo uso quotidiano (non tecnico) e applicata a questi due concetti individualmente come analogie ragionevolmente buone.

Nel primo caso (struttura di dati ad albero significato), la descrizione mucchio è più appropriata perché "superiori" oggetti sono posizionati più in alto nella struttura (dove "maggiore" viene determinato da una funzione chiave arbitraria) - ie c'è una sorta di accumulo di oggetti più piccoli in cima a quelli più grandi (o più grandi sopra, a seconda di come ci si pensa). Questo è esattamente come lo interpreterei; chiunque abbia prima applicato il nome heap a questa struttura dati ha pensato che fosse un nome appropriato nella sua mente, ed è solo bloccato.

Nel secondo caso (blocchi di RAM), il nome dell'heap è forse un po 'più evidente. "Heap" è solo "una vasta collezione di cose in un ordine altamente arbitrario" qui, che sembrerebbe applicarsi altrettanto bene nell'uso comune quanto nei pezzi di memoria allocati dinamicamente.

In ogni caso, non mi preoccuperei delle somiglianze metaforiche astratte che si possono tracciare tra le due idee. Trattali completamente separatamente e non ti sbagli mai in nessuna situazione.

Edit: Sembra che la struttura di dati ad albero può hanno preso il nome dal heap di algebra astratta, come è ragionevolmente comune all'interno informatica. Tuttavia, non vorrei confermare o negare questo ...

2

Hanno ... hanno lo stesso nome! Questo è tutto.

1

Niente. Nessuna relazione.

5

Entrambi hanno lo stesso nome, questo è tutto.
L '"heap" non viene mai organizzato come una struttura di dati heap effettiva.

2

L'unica relazione tra i due è il nome "heap".

0

definizione dal answers.com

Heap: Un gruppo di cose poste o gettati, uno sopra l'altro: un mucchio di stracci sporchi giace in un angolo.

È solo una denominazione di base dovuta all'immagine concettuale di come gettare le cose in modo non ordinato. Come sottolineato da altri poster, l'heap non è organizzato come una struttura di dati dell'heap. Ciò dipende dalle routine di allocazione della memoria nella libreria di sistema (ad esempio, controlla come funziona malloc)

3

L'heap (datastructure) viene chiamato così perché se lo si disegna sembra un heap. L'heap (memoria) è chiamato heap perché è in qualche modo organizzato ma non completamente. Si accumulano dati su un heap ma si potrebbero avere buchi e irregolarità. È come se avessi messo i fogli su un mucchio. A volte ne rimuovi uno dal basso. Questo ha una forma di heap, cioè in qualche modo organizzato ma non completamente.

+0

"se lo si disegna sembra come un mucchio "-> cosa si intende per il nome predicato di" ... sembra un mucchio "? –

1

A complicare ulteriormente la domanda: su alcuni sistemi (ad esempio Microsoft Windows), ci sono più "heap" nel senso di allocazione della memoria. "L'heap" è semplicemente the default heap. Ma se chiami HeapAlloc(), puoi scegliere da quale allocazione di memoria vuoi una sub-allocazione.