【问题标题】:Running time of Kruskal's algorithm by varying the sorting timeKruskal 算法通过改变排序时间的运行时间
【发布时间】:2014-11-11 08:15:01
【问题描述】:

我正在分析最小生成树,并且想知道排序时间将如何影响 Kruskal 算法的整体时间复杂度?

例子:

  1. 如果可以在O(n log log n)中进行排序
  2. 如果可以在O(n)中进行排序

这两种情况的答案是否仍然是O(e log n),还是会改变?

【问题讨论】:

  • 你应该指定什么是n,什么是e?
  • 如果您觉得答案有用,请将其标记为答案并投票。
  • @Ahmad OP 只有 11 个代表,所以他/她不能投票。但如果你觉得这个问题很有趣,你也可以投票 ;-)
  • @ring0 谢谢,我已经完成了。我需要对我的问题和答案投一些票才能留下不公平的禁令,如果您也查看了我的问题和答案,请考虑投票。

标签: algorithm graph analysis minimum-spanning-tree kruskals-algorithm


【解决方案1】:

Kruskal 算法的时间是O(e log e),也是对边进行排序的时间。如果你能在 O(e) 中做到这一点,考虑到找到最小生成树的算法的其余部分是 O(e log n),你就有 O(e) + O(e log n) 。由于e=O(n^2),那么算法时间将是O(n^2 log n)O(e log n)。如果排序需要 O(e log log e) 进行相同的分析,则总时间将是 O(e log log e)

详细说明:找到最小生成树的时间是通过对边进行排序所需的时间以及从排序列表中删除每条边并检查是否它连接或不连接两个不相交的区域。 (这个检查需要 O (log n) )并且循环的时间是O(e log n) 如上所述。

使用更复杂的不相交集数据结构来查找和检查循环具有 O(E α(V)) 时间的不相交区域,其中 α 是单值 Ackermann 函数的增长极其缓慢的逆函数 (WikiPedia)

【讨论】:

    【解决方案2】:

    如果你使用不相交集来实现 kruskal 算法,复杂度将是SortComplexity+Eα(E)

    E 是边数,alpha 是增长非常缓慢的函数(根据wikipedian 的实际值小于 5))

    所以如果可以在O(n) 中进行排序,那么kruskal 的复杂度将是O(E α(E))

    如果排序复杂度为O(nloglogn),kruskal 的复杂度将为O(EloglogE),对于密集图,它将为O(v^2loglogv)v 是顶点数)

    【讨论】:

      猜你喜欢
      • 2015-06-16
      • 2013-12-24
      • 2017-07-16
      • 2022-01-26
      • 1970-01-01
      • 2021-03-22
      • 1970-01-01
      • 2019-09-04
      • 2020-10-09
      相关资源
      最近更新 更多