risposta

7
  1. Gli heap utilizzano meno memoria. Possono essere implementati come array e quindi non c'è un sovraccarico per la memorizzazione dei puntatori. (Un albero binario può essere implementato come una matrice, ma è probabile che ci siano molte "lacune" vuote che potrebbero sprecare anche più spazio di quanto non siano implementate come nodi con i puntatori).

  2. Gli heap sono garantiti per l'altezza del log (n), poiché non è necessario garantire che gli elementi possano essere recuperati in ordine ordinato attraverso un traversamento in ordine, solo che il valore di un nodo domina i valori dei propri figli. Ciò consente loro di avere la loro struttura "compressa" come una matrice. Un albero binario (a meno che non sia un albero binario bilanciato) di solito finirà con rami che hanno un'altezza maggiore di log (n), quindi anche se le operazioni hanno la stessa grande complessità O, in realtà l'heap sarà leggermente più veloce.

  3. Poiché l'heap può essere implementato come matrice, si ottiene un enorme vantaggio dell'accesso alla memoria contigua che è probabilmente ancora nella cache piuttosto che accedere ai nodi indicati da puntatori la cui memoria è sparsa dappertutto.

  4. Cumuli sono più semplici da implementare rispetto alberi binari (alberi binari in particolare bilanciati)

Uno svantaggio è che con cumuli che non sono in grado di fare una ricerca binaria, ma per una coda di priorità non lo fai bisogno di questa capacità

+1

Sia una buona domanda che una buona risposta. – robbmj

+0

Come si nota, gli alberi possono essere rappresentati in forma di array. # 1 e # 3 non sono molto convincenti (il # 2 d'altra parte è un'ottima ragione). – phs

Problemi correlati