给定一个加权的,连通的,简单的无向图G,每条边上的权重仅为1和2,在O(V + E)中找到G的MST。 有什么想法吗?
对于问题的措辞表示歉意,我尽力尽力翻译。
答案 0 :(得分:3)
在Prim's algorithm中,您需要一种存储活动边缘的方法,以便您可以访问和删除权重最低的边缘。
通常有很多种权重,某些heap data structure用于存储边缘。
但是,在这种情况下,权重为1或2,因此您可以简单地将边缘存储在2个单独的列表中,一个用于权重为1的边,另一个用于权重为2的边。
要查找权重最低的边,您只需从第一个列表中选择一个,除非它是空的,在这种情况下,您从第二个列表中取一个边。
从列表中访问和删除元素是O(1),因此Prim的算法将在O(V + E)中运行。
答案 1 :(得分:1)
当边有任意权重时,Prim算法计算最小生成树。
Prim的算法通过从某个任意节点开始进行一种广度优先搜索,并将边缘保持在优先级队列中来工作。它不断提取最低权重边缘并丢弃它而不扩展搜索(如果边缘通向树中已有的节点)或将其添加到结果中,在树中标记其相反节点,并扩展搜索。
以我刚才解释的天真的方式完成,Prim的算法由优先级队列中的|E|
边缘入队和出列的成本所支配。每个入队/出队都需要O(log |E|)
时间,因此总渐进成本为O(|E| log |E|)
时间,或者更合适的是O(|E| log |E| + |V|)
。
如果我们有一些方法可以在恒定的时间内排队和出队,那么总的运行时间将为O(|E| + |V|)
......