Ich habe eine Implementierung von Dijkstra-Algorithmus, basierend auf dem Code auf this website. Grundsätzlich habe ich eine Anzahl von Knoten (sagen wir 10000) und jeder Knoten kann 1 bis 3 Verbindungen zu anderen Knoten haben.Dijkstra-Algorithmus: Speicherverbrauch
Die Knoten werden zufällig innerhalb eines 3D-Raums generiert. Die Verbindungen werden auch zufällig erzeugt, jedoch versucht sie immer zuerst Verbindungen mit ihren nächsten Nachbarn zu finden und erhöht langsam den Suchradius. Jede Verbindung hat einen Abstand von eins. (Ich bezweifle, dass irgendetwas davon zählt, aber es ist nur Hintergrund).
In diesem Fall wird der Algorithmus nur verwendet, um die kürzeste Anzahl von Hops vom Startpunkt zu allen anderen Knoten zu finden. Und es funktioniert gut für 10.000 Knoten. Das Problem, das ich habe ist, dass, wenn die Anzahl der Knoten zunimmt, sagen wir in Richtung 2 Millionen, ich benutze alle meine Computer Speicher beim Versuch, das Diagramm zu erstellen.
Kennt jemand eine alternative Methode zur Implementierung des Algorithmus, um den Speicherbedarf zu reduzieren, oder gibt es einen anderen Algorithmus, der weniger Speicher benötigt?
Da Dijkstra sich linear mit der Anzahl der Knoten skaliert nehme ich es die Grafik-Darstellung selbst, die so viel Speicher kostet. Welche Datenstruktur verwenden Sie, um das Diagramm darzustellen? – Howard
Noch wichtiger, auf welcher Art von Architektur betreiben Sie das? Ein PC mit ein paar GB RAM sollte in der Lage sein, mehr als 2 Millionen Knoten zu speichern, es sei denn, jeder Knoten nimmt mehrere hundert Byte in Anspruch - an diesem Punkt möchten Sie wahrscheinlich Ihre Knoteninformationen überdenken. –
Sie haben möglicherweise Speicherlecks beim Erstellen der Grafikphase. Kannst du deinen Code posten? – emreakyilmaz