【问题标题】:linear time algorithm for mst given |E|=99+|V|给定 |E|=99+|V| 的 mst 的线性时间算法
【发布时间】:2022-01-23 02:18:38
【问题描述】:

我需要创建一个线性算法来寻找最小生成树给定一个无向加权和连接图(没有孤立的事实)有 |V|顶点和|V|+99条边 我认为解决方案应该基于 Kruskal 并达成共识,但到目前为止还没有运气,有什么想法吗?

【问题讨论】:

  • 可能的提示:或许这里的诀窍是证明其中一种标准方法(Kruskal、Prim、Boruvka、?..)在线性时间内有效。
  • 我试图证明 (|V|+99)log|V|
  • 是的;所以也许试试 Kruskal 以外的其他东西......
  • 例如,如果 Prim 中的优先级队列在每个时刻最多包含 99 个元素,这将自动表示线性时间。
  • 即使没有,朝那个方向的尝试也可以提供一些见解。

标签: algorithm graph-theory


【解决方案1】:

首先移除所有1度的顶点,并将它们的相邻边添加到MST,直到没有更多的1度顶点。

然后考虑每个 2 度顶点链。如果一条链是一个循环,则将除了最昂贵的边之外的所有边都添加到 MST。

否则,链必须在度数 >= 3 的两个顶点之间运行。将链替换为单条边。该边缘的成本将是链中最昂贵的边缘的成本。这就是通过链连接两端而不是仅仅将顶点连接到两端之间的成本差异。

现在您的顶点度数 >=3。其中必须少于 200 个,剩余的边数必须少于 300 个。运行 Kruskal 以确定哪些边进入 MST。

【讨论】:

  • 这里真的可以存在一个2度顶点的循环吗?
  • 如果是移除 1 度顶点后的整个图(当然,这意味着 |E|
  • 好的,所以不是给定的问题,对吧?
  • 嗯,当然……但那是希望 OP 对他的问题陈述非常小心,而他们通常不会。
  • 关于最后一步:我认为可以有100多个节点。就像一个由 198 个节点组成的循环/圆,再加上 99 条额外的边,将每个节点与“在圆的另一侧的节点”连接起来。
猜你喜欢
  • 2016-02-05
  • 2018-08-29
  • 1970-01-01
  • 2011-03-26
  • 2013-02-16
  • 2012-06-01
  • 2012-10-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多