【发布时间】:2012-12-26 11:38:21
【问题描述】:
我有一个 Dijkstra 算法的实现,基于 this website 上的代码。基本上,我有许多节点(比如 10000 个),每个节点可以有 1 到 3 个与其他节点的连接。
节点是在 3d 空间内随机生成的。连接也是随机生成的,但它总是首先尝试找到与其最近邻居的连接,然后慢慢增加搜索半径。每个连接的距离为 1。 (我怀疑这是否重要,但这只是背景)。
在这种情况下,该算法只是用于寻找从起点到所有其他节点的最短跳数。它适用于 10,000 个节点。我遇到的问题是,随着节点数量的增加,比如接近 200 万,我在尝试构建图表时用尽了我所有的计算机内存。
有谁知道实现算法以减少内存占用的替代方法,或者是否有另一种使用更少内存的算法?
【问题讨论】:
-
由于 Dijkstra 本身与节点数呈线性关系,我想是图形表示本身会消耗大量内存。您使用哪种数据结构来表示图形?
-
更重要的是,您在哪种架构上运行它?具有几 GB 内存的 PC 应该能够存储超过 2M 的节点,除非每个节点每个都占用数百字节 - 此时您可能需要重新考虑您的节点信息。
-
您可能在构建图形阶段时出现内存泄漏。你能发布你的代码吗?
-
@emreakyilmaz ,该代码与我第一篇文章中网站中的代码几乎相同。
-
@Mats Petersson:我的电脑有 4 GB 内存!正如 emreaky 所说,可能存在内存泄漏。查看我在问题中发布的链接中的代码,它是否能够处理 200 万个节点的图表?比如long dist[GRAPHSIZE][GRAPHSIZE],200万个节点会不会占用大量内存?
标签: c++ algorithm memory memory-management dijkstra