繁体   English   中英

用两个DFS运行在O(V + E)中找到MST?

[英]Finding MST in O(V+E) with two DFS runs?

给定具有成本x或y边(其中x小于y且均为正整数)的无方向连通图,请找出O(V + E)中的MST

这个想法涉及使用两个DFS运行并将重量更轻的节点折叠成超级节点(在第一次DFS运行之后),但是我不确定。 任何帮助表示赞赏。 我看到这样的解决方案在几个答案中都有提示,但是在任何地方都找不到它的解释。

我认为您的直觉是正确的,可以找到运行时间为O(V + E)的无向连接图的MST。 有一种称为Kruskal的算法,可以计算O(V +Eα(V))中无向图的MST,α(V)是Ackermann函数的逆函数,增长速度非常慢。 Kruskal算法达到O(V +Eα(V))的方式是使用联合查找数据结构。 联合查找是一种数据结构,用于跟踪已划分为不相交的子集的元素。 在此数据结构中搜索元素(find(x))时,将压缩树,以便将根和X之间的每个节点的指针从其父级切换到树的根。 union(x,y)函数使用find来确定节点是否属于同一子集,如果它们是单独的树,则在压缩过程中压缩树,然后将它们合并。 具有较低等级(树的高度)的树被移动以指向较大等级树的根。 Kruskal使用联合查找数据结构检查顶点是否已连接。 通常,Kruskal的工作是将所有顶点添加到联合查找的数据结构中,然后假设它们以递增顺序进行排序,则连续添加最低边。 添加最低边时,请检查顶点是否已连接;如果未连接,请添加该边并在两个顶点之间执行并集。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM