Die Benennung der Methode ist in einigen Lehrbüchern (z. B. CLRS ) wahrscheinlich absichtlich, weil:
- Die Logik zum "Schweben" oder "Sprudeln" eines Schlüssels in einem binären Heap ist unkompliziert, wenn Sie wissen, in welche Richtung (nach oben / unten) Sie gehen. Zum Beispiel ist das "Sprudeln" eines Schlüssels einfach ein rekursiver Aufruf der Knoteneltern, anstatt nach unten zu schweben, wo Sie mit jedem Kind vergleichen müssen , bevor Sie rekursiv fortfahren.
- Bei vielen Algorithmen, die Max / Min-Heaps verwenden, müssen Sie nur die Tasten erhöhen oder verringern. Daher reicht es aus, die entsprechende Methode "Floating Down" oder "Bubbling Up" bereitzustellen.
Beachten Sie, dass Sie, wenn Sie eine generische "Set Key" -Methode implementieren möchten, diese beiden Routinen einfach kombinieren können, um zu entscheiden, in welche Richtung Sie gehen möchten, je nachdem, ob Sie den Schlüssel sprudeln oder nach unten schweben müssen.
Um das zu ergänzen, was Hendrick gesagt hat, ist es erwähnenswert, dass selbst für die Algorithmen von Dijkstra oder Prim, bei denen technisch gesehen eine Operation zum Verringern der Schlüssel ausreicht, die Verwendung eines binären Heaps nicht unbedingt erfordert, dass Sie die Position jedes Schlüssels verfolgen.
Bei diesen Algorithmen wird ein bestimmter Schlüssel nur einmal aus dem Heap extrahiert . Zum Beispiel in Dijkstra ist ein Graph Knoten nur einmal hinzugefügt , um den kürzesten Pfade Baum, und im Prim-Algorithmus, eine Kante kann nur einmal auf den minimalen Spanning - Tree hinzugefügt werden.
Anstatt die Schlüsselpositionen zu verfolgen (oder nach ihnen zu suchen, wenn der Algorithmus sie verringern muss), kann on einfach den neuen (in diesem Fall niedrigeren ) Wert für den Schlüssel in den Heap einfügen (was zu Duplikaten im Heap führt). Sobald Sie den "Schlüssel" aus dem Heap extrahiert haben (technisch gesehen Satellitendaten, da der Schlüssel nicht das ist, was Sie gierig verbrauchen), können Sie alle nachfolgenden Extraktionen ignorieren (z. B. mithilfe eines Sets mitO ( 1 )).
Solche Set- und Key-Duplikate im Heap würden Sie offensichtlich kosten O ( n )in der Raumkomplexität, aber Sie könnten sich die kombinierte Lösung als eine "Schlüssel verringern" -Methode vorstellen, die keine Kenntnis oder Verfolgung von Positionen im Heap erfordert .