Priority Queue mit DecreaseKey
-
Hi,
kennt jemand eine Bibliothek, die eine Priority Queue mit einer DecreaseKey Funktion enthält?
-
Metzger schrieb:
Hi,
kennt jemand eine Bibliothek, die eine Priority Queue mit einer DecreaseKey Funktion enthält?
Ich kenne eine nicht öffentliche. Aber meistens ist es besser das selbst zu machen, da man so Platz spart. Ansonsten musst du und die queue einen Index auf die Elemente vorhalten.
-
Metzger schrieb:
Hi,
kennt jemand eine Bibliothek, die eine Priority Queue mit einer DecreaseKey Funktion enthält?
'DekreaseKey' zu implementieren ist nicht effizient, wenn man nicht den Index des Elements kennt -- und das ist meist nicht der Fall. Daher kann man sich auch damit behelfen, sequenziell in den Daten nach dem Wert zu suchen, den Wert mit dem letzten Wert der Pri-Queue zu swappen und dann einmal 'push_heap' auf die Daten aufzuführen, das ist dann genauso effizient.
-
Konrad Rudolph schrieb:
Metzger schrieb:
Hi,
kennt jemand eine Bibliothek, die eine Priority Queue mit einer DecreaseKey Funktion enthält?
'DekreaseKey' zu implementieren ist nicht effizient, wenn man nicht den Index des Elements kennt -- und das ist meist nicht der Fall. Daher kann man sich auch damit behelfen, sequenziell in den Daten nach dem Wert zu suchen, den Wert mit dem letzten Wert der Pri-Queue zu swappen und dann einmal 'push_heap' auf die Daten aufzuführen, das ist dann genauso effizient.
Warum sollte es nicht effizient sein, den Index zu kennen?
-
Ponto schrieb:
Warum sollte es nicht effizient sein, den Index zu kennen?
Bevor wir aneinander vorbeireden: Das habe ich nicht gesagt. Ich habe gesagt (davon ausgehend, dass die Pri-Queue mit einem Heap implementiert wird, aber mit einem AVL-Baum hat man dasselbe Problem):
- *Wenn* man den Index eines Elements nicht kennt, *dann* ist DecreaseKey ineffizient.
- Normalerweise kennt man den Index eines Elements nicht. Man kann ihn allerdings in linearer Zeit ermitteln, indem man den Heap durchgeht (in einem AVL-Baum geht es sogar in logarithmischer Zeit).