【问题标题】:Can we detect cycles in directed graph using Union-Find data structure?我们可以使用 Union-Find 数据结构检测有向图中的循环吗?
【发布时间】:2020-07-24 19:45:38
【问题描述】:

我知道可以使用 DFS 和 BFS 在直接图中检测循环。我想知道我们是否可以使用 Union-Find 检测有向图中的循环?

  • 如果是,那么如何?和
  • 如果我们不能,那为什么?

【问题讨论】:

  • 嘿,那是关于 DFS 与 Union-Find。两者都可以用于检测无向图中的循环,但是有向图呢?我从未见过使用 Union-Find 检测有向图的循环。所以,我问为什么?是无法实现还是什么?
  • 您能否推荐学习图形数据结构的最佳资源……以及您是如何/在哪里学习图形数据结构的?
  • 如何在无向图中表示边。是像 0->1 还是两者都像(0->1 和 1->0)
  • 是的,在无向图的情况下,你推动两条边。普林斯顿大学在 Coursera 上有一门非常好的课程,叫做算法 1。这是一个很好的资源。除此之外,我主要是通过解决各种网站(如hackerrank、codeforces)上的问题来学习的

标签: data-structures graph graph-algorithm union-find cycle-detection


【解决方案1】:

不,我们不能使用 union-find 来检测有向图中的循环。这是因为有向图无法使用不相交集(执行并集查找的数据结构)来表示。

当我们说'a union b'时,我们无法确定边缘的方向

  1. a 去 b 吗? (或)
  2. b 会去a 吗?

但是,在无序图的情况下,每个连通分量都等价于一个集合。所以 union-find 可以用来检测一个循环。每当您尝试对属于同一个连通分量的两个顶点执行并集时,我们可以说存在循环。

【讨论】:

    【解决方案2】:

    没有。

    让我举个例子:

    • 第一季度。取一个无向图:

    上面的无向图中是否存在循环?是的。我们可以使用 Union-Find 算法找到循环。

    • 第二季度。现在看看类似的有向图:

    上述有向图中是否存在循环?不! 但是,如果您使用 Union-Find 算法来检测上述有向图中的循环,它会说是!由于 union-find 算法看上图如下:

    上图中有循环吗?是的!但是最初的(Q2)问题被篡改了,这不是被问到的。所以联合查找算法对于有向图会给出错误的结果。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-26
      • 1970-01-01
      • 2020-09-09
      • 1970-01-01
      相关资源
      最近更新 更多