问题标签 [max-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 回答
54 浏览

c++ - 我写了一个 max_heapify 代码,但它没有提供所需的结果

我将堆大小设为 14,因为它是数组的初始大小,我正在做从算法 clrs 介绍开始的问题 6.2-1。我没有其他一些辅助功能,例如交换或“打印数组”

我对堆大小不是很清楚

0 投票
3 回答
12208 浏览

c++ - C++标准库中有maxheap吗?

我知道这个std::priority_queue类实现了一个 minheap。有没有办法将它用作最大堆?还是有替代的 Maxheap 结构?我知道我可以在带有 lambda 的std::make_heap()函数上使用该函数std::vector来创建我自己的 Maxheap,但随后使用诸如std::pop_heap()奇怪的函数,我认为它们不容易使用。应该有一种更简单的方法,就像我认为的 min_heap(priority queue) 一样。

0 投票
1 回答
338 浏览

javascript - javascript中的最大堆?

我正在尝试编写用于在 javascript 中创建最大堆的函数我当前的代码是

它给出的输出是

[ 5 ]
交换9--5
[ 9, 5 ]
交换6--5
[ 9, 6, 5 ]
交换7--6
[ 9, 7, 5, 6 ]
[ 9, 7, 5, 6, 1 ]
[ 9, 7, 5, 6, 1, 3 ]
交换8--6 交换
8--7
[ 9, 8, 5, 7, 1, 3, 6 ]

不知道我在这里做错了什么,有人可以指出我的逻辑错误吗?

预期输出:最大堆 [9,7,8,5,1,3,6]

0 投票
0 回答
84 浏览

c++ - 我的下堆功能有问题

我正在尝试为我的堆编写一个向下堆函数,但它一直卡在无限循环中,我不知道为什么。另外,我不确定如何制作它,因此它不会检查我最后一个变量之外的内容,这是我认为的问题的一部分

这是卡住的地方 else if(2*i+1 <= last&& arr[2*i+1]!=0 && 2*i > last)

这是就我得到 -1 删除 0 停止: -1 删除 8 7 1 6 4 3 2 5 -1 删除 0 停止: -1 删除 7 6 1 2 4 3 5 -1 删除 0 到停止:-1

0 投票
2 回答
94 浏览

c# - ConcurrentHeap 实现中的问题

这是我的 MaxHeap 实现。大多数时候它可以工作,但偶尔它只会导致一些值乱序。我希望它是线程安全的。多次尝试调试,但无法确定问题所在。谁能指出我实施中的问题?

我将LanguageExt.Core用于一些功能性的东西。主要是Option,Some,None。

我将计数分开保存,以便读取CountIsEmptyIsFull是原子操作。

0 投票
1 回答
78 浏览

java - 最大堆插入和排序 Java

我正在尝试构建一个最大堆,并且随着每个新值的插入,该值会向上或向下移动到正确的位置,我还没有实现向下移动功能,所以到目前为止我正在使用一个应该只要求程序向上移动。测试数据按以下顺序输入:

[16、10、14、9、7、1、4、2、8、3]

我在主类中使用以下代码在堆中插入值:

下一段代码是插入和移位发生的地方:

移位功能是 siftUp() 我认为这是问题所在。当程序使用这些输出运行时:

但这是不正确的,因为 1)最后的索引超出范围异常来自 printHeap() 函数和 2)每个父节点的子节点不在正确的位置,因为根节点应该是 16以 14 和 10 作为孩子,当它打印出堆的值时,它打印出 0 但是 0 永远不会插入到堆中。我已经尝试过自己进行一些调试,但没有太大成功,因此欢迎提供任何帮助。

0 投票
1 回答
86 浏览

max - 您将使用哪些操作来实现具有入队和出队的优先队列 PQ?

假设您正在实现一个优先队列 PQ,它在出队操作时返回最大元素。如果我们使用最大堆来实现 PQ,入队是 O(______) 操作,出队是 O(____) 操作

有人可以回答/解释你是如何得到它的......我在想两者都登录但不确定?

0 投票
1 回答
56 浏览

algorithm - 绘制二项式堆

有人知道如何为值 1-10 绘制二项式最大堆吗?我目前正在我的数据结构课程中学习堆,但是在观看了多个视频后,我仍然无法理解!而且我不确定我是否做得对。

我知道二项式堆与他们过去的堆有关,但我特别卡在最大堆上。我希望通过绘制它并看到最终结果,我将有一个更好的理解。

这是我的实现(每个“返回”都是一个新级别

10

9 8 6(所有 3 个数字都连接到 10)

7 5 4(7 连接到 8、5 和 4 连接到 6)

2 1 3(2 接 7、1 接 5、3 接 4)

我不确定将 1 和 2 放在哪里。

请让我知道我是否应该以某种方式改进我的问题以及是否需要。谢谢!

0 投票
1 回答
286 浏览

heap - 从最大堆中提取根

我正在努力编写一个递归算法来从最大堆中提取最大(根)。堆被构造成一棵树。我知道我应该用根交换最后一个节点并递归地向下推它。但是互联网上没有伪代码或堆栈溢出来处理树。我见过的提取算法是基于数组的。

所以假设我找到了最合适的叶子。

您有什么可以建议的解决方案吗?


我做了一个这样的函数调用

那就是寻找最深右节点的代码。它不工作:D

0 投票
1 回答
656 浏览

java - Java 中的优先级队列(最大堆声明)

我希望在 Java 中创建一个最大堆,但无法理解这一点。谁可以给我解释一下这个

问题:给定一个字符串,根据字符的频率按降序对其进行排序。

输入=“树”

预期输出:“eetr”

所以我需要一个使用优先队列的最大堆,但我不明白这段代码是如何工作的。优先队列的声明是如何工作的?

所以想知道这是怎么回事

事情适用于制作优先队列。