在Fibonacci Heap中查找操作

时间:2013-06-05 15:03:27

标签: algorithm heapsort fibonacci-heap

我自学Fibonacci Heap时遇到这个问题,现在我知道这是一种有效的数据结构,可以在降低堆中元素的优先级时实现具有摊销O(1)时间复杂度的优先级队列。 然而,根据CLRS教科书,优先级降低操作假定节点保持目标元素是预先知道的。 我很好奇如果不是最小节点,我怎么能有效地获得所需的节点。 一个简单的实现和分析产生O(n)最坏情况时间复杂度来执行Fibonacci堆上的查找操作,与其他操作相比效率较低。 所以我的问题是在Fibonacci Heap中有一个有效的查找操作,还是有必要的?

2 个答案:

答案 0 :(得分:6)

首先,这个结构被设计成一个有效的优先级队列,而不是搜索结构,因此查找操作是O(n)。通常,您知道要更改的确切节点。让我们看一个例子 - Dijkstra的算法。

在每个步骤中,您将图形顶点推送到堆或更改其优先级,以便在顶点中保存指向堆节点的指针。这样做很棒!

所以基本上你会将指针存储到某个节点(你可以将它们存储在一个hashmap或AVL树中)。

答案 1 :(得分:0)

通过HashMap可以解决此问题。整数将保存斐波那契堆的键值,而相应的Node将为其值。因此,删除前无需搜索节点。 Fibonacci堆比高度平衡的二进制搜索树更有效,因为Fibonacci堆需要O(1)的插入时间和O(logN)的删除时间。我希望Fibonacci将取代Linux内核中的Redblack树,甚至取代数据库中的AVL树。