我想在Dijkstra算法上实现Fibonacci Heap。我将此代码用于Fibonacci堆。 http://keithschwarz.com/interesting/code/?dir=fibonacci-heap 问题是如何调用方法:decreaseKey?它总是给我提示(入门,双)。但如何写一个条目?以下是一个简单的例子,如何填写问号?
FibonacciHeap<Integer> aa = new FibonacciHeap<>();
aa.enqueue(10, 1.01);
aa.enqueue(10, .2);
aa.enqueue(12, 3.2);
aa.enqueue(13, 3.4);
aa.decreaseKey(??????, newPriority);
答案 0 :(得分:0)
decreaseKey()
期望第一个参数为FibonacciHeap.Entry
类型。该类中的3个方法返回堆的Entry
:
public Entry<T> enqueue(T value, double priority);
public Entry<T> min();
public Entry<T> dequeueMin();
3个方法中的每一个都返回一个不同的元素,并以自己的方式修改堆。根据您的使用情况,您可以将这些Entry
存储在变量中并将其传递给decreaseKey()
。
一个这样的情况是在排队时存储Entry
。每当你enqueue()
到堆的东西时,它就会返回相应的Entry
。从其文档:
/**
* Inserts the specified element into the Fibonacci heap with the specified
* priority.
* ...
* @return An Entry representing that element in the tree.
*/
public Entry<T> enqueue(T value, double priority);
您可以存储它,并将其传递给decreaseKey()
。
FibonacciHeap<Integer> aa = new FibonacciHeap<>();
FibonacciHeap.Entry entry = aa.enqueue(10, 1.01);
// ...
aa.decreaseKey(entry, newPriority);