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的结构,为什么我更喜欢使用堆而不是红黑树? 解决方法
区别在于如何使用结构.
>二进制堆是用于插入值和检索最小值的非常快的数据结构.但是,它们不支持有效搜索或删除随机值. 如果你需要的是插入,find-minimum和remove-minimum,那么二进制堆可能是一个很好的选择,因为开销较低,运行时应该更快.如果您需要插入和删除任意值或查找任意值,则红/黑树可能是更好的选择.与所有工程一样,选择正确的数据结构都是关于权衡. 另外,请注意,如果需要二进制堆,可以使用std :: priority_queue;你不需要使用Boost.也不能保证std :: map是一个红色/黑色的树;它可能是某种平衡的BST,但它可以使用一些其他算法来平衡. 希望这可以帮助! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |