Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 从带有“的图形构建MST”;“很少”;线性时间中的边_Algorithm_Minimum Spanning Tree - Fatal编程技术网

Algorithm 从带有“的图形构建MST”;“很少”;线性时间中的边

Algorithm 从带有“的图形构建MST”;“很少”;线性时间中的边,algorithm,minimum-spanning-tree,Algorithm,Minimum Spanning Tree,我参加了一次面试,面试官问了我一个问题: 我们有一个图G(V,E),我们可以使用prim算法或kruskal算法找到MST。但是这些算法没有考虑到G中的“很少”边。我们如何利用这些信息来提高查找MST的时间复杂度?我们能在线性时间内找到MST吗 我唯一记得的是Kruskal的算法在稀疏图中更快,而Prim的算法在真正稠密的图中更快。但我无法回答他如何利用关于边数的先验知识在线性时间内进行MST 任何见解或解决方案都将不胜感激。Kruskal的算法在对边缘进行排序后几乎是线性的。如果使用并集查找结

我参加了一次面试,面试官问了我一个问题:

我们有一个图G(V,E),我们可以使用prim算法或kruskal算法找到MST。但是这些算法没有考虑到G中的“很少”边。我们如何利用这些信息来提高查找MST的时间复杂度?我们能在线性时间内找到MST吗

我唯一记得的是Kruskal的算法在稀疏图中更快,而Prim的算法在真正稠密的图中更快。但我无法回答他如何利用关于边数的先验知识在线性时间内进行MST


任何见解或解决方案都将不胜感激。

Kruskal的算法在对边缘进行排序后几乎是线性的。如果使用并集查找结构(如处理单条边的复杂性),则其顺序为lg*(n),其中n是顶点数,且该函数增长非常缓慢,因此在这种情况下可以将其视为常数。但是,问题是要对边进行排序,仍然需要一个
O(m*log(m))
。其中
m
是边数

Prim的算法将无法利用边缘很少这一事实


您可以使用的一种方法类似于“反向”MST方法,即从所有边开始,删除最长的边,直到图形断开连接。继续这样做,直到只剩下
n-1
边。仍然需要注意的是,只有当要删除的边数
k
足够少,以至于
k*n

对“很少”有明确的含义时,这才比Kruskal好?也许
| E |=O(| V |)
?也许
| E |=| V |+O(1)
?实际上没有。我问了,但他什么也没说。这个问题是CLRS问题23-2“稀疏图上的最小生成树”的主题。谢谢!是的,这很有道理。在删除一条边后,你能解释一下如何使用不相交集数据结构来判断图形是否连通吗。@premktiw我认为你不能使用不相交集来实现这一点,至少我想不出一种从我的头顶上看的方法。不过,在这种情况下,检查并不需要恒定的复杂性。我的假设是我们做一个线性检查来找到最长的边,所以我们也可以做一个线性检查来检查连通性