c – 堆红还是红黑树?

我愿意使用数据结构作为恒定空间的溢出缓冲区.我想要有效的插入,但最重要的是有效地删除最小元素.我正在考虑使用堆,因为我有O(log(n))find_min()和log(n)插入和删除.另一方面,我知道与红黑树相比并不了解优势,因为它也有O(log(n))插入和删除,而O(1)找到最小/最大.而排序输出的优点(我不在乎).

问题涉及:Is a red-black tree my ideal data structure?

既然我有两个可用的std :: map和boost :: heap的结构,为什么我更喜欢使用堆而不是红黑树?
最后,使用红黑树,我也有一个入口的O(log(n))搜索时间,而对于堆,时间是O(n),这是重要的,因为存在重复.

解决方法

区别在于如何使用结构.

>二进制堆是用于插入值和检索最小值的非常快的数据结构.但是,它们不支持有效搜索删除随机值.
>红/黑树是平衡的二叉搜索树,支持有效插入,删除,查找任意值,以及(合理快速)查找最小值.但是,与二进制堆相比,它们有很多开销.

如果你需要的是插入,find-minimum和remove-minimum,那么二进制堆可能是一个很好的选择,因为开销较低,运行时应该更快.如果您需要插入和删除任意值或查找任意值,则红/黑树可能是更好的选择.与所有工程一样,选择正确的数据结构都是关于权衡.

另外,请注意,如果需要二进制堆,可以使用std :: priority_queue;你不需要使用Boost.也不能保证std :: map是一个红色/黑色的树;它可能是某种平衡的BST,但它可以使用一些其他算法来平衡.

希望这可以帮助!

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...