Wenn ich den höchsten Eintrag in log(n)
Zeit in Javas TreeSet
entfernen möchte, verwende ich treeSet.pollFirst()
- was ist das Äquivalent für Scalas mutable.TreeSet
Klasse?Scala TreeSet vs Java TreeSet - Umfrage?
Wie auch immer, was ich wirklich will, ist eine Heap-ähnliche Datenstruktur der Prioritätswarteschlange, die mich removeMax
, add
und updatePriority
in logarithmischer Zeit lässt. Ich schaute auf die Scala Sammlungen Bibliothek und ich bin verwirrt - während mutable.PriorityQueue
lässt mich deque
(dh removeMax
) in logarithmischer Zeit - es bietet keine Möglichkeit, die Priorität in Log-Zeit zu aktualisieren (ich würde hacky scannen und entfernen Element und neu hinzufügen in lineare Zeit). In ähnlicher Weise würde mutable.TreeSet
die Priorität in logarithmischer Zeit aktualisieren (durch hackiges Löschen und erneutes Hinzufügen), aber es hat keine removeMax
(d. H. pollFirst
) Operation. Welchen Sammelbehälter soll ich verwenden? Bitte verweisen Sie mich nicht auf externe Abhängigkeiten.
Wie denken Sie, 'updatePriority' würde mit' TreeSet' von Java funktionieren? – sharakan
Einfach (vorausgesetzt, Sie haben einen externen Vergleicher durch Überschreiben des TreeSet mit einer anonymen Klasse definiert). Sie löschen und fügen den Knoten einfach hinzu. Schau dir mein Beispiel an. Schau dir Zeile 19 und Zeile 33-36 hier an: https://github.com/pathikrit/scalgos/blob/master/temp/SandBox/AStar.java – pathikrit
Richtig, macht Sinn. Sie sollten den Knoten jedoch entfernen, bevor Sie ihn aktualisieren. – sharakan