Dijkstra 的斐波那契堆来自 Java
Fibonacci Heap for Dijkstra via Java
我想在 Dijkstra 算法上实现 Fibonacci 堆。我将此代码用于 Fibonacci 堆。
http://keithschwarz.com/interesting/code/?dir=fibonacci-heap
问题是如何调用方法:decreaseKey?它总是给我提示 (entry,double)。但是如何写条目呢?下面是一个简单的例子,问号怎么填?
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);
decreaseKey()
期望第一个参数是 FibonacciHeap.Entry
类型。 class return 堆的 Entry
中的 3 个方法:
public Entry<T> enqueue(T value, double priority);
public Entry<T> min();
public Entry<T> dequeueMin();
3 种方法中的每一种 return 一个不同的元素,并以自己的方式修改堆。根据您的用例,您可以将这些 Entry
存储在一个变量中并将其传递给 decreaseKey()
.
一个这样的情况是在排队时存储 Entry
。每当你 enqueue()
一些东西到堆中时,它 return 就是它对应的 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);
我想在 Dijkstra 算法上实现 Fibonacci 堆。我将此代码用于 Fibonacci 堆。 http://keithschwarz.com/interesting/code/?dir=fibonacci-heap 问题是如何调用方法:decreaseKey?它总是给我提示 (entry,double)。但是如何写条目呢?下面是一个简单的例子,问号怎么填?
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);
decreaseKey()
期望第一个参数是 FibonacciHeap.Entry
类型。 class return 堆的 Entry
中的 3 个方法:
public Entry<T> enqueue(T value, double priority);
public Entry<T> min();
public Entry<T> dequeueMin();
3 种方法中的每一种 return 一个不同的元素,并以自己的方式修改堆。根据您的用例,您可以将这些 Entry
存储在一个变量中并将其传递给 decreaseKey()
.
一个这样的情况是在排队时存储 Entry
。每当你 enqueue()
一些东西到堆中时,它 return 就是它对应的 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);