【问题标题】:Is the complexity of prim's MST algorithm by adjacency matrix same as that of adjacency list with linear search?prim 的邻接矩阵的 MST 算法的复杂度与线性搜索的邻接列表的复杂度相同吗?
【发布时间】:2016-03-29 02:52:54
【问题描述】:

根据我的理解,堆的使用有助于通过每次更改值时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 数组进行图形表示。 那我们为什么要为这个特定的算法使用二维数组表示呢?

e = 边数。

n = 节点数。

【问题讨论】:

    标签: algorithm graph time-complexity minimum-spanning-tree prims-algorithm


    【解决方案1】:

    你是对的;在密集图上为 Prim 使用花哨的堆数据结构是没有意义的。然而,Prim 的定义特征与其说是堆,不如说是尽可能廉价地重复扩展部分 MST 的想法。

    邻接矩阵的意义在于空间(无指针开销)和架构原因(顺序访问通常比随机访问更有效)。

    【讨论】:

    • 我的问题是关于邻接矩阵与邻接列表的使用。在我看来,在 Prim 的 MST 算法中使用线性搜索 + 邻接表的复杂性与使用邻接矩阵方法(均为 n^2)渐近相同。那我们为什么要使用邻接矩阵呢?如果问题似乎不清楚,请提出任何更改。编辑:对不起,误解了你的答案。在密集图的情况下,您指的是邻接列表+线性搜索,对吗?
    • @aste123 好的,扩展我的答案。
    • 好的,谢谢。知道了。所以,如果是稀疏图,我们当然可以通过使用邻接表+堆来获得更好的时间复杂度。对于密集的邻接列表+线性搜索和邻接矩阵+线性搜索,两者都渐近地给出相同的复杂度,但邻接矩阵有助于没有指针开销等,因此这是首选。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-19
    • 1970-01-01
    • 2023-03-21
    • 1970-01-01
    • 2012-10-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多