8得票3回答
如何创建堆?

假设我有一个像下面这样的堆: 77 / \ / \ 50 60 / \ / \ 22 30 44 55 现在,我想将另一个项目55插入到这个堆中。 如何操作? 选项1。 77 / \ ...

19得票3回答
将最大堆转换为二叉搜索树

我们有一个包含 2m - 1 个不同可比较的元素的数组,索引从 1 开始。 我们可以将这个数组看作一棵完全二叉树:Node is placed at index i. Left child is placed at 2i. Right child is placed at 2i+1. 例如,...

7得票4回答
如何在线性时间内构建具有自定义比较器的优先队列

在PriorityQueue的构造函数中,我们可以传递像List或Set这样的集合,以线性时间构建PriorityQueue。 但是,这也意味着PriorityQueue将使用默认比较器。 我想使用自己的比较器,这样我就可以拥有不同于最小堆的东西。 我能想到的唯一方法是将集合包装在Sorte...

15得票4回答
什么是适用于队列的正确数据结构,支持O(1)时间的最小值和最大值操作?

什么是支持Enque、Dequeue、Peak、Min和Max操作并且所有这些操作的时间复杂度均为O(1)的队列的正确数据结构。 最显然的数据结构是链表,但是Min、Max操作将会是O(n)。优先队列是另一个完美的选择,但是Enqueue、Dequeue应该按照队列(FIFO)的正常方式工作...

84得票6回答
优先队列和堆的区别

看起来优先队列只是一个带有正常队列操作(例如插入、删除、取顶等)的堆。这是正确解释优先队列的方式吗?我知道可以用不同的方法构建优先队列,但如果我要从一个堆中构建优先队列,是否需要创建一个优先队列类并给出构建堆和队列操作的说明,或者不需要构建类呢? 我的意思是,如果我有一个构建堆的函数和插入、删...

59得票11回答
“a”堆和“the”堆之间的关系是什么?

堆(Heap)是一种树形数据结构,其中树的高层次总是包含比低层次更大(或更小,如果设置为这样)的值。"The" 堆是程序用于动态分配的一堆空闲 RAM。虽然它们都被称为 "堆",但它们之间有什么关系呢?

16得票3回答
C++重载数组运算符

我正在创建一个堆,就像这样:struct Heap { int H[100]; int operator [] (int i) { return H[i]; } //... }; 当我尝试从中打印元素时,我会这样做:Heap h; // add some ele...

23得票8回答
如何在Python中维护堆中的字典?

我有一个如下的字典:{'abc':100,'xyz':200,'def':250 .............} 这是一个以实体名称为键,值为实体计数的字典。我需要从字典中返回前10个元素。 我可以编写一个堆来完成,但我不确定如何进行值到键的映射,因为某些值将相等。 是否有其他数据结构可以做...

23得票2回答
Dijkstra算法。使用最小堆作为最小优先队列。

我正在阅读《CLRS第三版》中关于Dijkstra算法的内容(第662页)。以下是书中的一段我不理解的部分: 如果图足够稀疏 - 特别是,E = o(V^2 / lgV) - 我们可以通过使用二进制最小堆实现min-priority队列来改进算法。 为什么图应该是稀疏的? 这...

60得票4回答
如何实现基于最小堆的优先队列中O(logn)的减少关键字操作?

我正在开发一个演示 Djikstra 算法 的应用程序,为了使用它,当元素的值减少时,我需要恢复堆的属性。 关于复杂性问题,当算法改变元素的值时,该元素在内部结构(在这种情况下是堆)中用于优先级队列的索引是未知的。因此,我目前需要进行 O(n) 搜索,以恢复索引,然后才能对其执行实际的 de...