Tim Roughgarden in Algorithmen 2 Kurs vermittelt den folgenden Ansatz für die benachbarten Knoten in dem min-Heap zu aktualisieren (nachdem er aus dem Heap Extrahieren min):Aufrechterhaltung invariant in Prim-Algorithmus
When a vertice v is added to the MST:
For each edge (v,w) in the unexplored tree:
1. Delete w from the min heap.
2. Recompute the key[w] (i.e. it's value from the unexplored tree
to the explored one).
3. Add the value back to the heap.
Also, im Grunde handelt es sich dabei Streichung von der Haufen (und heapify, die nimmt O (log n))
statt und dann wieder einsetzen (wieder O (log n)), wenn ich den folgenden Ansatz:
For each edge (v,w) in the unexplored tree:
1. Get the position of the node in the heap(array) using HashMap -> O(1)
2. Update the value in place.
3. Bubble up or bubble down accordingly. -> O(logn)
Althou Sie sind asymptotisch gleich, letzterer gibt bessere Konstanten. Also ist es besser als der im Kurs? Oder fehlt mir etwas?
Interessante Frage, aber die [Computer Science Stack Exchange] (http://cs.stackexchange.com) könnte ein besseres Forum dafür sein. Ich könnte sogar vorschlagen, dass ein Mod sie migrieren sollte; Jemand in dieser Gemeinschaft wird wahrscheinlich in der Lage sein, eine qualitativ hochwertige Antwort zu liefern. –
Die Sache ist, dass Sie Ihre Hash-Karte pflegen müssen, die auch O (logn) braucht, weil Sie möglicherweise die Position vieler Elemente ändern müssen. – HenryLee
@HenryLee können Sie mich auf einige Referenzen verweisen, wo es bewiesen ist, dass ein einzelnes Update logarithmische Anzahl von Updates auslösen kann? Weil ich es nicht zu finden scheint –