根据我的理解,堆的使用有助于在每次更改值时使用log n
的额外工作来寻找最小值的不变成本。价值变化最多可发生e
次。时间复杂度约为O(e) + O(e log n) = O(e log n)
。
如果是密集图,e = n^2
。
但是,如果我们使用value array
上的线性搜索进行最小搜索,我们将获得O(e) + O(n^2) = O(n^2)
的复杂度,这比密集图的elog n
要好。这类似于我们在prim的MST算法中使用2D数组进行图形表示所得到的结果。
那么为什么我们根据这个特定的算法使用2D数组表示呢?
e
=边数。
n
=节点数。
答案 0 :(得分:2)
你是对的;在密集图上使用Prim的花式堆数据结构是没有意义的。然而,Prim的定义特征并不是尽可能便宜地反复扩展部分MST的想法。
邻接矩阵的意义在于空间(无指针开销)和架构原因(顺序访问通常比随机访问更有效)。