[英]Scaling a Dijkstra's Algorithm implementation
我有一個圖表,每個Edge
都有一些weight
。
我已經實現了dijkstra的算法來找到從Vertex
A到B的最短路徑。
圖表的Weights
從鍵/值DB中讀取。 [ redis.io
]。
Weights DB
大約2 GB。 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.