【问题标题】:A linear-time algorithm for checking whether a spanning tree can use edges of weight at most some number? [closed]用于检查生成树是否最多可以使用某个数量的权重边的线性时间算法? [关闭]
【发布时间】:2015-12-30 19:32:19
【问题描述】:

这里的问题是我需要找到具有线性时间的算法,而我能想到的只有 Kruksal 算法或 Prim 算法,但它已经是 O(|E|log|E|)。

【问题讨论】:

  • 注意:这里没有关于 minimal 生成树的内容,只是 any 生成树。如果您不关心最小化,那么查找生成树会容易得多。
  • 这个问题似乎与帮助中心定义的范围内的编程无关。

标签: algorithm time-complexity minimum-spanning-tree kruskals-algorithm prims-algorithm


【解决方案1】:

作为提示,考虑一下如果您关注图中权重小于或等于 b 的边会发生什么。如果

  • 这些边给出的图是连通的吗?
  • 这些边给出的图没有连通?

作为提示,想想如果您在图上运行 Kruskal 算法会发生什么。您不需要实际上运行 Kruskal 的算法 - 这还不够快 - 但请考虑一下如果你运行它会如何运行。

【讨论】:

  • 好的,按照您的提示进行操作。是不是说如果它们没有连接,MST 的总和将与所有边
  • 听起来很合理。你能证明这个吗? :-)
  • 那么直观地说,如果它们连接起来,它们会更快地闭合一个圆圈,因此闭合圆圈的边缘将被涂成红色,因此不在 MST 中?我当然可以写得更正式一些。所以实际上我应该只在这里使用 DFS 来迭代边缘?
  • DFS 听起来很合理。 :-)
【解决方案2】:

我可以想到这样的算法:

1. go through each edge e in the graph (O(E)):
  if w(e) > b:
     remove e from the graph

2. if e with removed edges is disconnected (can be done in O(E)):
  return false

return true

这个程序应该可以回答这个问题,但我不能 100% 确定。欢迎任何cmets和建议。

【讨论】:

  • 检查边是否形成桥需要时间 O(m + n),其中 m 是边数,n 是节点数。整个过程将花费时间 O(mn + m^2),这还不够快。
  • @templatetypedef 嗯,你是对的,但我现在想,这个检查没有必要
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-03-23
  • 2011-05-12
  • 2012-10-11
  • 2014-08-15
  • 1970-01-01
  • 2017-07-11
  • 1970-01-01
相关资源
最近更新 更多