Mantiene gli n/2 elementi più grandi in un heap minimo. Per gli articoli più piccoli n/2, mantenere una coppia di heap max e min. Gli heap in questa coppia sono aumentati con l'indice dello stesso elemento nell'heap accoppiato, in modo che qualsiasi modifica dell'heap aggiorni gli indici nell'heap accoppiato per tutti gli elementi spostati.
spiegazioni mucchio appaiati
Entrambi i cumuli contengono esattamente lo stesso insieme di elementi. Insieme a ciascun elemento c'è un campo indice aggiuntivo. Quando l'heap viene modificato, alcuni elementi potrebbero cambiare posizione. Se un articolo viene spostato dall'indice x
all'indice , l'elemento corrispondente nell'heap associato deve essere notificato. Questo articolo corrispondente si trova facilmente nell'heap accoppiato con il campo dell'indice dell'oggetto spostato. E il contenuto del campo indice dell'articolo corrispondente viene modificato da x
a . Ciò consente a tutti gli elementi heap di sapere esattamente dove si trovano le loro coppie. Mantenere gli elementi corrispondenti in entrambi gli heap in-sync consente (mentre si estrae l'elemento più grande dall'heap massimo o il secondo più piccolo dall'heap min) estrarre l'elemento corrispondente dall'heap associato. E mantenere i cumuli in-sync non aumenta nessuno dei requisiti di complessità.
fonte
2012-02-08 14:26:21
Non ho capito come funzionano i due heap per gli elementi più piccoli n/2. – Zack
Aggiunta spiegazione più dettagliata. –
Grazie, questo lo farà. Per curiosità, c'è un altro modo in cui non è necessario tenere duplicati? – Zack