heap相关内容

为什么C++中的优先级队列(最大堆)使用更少的<;T>;而不是更大的<;T>;?

我搞不懂为什么C++中的priority_queue使用less作为默认比较器,并实现最大堆?元素不是按升序排列的吗? 推荐答案 表示一致性。less被用作许多算法和容器的默认比较器,我们普通人类不必尝试和记住哪个默认使用哪个比较器,因为它们都是相同的。 ..
发布时间:2022-09-02 12:38:20 C/C++开发

Heapify函数不提供排序列表

heapq.heapify()如何工作? 我正在尝试使用堆来寻找中位数。 heapify返回排序方式 当我使用heapq.heappush()添加元素时,使用它被插入到列表中。 当我再次调用heapify时,返回的列表未排序。 import heapq l=[5,15,1,3] heapq.heapify(l) print(l) 这给了我[1, 3, 5, 15] 但是当我添加h ..
发布时间:2022-04-11 17:19:28 其他开发

如何在 Python 中实现优先级队列?

很抱歉提出这么愚蠢的问题,但 Python 文档令人困惑...... 链接 1:队列实现http://docs.python.org/library/queue.html 它说 Queue 有一个优先级队列的类.但我找不到如何实现它. 类 Queue.PriorityQueue(maxsize=0) 链接 2:堆实现http://docs.python.org/library/he ..
发布时间:2022-01-21 11:43:20 Python

堆插入的 O(1) 平均情况复杂度的参数

Wikipedia page for binary heaps 声称插入是 O(logn) 在最坏的情况下,但平均为 O(1): 所需的操作数量仅取决于新元素必须上升的层数以满足堆属性,因此插入操作的最坏情况时间复杂度为 O(log n)但平均情况复杂度为 O(1). 链接页面试图证明这一点如下: 但是,平均而言,新插入的元素不会沿树向上移动很远.特别是,假设密钥分布均匀,它有二 ..
发布时间:2022-01-09 12:12:19 其他开发

找出一本大书中最常用的 10 个单词

我知道这已经在论坛上被问过几次,我没有找到任何可以被认为是最合适的解决方案的“标记"答案 - 所以再次询问: 我们从书中得到了一个非常大的文本,所有这些都无法放入记忆中.我们需要找到文本中出现频率最高的 10 个单词.执行此操作的最佳(时间和空间)方式是什么? 我的想法: 将文件分成 k 个大小的块(这样每个块都可以存储在内存中).现在,对每个块执行外部排序.一旦我们在磁盘上有 ..
发布时间:2022-01-08 14:31:27 其他开发

Max-Heapify 中的最坏情况 - 如何获得 2n/3?

在 CLRS,第三版,第 155 页,在 MAX-HEAPIFY 中给出, 子树的每个子树的大小至多 2n/3——最坏的情况当树的底层正好是半满时发生. 我明白为什么当树的底部正好是半满时最糟糕.并且在这个问题中也得到了回答 MAX-HEAPIFY 中的最坏情况:“最坏的情况发生在树的最底层正好是半满" 我的问题是如何获得 2n/3? 为什么如果底层是半满,那么子树的大小就 ..
发布时间:2022-01-05 18:29:00 其他开发

通过指针的堆数据结构

提出一种在满足以下条件的堆中找到最后一个位置的有效方法: 1) 通过指针而不是数组 2) 可以插入或删除节点的位置 我可以在 O(n) 时间复杂度中找到它,但建议使用 O(logn) 或 O(1) 时间复杂度的方法. 解决方案 我正在回答我自己的问题,插入堆时不需要跟踪下一个指针(通过指针堆),甚至不需要跟踪父级,我正在为堆附加运行 Java 代码,所有可能的方法都包含在 ..
发布时间:2021-12-22 08:24:36 其他开发

一棵树的高度的定义是什么?

我似乎无法为此找到明确的答案,我正在尝试对堆进行一些基本的证明,但以下是让我有点失望的原因: 空树有效吗?如果是,它的高度是多少? 我认为这将是 0. 单节点树的高度是多少? 我认为这将是 1,但我已经看到它为 0 的定义(如果是这种情况,那么我不知道如何解释空树). 解决方案 我认为你应该看看 NIST 网站上的算法和数据结构词典.高度定义 表示单个节点的高度为 0. ..
发布时间:2021-12-22 08:20:11 其他开发

是否有斐波那契堆的标准 Java 实现?

我正在研究不同类型的堆数据结构. 斐波那契堆似乎在 (1) 插入、(2) 删除和 (2) 找到最小元素方面具有更好的最坏情况复杂度. 我发现在 Java 中有一个 PriorityQueue 类,它是一个平衡的二进制堆.但为什么他们不使用斐波那契堆? 另外,java.util 中是否有斐波那契堆的实现? 谢谢! 解决方案 不,标准 Java 集合 API 不包含斐波 ..
发布时间:2021-12-22 08:18:08 Java开发

