更改 O(log(n)) 复杂度中二进制堆元素的优先级
changing priority of binary heap elements in O(log(n)) complexity
我写了一个存储优先级类的二进制堆(私有成员是PRIORITY和KEY)。 我想知道当给出变量的 KEY 时,我如何以低于 O(n) 的复杂度更改堆元素的优先级。 提前致谢
解决此问题的一种方法是使用另一种结构(我称之为辅助数据结构)。例如,将键映射到二进制堆中的元素的哈希映射(例如unordered_map)。使用此数据结构来查找堆中的哪个元素需要修改其优先级。修改元素的优先级后,需要对其执行一个sink
和一个sift
操作。这两个操作都有复杂性O(log(n))
因此总体而言,优先级的修改具有复杂性O(log(n))
。在这里,我假设您使用了一个辅助数据结构,该结构支持在复杂度不超过 O(log(n))
中按键查找(在哈希映射的情况下,复杂度为 O(1))。
请注意,您必须修改已为二进制堆实现的操作,以使辅助数据结构与二进制堆保持同步。
相关文章:
- 如何在 c++ 中创建对的优先级队列.这会弹出具有最小值的元素.默认的弹出最大值
- 优先级队列(使用 pairs<int,int> ) 根据 for 循环迭代器的顶级元素
- 为具有可变元素(C++)的优先级队列确定最佳ADT
- 正在提取优先级队列的最后一个元素
- 当我插入元素时,C 优先级队列会崩溃
- 提升优先级队列,查看元素是否已在队列中
- 如何在不遍历优先级队列的情况下获取该队列的最后一个元素
- 我如何实现 N 选择 K,允许元素重复,并对具有重复元素的输出进行低优先级
- 如何删除C++中优先级最低的元素
- 创建包含唯一元素的优先级队列
- 更改 O(log(n)) 复杂度中二进制堆元素的优先级
- 在 C++11 中的优先级队列中查找并访问该元素
- 具有相同优先级的元素的最小堆插入
- 如何保持按第二个元素排序的对的优先级队列?
- 当对head元素使用引用时,C++优先级队列的行为更为恶劣
- 反转优先级队列中元素的顺序
- 如何在boost c++中操作优先级队列中的元素
- 尝试将元素从Map复制到兼容优先级队列时出现无效堆错误
- Boost:优先级队列,支持在O(log n)时间内找到元素
- 一旦满足指定容量,覆盖优先级队列末尾的元素