gpt4 book ai didi

algorithm - 如何为 Prim 算法更新堆中的元素优先级?

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:24:41 25 4
gpt4 key购买 nike

我正在研究 Prim 算法。代码中有一部分穿过切割的下一个顶点将进入属于 MST 的顶点集。在这样做的同时,我们还必须“更新另一组中与离开顶点相邻的所有顶点”。这是 CLRS 的快照:

enter image description here

有趣的部分在于第 1 行。 11. 但是因为我们在这里使用堆,所以我们只能访问最小元素,对吧 (heap[0])?那么我们如何从堆中搜索和更新顶点,即使它们不是最小的顶点,因此除了通过线性搜索之外我们知道它们在哪里?

最佳答案

可以构建支持称为decrease-key 操作的优先级队列,该操作采用优先级队列中现有对象的优先级并将其降低。现有库附带的大多数版本的优先级队列不支持此操作,但可以通过多种方式构建它。

例如,给定一个二叉堆,您可以维护一个辅助数据结构,将元素映射到它们在二叉堆中的位置。然后,您将更新二进制堆实现,以便每当执行交换时,都会更新此辅助数据结构。然后,为了实现 decrease-key,您可以访问表,找到节点在二叉堆中的位置,然后继续冒泡步骤。

其他基于指针的堆,如二项式堆或 Fibonacci 堆明确支持此操作(Fibonacci 堆是专门为此设计的)。您通常有一个从对象到它们在堆中占据的节点的辅助映射,然后可以重新连接指针以在堆中移动节点。

希望这对您有所帮助!

关于algorithm - 如何为 Prim 算法更新堆中的元素优先级?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17075497/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com