Ho sempre pensato che gli heap e le code di priorità fossero sinonimi: una struttura di dati astratta che supporta le operazioni insert
, findMin
e deleteMin
.
Alcune pubblicazioni sembrano essere d'accordo con me - Purely Functional Data Structures di Chris Okasaki (capitolo 3), per esempio.
D'altra parte, la pagina heap di Wikipedia la definisce come una struttura di dati basata sugli alberi e afferma quegli heap sono un'implementazione concreta delle code di priorità.
Ho difficoltà a conciliare ciò con il fatto che posso pensare a più di una implementazione dell'heap: heap di sinistra, heap binomiali, heap di splay ...
Il semplice fatto che un heap possa essere implementato con strutture di dati differenti non significa, per definizione, che si tratti di una struttura di dati astratta? E se questo è il caso, c'è una differenza reale con le code di priorità?