问题标签 [fibonacci-heap]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
879 浏览

java - 将现有的斐波那契堆 Java 实现与 Dijkstra 的最短路径 Java 实现结合使用

使用 java 编程语言,我试图在具有正边成本的图上实现最有效的最短路径算法。据我所知,这将是 Dijkstra 的算法,其中斐波那契堆作为优先队列。如链接中所述,我借用了 Keith Schwarz 的以下 Fibonacci Heap 实现。http://keithschwarz.com/interesting/code/?dir=fibonacci-heap

在我的代码中,我还修改了这个问题中提出的 dijkstra 算法实现,

Java:使用斐波那契堆实现 Dijkstra 算法

这是我根据我的实现更新的dijkstra,

这是我的 Node 和 AdjacentNode 类,

一切都很顺利,直到我想减少下一行中的键,

我面临的问题是vEntry应该是堆中已经存在的节点。但是,我无法从堆中检索此节点,因为我可以考虑检索相邻节点的唯一方法v是使用 node 中的相邻列表u。但是,我错误地将其表示为下一行中的新入口节点,

然而,这将创建一个新的条目来保存我正在寻找的节点,而不是存在于堆中的条目以及我正在寻找的节点。正如预期的那样,这会导致 Null 指针异常。

我无法弄清楚这个问题的解决方案。对于这个堆实现来说,获取与给定节点条目相邻的节点条目是否是不可能的?有人可以帮忙吗?谢谢你。

0 投票
1 回答
32 浏览

data-structures - 斐波那契堆中的 dequeuemin

我想问一下斐波那契堆。如果我有这种情况:

然后,我们再添加两个节点 C 和 D:

现在我们删除 B:

现在我们添加 E 和 F。

我看到它创建了一棵这样的树:

我不明白为什么 E 和 F 与树相连。根据我的阅读,我们连接具有相同等级的树(例如,一个节点的树与另一个节点的树),我错了吗?

非常感谢。

0 投票
1 回答
809 浏览

amortized-analysis - 为什么我们对斐波那契堆进行摊销分析?

在斐波那契堆中,所有操作分析本质上都是摊销的。为什么我们不能像二项式堆那样进行正常分析。

0 投票
2 回答
223 浏览

java - 斐波那契堆是最小堆吗?如何使用 FibonacciHeap 找到最大值?

我的 Java 项目是使用 Max Fibonacci heap 来查找前 n 个最流行的主题标签。记录可以是这样的:

但是斐波那契堆只有 find min 功能。“斐波那契堆”、“最小斐波那契堆”和“最大斐波那契堆”有什么区别?

我的想法是使用函数 extractmax() n 次来获得前 n 次。但我不知道什么是最大斐波那契堆。

0 投票
0 回答
74 浏览

data-structures - 如何找到斐波那契堆的“n”个最大元素?

最大斐波那契堆可以有一个指向结构最大元素的指针。但是我如何找到这些中的“n”?如,我如何找到当前元素之后的下一个最大元素?

一个警告是我不能从结构中删除元素,因为可能会再次查询结构,以获得不同数量的最大元素。例如,我可能一次被要求提供前 3 个元素,然后被询问前 5 个元素。

或者这是否需要删除并重新插入?如果是这种情况,我最好将最大元素存储在堆栈/队列中,然后在我们提供查询后重新插入它们?另外,这不会改变树的结构吗?

0 投票
1 回答
254 浏览

data-structures - 如何使用哈希表跟踪树中的节点?

我正在尝试实现斐波那契堆,并且需要跟踪其节点以进行后续操作。对于初学者来说,斐波那契堆可以被认为是一个 m 度树或树的集合,其指针指向结构中的最大节点。树形结构将一个单词及其频率作为输入,并要求给出最频繁出现的单词作为输出。例如,输入:

我对哈希表的理解非常初级。我输入单词作为键,它给出一个哈希值作为输出。如何强制此输出成为指向树中存储其频率的相应节点的指针?另外,给定一个输入来查找“n”个频繁出现的单词,我可以重复删除顶部节点“n”次并将其重新插入结构中吗?还是我最好保留一个排序的哈希表?

0 投票
0 回答
149 浏览

c++ - 斐波那契堆 - 如何保持指向节点值的指针?

我有一个包含 4 个节点的图,其中邻接矩阵如下: 里面的数字表示权重。

我正在使用斐波那契堆来存储边缘权重。在每次迭代中,我将合并具有最低边权重的节点对,并更新受此过程影响的所有节点的边权重。我正在努力解决如何保留指向所有受影响节点的指针。我知道处理程序,但是..我真的很挣扎。我希望有人能给我一些关于如何实现这一点的指示,请不要对这篇文章投反对票。我已经完成了作业,安装了 boost,设法让一个简单的堆工作。我只是迷失了如何在给定索引的情况下找到堆。

合并后,边权重将更新,合并节点的 id 将更改为 total_number_of_nodes++。

我将每个节点的邻居存储在邻接图中,因此我可以轻松确定哪些节点,因此边缘会受到影响。我现在的主要问题是访问斐波那契堆中的所述节点。

每次执行合并时,我都可以遍历整个堆,但我正在寻找一种更有效的方法

0 投票
1 回答
353 浏览

theory - 斐波那契数列在软件范式中的应用

当我被问及描述斐波那契数列的应用时,我正在接受采访。

我知道斐波那契数列用于某种基准测试,但我想不出真正的软件/计算机应用程序。我试着研究它。我发现它们被用于所谓的斐波那契堆但我找不到任何明显的计算机科学应用程序

请提出您宝贵的建议。

0 投票
0 回答
355 浏览

algorithm - 斐波那契堆如何提高 Prim 算法的效率

我知道 Prim 的算法和斐波那契堆,但我的问题是:斐波那契堆如何提高算法的效率,而不是基于数组列表的最小优先级队列实现

0 投票
1 回答
65 浏览

c++ - 如何在 C++ 中递归调用一个类?

你好这是代码:

在“条目”类中,我想递归调用条目,所以我可以使用:

我知道这在 Java 中有效,但是当我在 c++ 中编译它时,我得到:

有谁知道如何解决这个问题或解决这个问题?