【问题标题】:C/C++ Library for dynamic graphs? [closed]用于动态图的 C/C++ 库? [关闭]
【发布时间】:2011-09-30 00:20:33
【问题描述】:

我正在寻找一个对动态图进行操作的库。我有一个模拟,我必须在对其结构进行一些更改后重复计算图的平均测地线长度(在无向图上添加和删除边,所有边都具有相同的权重)。

我正在使用我制作的 igraph 的快速 C++ 包装。 igraph 用于静态图,因此每次更改图形时我都会从头开始重新计算测地线距离。这是一个蒙特卡罗模拟,所以我必须这样做数百万次才能恢复一些统计数据。它开始变得非常缓慢。

所以我寻找了具有动态图算法的库,它可以在我删除或添加边后重新计算更新平均长度。我找到了一些关于这个主题的论文,但我真的不是专家(我只是一个物理学家,我只是顺便在一个问题上使用图表......我几乎不了解数据结构和算法)所以我可以连论文都不读,更不用说实现算法了。

我发现这个库 LEDA (http://www.algorithmic-solutions.com/leda/) 似乎有一个动态图形扩展,但它似乎没有维护(下载免费版本的链接已损坏)它是专有的。

还有其他选择吗?我正在寻找 C/C++ 库。如果必须的话,也许是 Haskell,我非常绝望。

【问题讨论】:

  • 你是怎么解决这个问题的?六年后,我仍然找不到这样的(高性能)库。
  • 这个问题在被问到时是话题,但现在是题外话。同时……伙计,我真的想要一个答案。它会让我正在做的事情变得更容易。哦,好吧。

标签: c++ c algorithm graph libraries


【解决方案1】:

由于您无论如何都在做蒙特卡洛,我认为近似平均最短路径长度是可以接受的。在每个步骤中,您可以对少数节点进行采样,并报告从其中一个节点开始的路径的平均最短路径长度,该路径具有相同的期望和希望合理的方差。

另外,您提到的关于动态最短路径的 JACM 论文的参考文献 [3] 是 2004 年的一项实验研究;也许作者会让你使用他们的代码。

【讨论】:

  • 现在我有了评论的地方,了解您的图表的密集程度可能对未来的答案很有用。
  • 嗨。我的图表范围从星形到完全连接。 :(
  • 如果我根据节点的连通性对节点进行采样以计算平均路径长度,我会引入偏差吗?
【解决方案2】:

我知道这么晚,但你看过LEMON吗?

【讨论】:

【解决方案3】:

你看过Boost Graph Library

我自己没有使用过它,但作为 Boost 的一部分,您可以期待它的质量非常高,但它需要一定程度的 C++ 专业知识。

【讨论】:

  • Boost中有动态图的算法吗?在我看来,它只适用于静态图。
  • 来自 BGL 文档:“它是高度参数化的,因此可以针对不同情况进行优化:图是有向的或无向的,允许或禁止平行边,仅有效访问外边或到边缘,以额外空间开销为代价的快速顶点插入和删除等。”不确定这是否是您需要的,或者您是否正在寻找不需要访问整个图表来解释变化的算法?
  • 是的,例如,我对可以根据我在删除或添加边之前知道测地线路径这一事实更快地计算测地线路径变化的算法感兴趣。在这篇文章的台词上:ams.org/mathscinet-getitem?mr=2145260.
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-07-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-08
  • 1970-01-01
相关资源
最近更新 更多