【发布时间】:2012-01-15 23:25:37
【问题描述】:
假设您有一个有向图,其非负整数边长在 0 到 U - 1 的范围内(包括 0 到 U - 1)。计算该图的最小生成树的最快算法是什么?我们仍然可以使用现有的最小生成树算法,例如 Kruskal 算法 O(m log n)) 或 Prim 算法 (O(m + n log n))。但是,对于 U 很小的情况,我认为应该可以做得更好。
是否有任何算法能够与更传统的 MST 算法竞争,并且能够利用边缘长度被限制在某个范围内这一事实?
谢谢!
【问题讨论】:
-
长度是否也限制为整数,还是仅限于该范围?
-
@harold- 它们是整数。我会发布更正。
-
几个消息来源提到有一个线性时间算法,但链接到我看不到的东西。
-
如果边缘权重被限制为整数,你可以使用基于哈希表的优先级队列,而不是堆(或任何基于比较的
O(log(n))样式结构)。像往常一样使用哈希队列,所有具有相同整数成本的项目都放在同一个桶中,您可以获得最坏情况下的O(1)操作。我认为这会从您提到的算法中删除O(log(n))复杂性,留下类似O(m + n)... -
@DarrenEngwirda 就在这里 - 如果 U 通常很小,您可以在线性时间内进行分桶,然后通过从最低权重桶添加一条边来添加扫描,当且仅当它连接一个新顶点时.出色的(在改进和简单方面)优化。
标签: algorithm integer minimum-spanning-tree