Ich habe einen großen Graphen (30k Eckpunkte, 250m Kanten) und mit Boost-Graph-Bibliothek Adjazenz-Liste (ich habe versucht, sowohl Vecs und Listen) verbraucht mehr als 25gb. da es nicht sehr einfach ist, einen PC mit mehr als 16gb ram zu bekommen, was empfehlen Sie, um Speicherverbrauch zu verringern?
Antwort
Zu viele Anzeigen?Ich hatte das gleiche Problem mit einer Verifizierungstechnik, bei der ich Diagramme verwende. Wenn Sie mit einer großen Datenmenge arbeiten (Eckpunkte und auch Kanten), sollten Sie eine fein abgestimmte Datenstruktur verwenden, die Sie selbst erstellen.
Wenn Sie viele Kanten haben, sollten Sie die Verwendung einer Adjacency Matrix in Betracht ziehen. Die Kanten haben Gewichte, so dass Sie etwas wie dieses verwenden könnten:
vector<int> vertices;
vector<vector<int> > edges;
Sie könnten die optimierte vector<vector<bool> >
die nur ein Bit zur Darstellung jeder Kante verwendet, wenn die Kanten keine Eigenschaft haben.
Obwohl die Adjazenzmatrix schnell ist, wenn man nach einer Kante suchen oder eine hinzufügen will, ist es nicht gut, über Kanten zu iterieren.
Ich kann sagen, dass mein Diagramm bei Verwendung der gleichen Eigenschaften in BGL und in meinem eigenen Diagramm viel kleiner ist.