如果我有一个最大堆,并且如果我需要更改max元素,那么它归结为单个冒泡算法.有没有办法通过C++标准库来做到这一点,而无需手动编写算法?
我知道它应该等同于pop_heap + push_heap,但是这是2次冒泡操作而不是一次.
那么 - 这个通过库API公开的泡泡算法是什么?
我有一个堆使用std::make_heap:
std::vector<int> v{1,2,3,5,9,20,3};
std::make_heap(v.begin(), v.end());
Run Code Online (Sandbox Code Playgroud)
现在我通过更改一个随机元素来更新堆:
v[3] = 35;
Run Code Online (Sandbox Code Playgroud)
是否有标准库的方式,才能把再次调整堆O(log n)时间,其中n是容器的大小。基本上我正在寻找 heapify 功能。我知道改变了什么元素。
我明白std::make_heap是O(n log n)时候了。我也遇到了重复的问题,但这在某种意义上是不同的,因为它正在改变最大元素。因为该解决方案已经给出了O(log n)该问题的复杂性。
我正在尝试更改堆中的任何随机元素。