首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于Java的Dijkstra Fibonacci堆

基于Java的Dijkstra Fibonacci堆
EN

Stack Overflow用户
提问于 2017-01-10 17:13:10
回答 1查看 720关注 0票数 0

我想在Dijkstra算法上实现Fibonacci堆。我对Fibonacci堆使用了这段代码。http://keithschwarz.com/interesting/code/?dir=fibonacci-heap问题是如何调用方法: decreaseKey?它总是给我提示(入口,双)。但是怎么写一个条目呢?下面是一个简单的例子,如何填写问号?

代码语言:javascript
复制
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);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-10 17:23:37

decreaseKey()期望第一个参数为FibonacciHeap.Entry类型。类中的3个方法返回堆的Entrys:

  • public Entry<T> enqueue(T value, double priority);
  • public Entry<T> min();
  • public Entry<T> dequeueMin();

这三个方法中的每一个都返回不同的元素,并以自己的方式修改堆。根据用例的不同,可以将这些Entry存储在变量中并将其传递给decreaseKey()

其中一种情况是在对Entry进行排队时存储它。每当您将某物enqueue()到堆中时,它都会返回相应的Entry。从其文件中:

代码语言:javascript
复制
/**
 * 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()

代码语言:javascript
复制
FibonacciHeap<Integer> aa = new FibonacciHeap<>();
FibonacciHeap.Entry entry = aa.enqueue(10, 1.01);
// ...
aa.decreaseKey(entry, newPriority);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41574478

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档