在最小堆中找到最小元素的时间复杂度是多少?
What is the time complexity of finding the minimum element in a min heap?
我正在阅读本文档中提到的problem m1 (Part-b):
查找二进制最小堆的最小元素需要对数级的时间: T / F ?
应该是正确的,因为当我们构造一个最大堆时,时间复杂度是这里提到的O(logn)
。
同样,如果我构造一个最小堆,它应该是O(logn)
。最小堆类似于最大堆,只是在c++中,默认情况下构造最大堆,我们必须为最小堆编写一个自定义比较器。那么,有什么区别呢?
在最小堆中寻找最小元素的时间复杂度为O(1)
,这是这种容器的主要目的。它实际上是用来在常数时间内找到最小(或最大)的元素。O(logn)
的操作是插入。正如其他人提到的,pop
也是O(logn)
,因为它将删除最小(或最大)元素,然后强制重新排序,以确保新的最小(或最大)元素现在位于堆的顶部。
优先级队列是一个容器适配器,它提供常量时间查找最大(默认)元素,代价是对数插入和提取。
对于所有的意图和目的,最小堆和最大堆是完全相同的东西,除了比较器。事实上,在实践中,最小堆通常是std::priority_queue
,如果你想要一个最大堆,你使用std::less
,如果你想要一个最小堆,你使用std::greater
为Compare
模板参数
template<
class T,
class Container = std::vector<T>,
class Compare = std::less<typename Container::value_type>
> class priority_queue;
相关文章:
- while循环中while循环的时间复杂度是多少
- 函数的时间复杂度是多少?
- 将树节点添加到向量向量中的 n 元树遍历的平均和最坏情况时间复杂度是多少?
- 给定C++代码的时间复杂度是多少?
- 将数组的元素插入映射的时间复杂度是多少?
- 以下递归代码的时间复杂度是多少?
- 在C++中修改字符串的BigO时间复杂度是多少
- 这个算法的运行时间复杂度是多少?你是如何分析的
- 此特定代码的时间复杂度是多少?
- % 运算符的时间复杂度C++是多少?
- 三和算法的时间复杂度是多少
- 以下代码片段的时间复杂度是多少?
- 用于搜索的给定代码的时间复杂度是多少
- std::map的时间复杂度是多少
- 遍历二维数组的时间复杂度是多少
- 这个代码(来自leetcode)的时间复杂度是多少
- 以下代码的时间复杂度是多少
- 这个算法的时间复杂度是多少
- 以下循环的时间复杂度是多少
- 一个清晰的函数的时间复杂度是多少,根据大 O,是 std::map