堆树中的第 K 个元素

我有一个堆(像二叉树一样实现:每个节点有两个指向子节点的指针和一个指向父节点的指针). 鉴于其中的元素数量,如何找到第 k 个元素(以 BFS 顺序)?我认为它可以在 O(logn) 时间内完成.. 解决方案 (我假设“第 k 个元素(以 BFS 顺序)"是指从上到下的角度的第 k 个元素,从左到右扫描输入.) 既然你知道一个二叉堆是一棵完全二叉树(除了最后一层),你知道这棵树 ..
发布时间:2021-12-22 08:14:05 其他开发

如何让 heapq 评估特定属性的堆?

我希望保存一堆对象,而不仅仅是数字.它们将具有堆可以排序的整数属性.在python中使用堆的最简单方法是heapq,但是在使用heapq时如何告诉它按特定属性排序? 解决方案 heapq 以与 list.sort 相同的方式对对象进行排序,因此只需定义一个方法 __cmp__() 在您的类定义中,它将自身与同一类的另一个实例进行比较: def __cmp__(self, other):返 ..
发布时间:2021-12-22 08:11:04 Python

合并两个最大堆的算法?

是否有一种有效的算法来合并存储为数组的 2 个最大堆? 解决方案 这取决于堆的类型. 如果它是一个标准堆,其中每个节点最多有两个子节点,并且叶节点最多位于两个不同的行上,那么对于合并,您将无法获得比 O(n) 更好的方法. 只需将两个数组放在一起并从中创建一个新的堆,该堆需要 O(n). 为了获得更好的合并性能,您可以使用另一种堆变体,例如 Fibonacci-Heap, ..
发布时间:2021-12-22 08:08:16 其他开发

“a"和“a"之间的关系是什么?堆和“the"堆?

堆是一种树数据结构,其中树的较高级别总是包含比较低级别更大(或更少,如果这样设置的话)的值.“堆"是程序可用于动态分配的一堆空闲 RAM.它们都被称为“堆",但是一个和另一个有什么关系? 解决方案 老实说,没什么.我可以想象 heap 这个词只是简单地与它的日常(非技术)用法一起使用,并作为相当好的类比单独应用于这两个概念. 在第一种情况下(树数据结构的含义),描述 heap 是最合 ..
发布时间:2021-12-21 09:55:49 其他开发

在 O(K*log(K)) 中打印给定堆中最大的 K 个元素?

鉴于以下问题,我不完全确定我当前的解决方案: 问题: 给定一个包含 n 个元素的最大堆,它存储在一个数组 A 中,是否可以打印所有最大的 K 个元素在 O(K*log(K)) 中? 我的回答: 是的,因为搜索元素需要 O(log(K)) ,因此这样做 对于 K 元素需要 O(K * log(K)) 运行时间. 解决方案 这在最大堆中是可能的,因为您只是从树中打 ..
发布时间:2021-12-20 14:00:17 其他开发

O(klogk) 时间算法从二叉堆中找到第 k 个最小元素

我们有一个 n 节点的二进制堆,其中包含 n 个不同的项目(根中最小的项目).对于k,找到一个O(klogk)时间算法从堆中选择kth个最小元素. O(klogn) 是显而易见的,但无法找出 O(klogk) 之一.也许我们可以使用第二个堆,不确定. 解决方案 嗯,你的直觉是对的,我们需要额外的数据结构来实现 O(klogk) 因为如果我们只是在原始堆上执行操作,术语 logn 将保 ..
发布时间:2021-12-20 13:52:22 其他开发

是否有具有固定容量和自定义比较器的 PriorityQueue 实现?

相关问题: 固定大小的 Java PriorityQueue 如何使用 PriorityQueue? 获取数组中 n 个最小元素的索引 Scala:是有没有办法像在 Java 中一样使用 PriorityQueue? 我有一个非常大的数据集(超过 500 万个项目),我需要从中获取 N 个最大 的项目.最自然的方法是使用堆/优先级队列仅存储前 N 个项目.JVM(Scala/Ja ..
发布时间:2021-12-07 13:03:33 Java开发

从整数流中查找运行中位数

可能的重复: C 中的滚动中值算法 鉴于整数是从数据流中读取的.以有效的方式查找到目前为止读取的元素的中位数. 我读过的解决方案:我们可以在左侧使用最大堆来表示小于有效中位数的元素,在右侧使用最小堆来表示大于有效中位数的元素. 处理传入的元素后,堆中元素的数量最多相差1个元素.当两个堆包含相同数量的元素时,我们将堆的根数据的平均值作为有效中位数.当堆不平衡时,我们从包含更多元素 ..
发布时间:2021-12-06 19:45:19 其他开发