【问题标题】:boost graph library memory consumption large graphboost 图形库内存消耗大图
【发布时间】:2011-08-04 02:57:18
【问题描述】:

我有一个大图(30k 顶点,250m 边),并且使用 boost 图形库邻接列表(我尝试了 vecs 和列表)消耗超过 25gb。 16gb以上的内存不容易买,有什么建议可以减少内存使用?

【问题讨论】:

  • 这几乎是一个完整的图表!一个节点的大小是多少?节点中实际上是什么?你没有给我们太多的帮助。
  • 我认为将整个图形加载到内存中以达到所描述的图形大小是不切实际的。你有没有考虑过像 MapReduce 这样的方法?处理大图?
  • 图只有顶点的索引属性和边的权重属性。
  • 我猜,对于 MapReduce,所有算法本质上都应该是并行分布的。如果不需要,我不想涉足分布式并行计算业务。

标签: boost graph memory-management


【解决方案1】:

我在使用我正在处理的图表的验证技术方面遇到了同样的问题。 如果您要处理大量数据(顶点和边),您应该使用自己创建的微调数据结构。

如果你有很多边,你应该考虑使用邻接矩阵。 边缘有权重,所以你可以使用这样的东西:

vector<int> vertices;
vector<vector<int> > edges;

如果边没有属性,您可以使用优化的vector&lt;vector&lt;bool&gt; &gt;,它只使用一位来表示每条边。

虽然当您要检查边或添加边时邻接矩阵很快,但迭代边并不好。

我可以说,在 BGL 和我自己的图表中使用相同的属性,我的图表要小得多。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-25
    • 2013-10-30
    • 2015-04-04
    • 2014-04-15
    • 1970-01-01
    • 2018-04-27
    • 2022-01-16
    • 2014-01-04
    相关资源
    最近更新 更多