【问题标题】:Can we use n(V) <= n(E) to detect cycle while using Kruskal's MST for an undirected graph?我们可以使用 n(V) <= n(E) 来检测循环,同时将 Kruskal 的 MST 用于无向图吗?
【发布时间】:2020-10-07 14:51:40
【问题描述】:

根据GeeksForGeeks,在无向图中求最小生成树的步骤是:

  1. 按权重的非递减顺序对所有边进行排序。
  2. 选择最小的边。检查它是否与到目前为止形成的生成树形成一个循环。如果没有形成循环,则包括该边。否则,丢弃它。
  3. 重复第 2 步,直到生成树中有 (V-1) 条边。

这里,对于第 2 步,使用了 Union Find 算法。

如果我们检查以下条件,而不是这种方法:

(图中已包含的顶点数)

我的方法有什么问题吗? 虽然时间复杂度保持不变,因为我们仍在对边进行排序,但这种方法可以减少执行步骤 #2 所花费的时间和代码复杂度。

【问题讨论】:

    标签: algorithm graph graph-algorithm kruskals-algorithm undirected-graph


    【解决方案1】:

    不,你不能使用这个,因为你可以在图中遇到一个循环,其中 n(V) > n(E)。

    例如,图由 4 个顶点组成,共有 3 条边,1-2、2-3 和 1-3。有一个循环,但 n(V)

    基本上,如果 n(V)

    【讨论】:

    • 这种情况在处理 Kruskal 算法时绝不会出现。只有当它有边时,顶点才会被添加到集合中。这正是我认为我的假设成立的原因
    • 好的,然后假设您有一个包含很多顶点的图,并且您连接 1-2,然后是 3-4,然后是 5-6。接下来,连接 1-3。现在,您在集合中有 6 个顶点(如果我正确理解您的方法)并且只有 4 个边。因此,您可以建立一个连接 2-4,这会创建一个循环,但您不会检测到它。也许你的意思是别的,但在这种情况下,如果你用多个边连接两个以前未连接的组件会发生什么?总的来说,您能否详细说明“已包含在图表中”的确切含义?
    • 没有考虑这种情况谢谢!
    【解决方案2】:

    正如@Maurycat 所说,当图中有两个组件并且其中一个组件具有循环时,这将不成立。

    【讨论】:

      猜你喜欢
      • 2018-09-08
      • 2020-07-24
      • 1970-01-01
      • 2021-05-15
      • 1970-01-01
      • 2022-06-27
      • 2013-01-24
      • 1970-01-01
      相关资源
      最近更新 更多