2012-06-18 4 views
6

Ich mache eine iterative Berechnung in einem Flussnetzwerk, während der ich aufzeichnen muss, wie viel jede Quelle zum Fluss an jeder Kante beiträgt. Der Fluss an einer beliebigen Kante ist im Durchschnitt auf 2% der Quellen zurückzuführen, also definiere ich vector< map<int, double> > flow, wobei flow[e][s] = f bedeutet, dass der Fluss an der Kante e aufgrund der Quelle sf ist. Bei jeder Iteration wird jede f in flow aktualisiert.Externe Speicherdatenstruktur zum Ersetzen von Vektorkarten

Die Spitzenspeicherbelegung des Programms erreicht fast 4 GB. Dies funktioniert auf (32-Bit) Linux und OS X, aber es stürzt unter Windows ab (was einen 2 GB per process limit vorgibt).

Wie kann ich eine datenträgerbasierte Datenstruktur mit einer vector< map<int, double> > Schnittstelle implementieren (oder sonstwie umgehen)?

Antwort

2

Ich habe STXXL für ähnliche Typen Szenarien verwendet. Es könnte einen Blick wert sein.

0

Wenn der Vektor von Karten ist, was den gesamten Speicher verbraucht, ist es absolut notwendig, double für die Datenfelder zu haben? Ändern könnte helfen.

Andernfalls können Sie möglicherweise eine verwenden, obwohl es plattformübergreifend kompatibel sein wird, vor allem mit der eingebetteten Datenstruktur, die Sie für Ihre Zuordnungen haben.

Verwandte Themen