通过Java为Dijkstra提供Fibonacci堆

时间:2017-01-10 17:13:10

标签: java dijkstra

我想在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);

1 个答案:

答案 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);