17得票4回答
我能否基于深度优先顺序而不是广度优先顺序为完全树提供类似堆的连续布局?

堆是一种经典的数据结构,将完全二叉树(或广义版本的d-ary树)放入连续的数组中,以广度优先遍历顺序存储元素。通过这种方式,树中同一层级的所有元素都按顺序相邻地存储。 我正在实现一种数据结构,它在底层是一个固定程度d的完全平衡树,并且我想将树以连续形式存储,以释放节点指针的空间。所以我想把节...

22得票5回答
为什么C++中的堆被实现为算法而不是容器?

我想知道为什么堆概念被实现为算法(make_heap, pop_heap, push_heap, sort_heap)而不是容器。我特别感兴趣的是,有人的解决方案是否能够解释为什么set和map是容器,而不是类似于算法集合(make_set add_set rm_set 等)。

25得票2回答
.NET中的堆类

可能重复: 在C#中有类似堆的类吗? .NET中是否有像堆这样的类? 我需要一种集合,可以从中检索最小元素。 我只需要3种方法: Add() RemoveMinElement() GetMinElement() 我不能使用排序列表,因为键必须唯一,并且我可能有多个相同的元素。

25得票2回答
在C++中有简单的方法制作小根堆吗?

我对C++很陌生,不知道是否有一种方式可以使用标准库在C++中创建一个小根堆。

9得票2回答
使用STL堆实现O(logn)时间复杂度下的“减小关键字(Decrease Key)”操作

目前STL堆不支持降低关键字的操作,但可以直接更改向量上的值,并再次调用make_heap函数,这需要O(n)的时间。但是这不如使用二叉堆的降低关键字操作高效,后者只需O(logn)的时间。 是否有一种方法可以使用STL堆函数实现O(logn)的时间复杂度呢?

8得票2回答
优先队列 - 跳表 vs 斐波那契堆

我有兴趣实现一个优先队列,以实现高效的Astar算法,并保持相对简单(我的意思是优先队列要简单)。由于跳表提供了一个简单的O(1)提取最小操作和一个O(Log N)插入操作,所以它似乎可以与更难实现的Fibonacci堆竞争,后者具有O(log N)提取最小和O(1)插入。我认为跳表适用于稀疏...

13得票2回答
为什么使用关键函数会慢那么多?

在使用heapq.nlargest中的keyfunc时,性能会急剧下降。>>> from random import random >>> from heapq import nlargest >>> data = [random() fo...

20得票3回答
使用STL来维护小根堆的简便方法是什么?

对于用户自定义的结构体,我了解到很容易实现。只需要重载运算符<即可。但是对于int/float等基本类型,我真的需要重载运算符<吗?以下是我的尝试: #include <iostream> #include <algorithm> ...

47得票7回答
如何在Python的heapq中实现降低关键字功能?

我知道可以用 O(log n) 的时间复杂度实现 decrease-key 功能,但是我不知道怎么做?

46得票10回答
有没有一个固定容量且具有自定义比较器的优先队列实现?

相关问题: Java PriorityQueue with fixed size 如何使用PriorityQueue? 获取数组中N个最小元素的索引 Scala:是否有一种像Java中那样使用PriorityQueue的方法? 我有一个非常大的数据集(超过500万个项目),我需要从中获...