更改 O(log(n)) 复杂度中二进制堆元素的优先级

changing priority of binary heap elements in O(log(n)) complexity

本文关键字:元素 优先级 二进制 复杂度 log 更改      更新时间:2023-10-16

我写了一个存储优先级类的二进制堆(私有成员是PRIORITY和KEY)。 我想知道当给出变量的 KEY 时,我如何以低于 O(n) 的复杂度更改堆元素的优先级。 提前致谢

解决此问题的一种方法是使用另一种结构(我称之为辅助数据结构)。例如,将键映射到二进制堆中的元素的哈希映射(例如unordered_map)。使用此数据结构来查找堆中的哪个元素需要修改其优先级。修改元素的优先级后,需要对其执行一个sink和一个sift操作。这两个操作都有复杂性O(log(n))因此总体而言,优先级的修改具有复杂性O(log(n))。在这里,我假设您使用了一个辅助数据结构,该结构支持在复杂度不超过 O(log(n)) 中按键查找(在哈希映射的情况下,复杂度为 O(1))。

请注意,您必须修改已为二进制堆实现的操作,以使辅助数据结构与二进制堆保持同步。