使用数组的Prims的复杂性

时间:2016-10-14 18:37:14

标签: algorithm time-complexity graph-algorithm prims-algorithm

使用Array和Adjacency List的Prims算法的复杂性是:

  

V^2 + V + 2E + E = O(V^2)

但是,我不记得为什么E

1 个答案:

答案 0 :(得分:2)

使用图表表示的邻接列表结构和优先级队列的数组的复杂性是Θ(| V | 2 + | E |)。对于没有平行边的图,这是Θ(| V | 2

Prim的算法在 | V | 迭代中起作用,生成一个从大小为1开始并以大小 | V | 结尾的树。比如说,在某个迭代中,顶点 v 被添加到树中,并且 E(v)是从 v 发出的边缘。对于每个这样的边,我们可以在数组中找到邻居,并将当前树中某个顶点的最亮距离更新到它。查找顶点 v 需要时间Θ(| V |),因为我们必须扫描数组以找到最小值(这是优先级队列的低效实现)。

总而言之,每个边沿在每个方向上被访问一次(因此Θ(| E |),并且 | V | 迭代中的每一个都执行Θ (| V |)扫描数组。

请注意,对于问题中的表达式 V ^ 2 + V + 2E + E ,重要的是要记住上下文是对增长顺序的考虑。因此,对于 2E 没有多大意义(2代表什么?在边缘上迭代两次?每条边的CPU指令数?)或实际上对于 2E + E 。这些只是模糊的简写符号,有时用于表示算法中的各个阶段。