扩展 Dijkstra 算法实现
Scaling a Dijkstra's Algorithm implementation
我有一个图表,每个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从一个文件交换到另一个数组(希望不是所有的数据库都被同时访问)。
相关文章:
- std::unordered_map 搜索算法是如何实现的?
- 如何实现高效的算法来计算大型数据集的多个不同值?
- 了解算法的性能差异(如果以不同的编程语言实现)
- 它是否定义了哪些算法可以接受可变 lambda 的实现?
- 为什么在此排序算法实现中,向量明显比数组慢?
- 快速实现 PRIM 算法
- 如何知道用于实现标准代码段的确切数据结构和算法,例如在C++STL中?
- 在 Eigen3 中实现 Bartels-Stewart 算法 -- 仅实矩阵?
- 在 c++ 或 python 中生成一个体面的视差图以在 Raspberry Pi 上实现的最佳方法(算法或函数)是什么
- 字母C++实现中的 Prim 算法
- 尝试实现二叉搜索算法,似乎无法使其工作
- C++17 并行算法已经实现了吗?
- AES_XCBC算法的实现
- C++ GDAL 算法 GDALFillNodata() 的实现
- 如何检查 CNG Windows API 是否返回符合 FIPS 的算法实现
- OpenMP:共享同一算法的单线程和多线程实现
- 使用L1CPUCache实现c++算法的Python
- 实现算法(气泡排序)来组织阵列
- 实现O(n)算法来确定字符串是否所有字符都是唯一的
- 我应该如何去实现算法与黑白和彩色图像使用