簡體   English   中英

縮放Dijkstra的算法實現

[英]Scaling a Dijkstra's Algorithm implementation

我有一個圖表,每個Edge都有一些weight

我已經實現了dijkstra的算法來找到從Vertex A到B的最短路徑。

圖表的Weights從鍵/值DB中讀取。 [ redis.io ]。

  • 每個Weights DB大約2 GB。
  • 有50個DB用於weights [或者50個不同的文件,每個2 GB具有我存儲在Redis.io中的重量值]。
  • 要查找最短路徑,使用function FindPath(Start, End, DB_name)

Dijkstras從內存中讀取權重值[Redio.io是內存中的鍵值存儲]。 但我的RAM只有6GB。 無法同時將2GB * 50個DB存儲到內存中。

Path的請求可以是Random和Concurrent。

存儲Weights DB的最佳方法是什么?

是否僅增加RAM選項以提高程序執行速度?

編輯

邊數:4,62,505

如果涉及速度,主要選擇是增加內存。 使用nosql DB(例如mongodb)無法實現類似的性能。 另一種選擇是嘗試在多核系統上並行化算法。 但這是非常艱難的,因為最終的解決方案是全球性的。

[編輯]存儲權重的最快方法是由邊數編號索引的連續權重數組。 每個DB一個數組。 如果所有陣列都不適合你的ram,你可以設計一些基本的緩存機制,將DB從文件交換到數組(希望不是所有的數據庫都可以同時訪問)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM