【问题标题】:Best way to test for total reachability测试总可达性的最佳方法
【发布时间】:2009-12-12 17:08:52
【问题描述】:

我有一组节点,每个节点都连接到至少一个其他节点。我想知道连接是否使得每个节点都可以相互访问。例如:

1--2
   |
3--4

对比:

1--2

3--4

我相信这种可达性测试可以用exact cover problem 来预测,但是我似乎无法思考如何做到这一点。有没有人有关于如何做到这一点的任何指针、文档、网站等?示例将非常有价值。

更新:我的无知出卖了我,因为这种测试似乎有更有效的算法。有的话请指点一下。

【问题讨论】:

  • 我不明白。检查图是否连接是多项式的。为什么要将其简化为 NP 完全精确覆盖问题?
  • @Pascal - 它在 E 中甚至是线性的
  • @Andreas 不,它们是无向的。

标签: language-agnostic graph-theory projection reachability


【解决方案1】:
  • 从任意节点开始,进行深度/广度优先遍历
  • 统计访问节点的数量(当然,任何节点都不要访问两次!)
  • 比较计数和总数

【讨论】:

  • +1 但我认为这个算法需要图是无向的?
  • 如果您需要的话,应该直接在无向图中转换有向图。
【解决方案2】:

还有一种快速(但相当复杂)的算法用于动态维护连接(即在边缘插入/删除的情况下),如本文所示:Poly-logarithmic deterministic fully-dynamic algorithms for connectivity, minimum spanning tree, 2-edge, and biconnectivity

基本思想是维护生成树。简单的情况是插入一条边,并删除一条非生成树的边。问题是在删除生成树边时,因为现在无法保证连通性 - 我们必须有效地搜索替代路线来连接损坏的部分,否则图形会断开连接。

【讨论】:

    猜你喜欢
    • 2018-08-12
    • 2015-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-03
    • 2019-08-06
    • 2016-06-10
    • 1970-01-01
    相关资源
    最近更新 更多