Ich habe ein Stream-Daten kommen, und ich bin Beibehaltung von ihnen eins nach dem anderen in einen Haufen (Prioritätswarteschlange) drückt, sieht die resultierende Haufen wie:Python - Hash-Heap-Implementierung
[(a,1), (b,2), (c, 7), (d, 2), ...]
Weil ich brauche um die Elemente zu aktualisieren (z. B. (a, 1) zu ändern (a, 2) oder zu löschen (c, 7)), um die Zeit kontinuierlich zu durchlaufen. Um Elemente in einem Heap effizient zu finden und zu entfernen, möchte ich eine Hash-Tabelle mit dem Speicherort aller Elemente in dem Heap erstellen, die in der Hash-Tabelle gespeichert sind.
Damit jedes Mal, wenn ich ein Element aktualisieren möchte, kann ich die Hashtabelle verwenden, um es zu finden und Änderungen leicht in den Heap zu ändern, simultan die Position jedes Elements in der Hashtabelle aktualisieren. How to implement O(1) deletion on min-heap with hashtable mit C++ Code wie folgt: wenn jemand mich auf die Idee erklären kann, fragen
template<typename state, typename CmpKey, class dataStructure>
bool AStarOpenClosed<state, CmpKey, dataStructure>::HeapifyUp(unsigned int index)
{
if (index == 0) return false;
int parent = (index-1)/2;
CmpKey compare;
if (compare(elements[theHeap[parent]], elements[theHeap[index]]))
{
// Perform normal heap operations
unsigned int tmp = theHeap[parent];
theHeap[parent] = theHeap[index];
theHeap[index] = tmp;
// Update the element location in the hash table
elements[theHeap[parent]].openLocation = parent;
elements[theHeap[index]].openLocation = index;
HeapifyUp(parent);
return true;
}
return false;
}
Ich habe wenig Erfahrung mit C++, Hilfe oder eine Python-Version Code liefern
Die gleiche Frage wurde in diesem Beitrag nicht gefragt von einer solchen Implementierung?
Danke für Ihre Eingaben! Was ist der Zweck des Zugriffs auf den kleinsten Schlüssel? – enaJ
@enaJ Sie sollten es besser wissen. Das ist die Hauptfunktionalität der Min-Heap-Datenstruktur. Wenn Sie nicht auf den kleinsten Schlüssel zugreifen müssen, warum wird Ihre Frage um Min-Heap herum aufgebaut? – Leon
Das erste Element in meinem Paar repräsentiert einen Knoten, das zweite Element repräsentiert die Kanten, die mit diesen Knoten verbunden sind. Das große Bild dieses Problems besteht darin, ein Diagramm mit Knoten und Knoten in einem rollierenden Zeitfenster von 1 Minute zu aktualisieren. – enaJ