如何使用堆优化Prim的最小生成树算法?

问题描述 投票:0回答:3

我必须解决这样的问题:我得到的数字N代表我拥有的分数。每个点都有两个坐标:X和Y。

我可以通过以下公式找到两点之间的距离:abs(x2-x1)+ abs(y2-y1),(x1,y1)是第一点的坐标,(x2,y2)是第二点的坐标,abs()是绝对值。

我必须找到最小的生成树,这意味着我必须将所有点连接在一起,并且边的总和必须最小。 Prim的算法很好,但是太慢了。我读到我可以使用heap使其更快,但是我没有找到任何文章解释该操作。

任何人都可以向我解释Prim的算法如何与堆一起使用(请提供一些示例代码,但并非必须)?

algorithm graph-theory minimum-spanning-tree
3个回答
1
投票

可以有效地(在O(n log n)时间内解决此问题,但这不是那么容易。仅将Prim的算法与堆配合使用是没有帮助的(实际上会使它变得更慢),因为它的时间复杂度为O(E log V),在这种情况下为O(n^2 * log n)


0
投票

摘自Prim's algorithm上的Wikipedia文章:


0
投票

虽然有人指出,带有堆的Prim's是O(E log V),在最坏的情况下为O(n ^ 2 log n),但我可以提供在最坏情况之外的情况下使堆更快的原因,因为尚未得到答复。

© www.soinside.com 2019 - 2024. All rights reserved.