缩放Dijkstra的算法实现

时间:2013-12-24 12:23:02

标签: c++ algorithm graph-theory

我有一个图表,每个Edge有一些weight

我已经实现了dijkstra的算法来找到从Vertex A到B的最短路径。

图表的

Weights从键/值DB中读取。 [redis.io]。

  • 每个Weights DB大约为2 GB。
  • weights有50个数据库。 [或者50个不同的文件,每个2 GB具有我存储在Redis.io中的重量值]。
  • 要查找最短路径,请使用function FindPath(Start, End, DB_name)

Dijkstras从内存中读取权重值[Redio.io是内存中的键值存储]。但我的RAM只有6GB。无法同时将2GB * 50个DB存储到内存中。

Path的请求可以是Random和Concurrent。

存储权重数据库的最佳方法是什么?

是否仅增加RAM选项以提高程序执行速度?

修改

边数:4,62,505

1 个答案:

答案 0 :(得分:2)

如果涉及速度,主要选择是增加内存。使用nosql DB(例如mongodb)无法实现类似的性能。另一种选择是尝试在多核系统上并行化算法。但这是非常艰难的,因为最终的解决方案是全球性的。

[编辑] 存储权重的最快方法是由边数编号索引的连续权重数组。每个DB一个数组。如果所有阵列都不适合你的ram,你可以设计一些基本的缓存机制,将DB从文件交换到数组(希望不是所有的数据库都可以同时访问)。