2009-05-29 6 views

Antwort

3

Ich bin glücklich, dass die Erhöhung zu berichten hat jetzt einen Boost.Heap library mit etwas stellar data structures hinzugefügt.

Der Vorteil davon ist, dass Fibonacci-Heaps die Änderung der Priorität in konstanter amortisierter Zeit unterstützen.

Leider sind alle veränderbaren Heaps knotenbasiert (mit anderen Worten, sie haben eine zusätzliche Indirektion, wie von @wilx vorgeschlagen). @ Feruccios Antwort auf Boosts "veränderbare Haufen" hat einen Code, der es einem erlaubt, vektorbasierte mutierbare Haufen zu schreiben, wenn Sie bereit sind, Zeiger auf Handles zu haben, die in Ihrem Werttyp enthalten sind.

2

Das klingt nach mehr Indirektion. Speichern Sie stattdessen den Zeiger auf die Ereignisse in der Prioritätswarteschlange. Wenn sich die Priorität einiger Elemente der Warteschlange ändert, entfernen Sie sie und fügen Sie sie erneut ein.

10

Werfen Sie einen Blick auf Boost mutable heaps.

+0

Danke, wenn ich am Ende selbst rollen muss, benutze ich das Schnipsel zum Starten. –

+1

endete mit dieser Lösung –

+1

@Ferruccio Danke, speicherte meine guten 45 Minuten und einige Bugs. –

0

hier eine Warnung ist, dass Sie mit instabilen Ereignisse am Ende Sortierung, dh Reihenfolge der Ereignisse mit der gleichen Priorität nicht definiert ist (lese ‚wird sie neu geordnet werden.‘)

+1

Sie können ein beliebiges Element in log (n) Zeit aus einem Heap entfernen. –

+0

Ja, du hast Recht, dachte über etwas anderes :) –

+0

kein Problem :) –