Also sagen wir, ich habe eine Prioritätswarteschlange von N Elementen mit Prioritäten, wobei N in den Tausenden ist, unter Verwendung einer Prioritätswarteschlange, die mit einer binary heap implementiert ist. Ich verstehe die EXTRACT-MIN
und INSERT
Grundelemente (siehe Cormen, Leiserson, Rivest die -MAX
statt -MIN
verwendet).Positionsindex für binäre Heap-Prioritätswarteschlangen?
Aber DELETE
und DECREASE-KEY
scheinen beide die Prioritätswarteschlange zu benötigen, um den Index eines Artikels in dem Heap zu finden, der das Element selbst gibt (alternativ muss dieser Index von Verbrauchern der Prioritätswarteschlange gegeben werden, aber dies scheint so eine Abstraktionsverletzung) .... die wie ein Versehen aussieht. Gibt es eine Möglichkeit, dies effizient zu tun, ohne eine Hashtabelle oben auf dem Heap hinzufügen zu müssen?
Es ist die API zu einem * Heap *, keine Prioritätswarteschlange. –
Sobald Sie ein Element aus dem Heap einfügen oder extrahieren, ist es nicht mehr garantiert, dass die Indizes gültig sind. Wenn Sie also einen Index eines Elements zu einem bestimmten Zeitpunkt kennen, können Sie nicht unbedingt den Index eines Artikel zu einem anderen Zeitpunkt. –