扩展 Dijkstra 算法实现

Scaling a Dijkstra's Algorithm implementation

本文关键字:实现 算法 Dijkstra 扩展      更新时间:2023-10-16

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

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

图形的Weights是从键/值数据库中读取的。[ redis.io ]。

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

Dijkstras 从内存中读取权重值[Redio.io 是内存中的键值存储]。但我的内存只有 6GB。不可能同时将 2GB * 50 个数据库存储到内存中。

对路径的请求可以是随机的和并发的。

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

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

编辑

边数:4,62,505

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

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