我正在尝试基于具有特殊要求的AVL树创建一些排名树,假设我有带节点的AVL树,每个节点有2个字段:
id, priority
我的AVL树按id排序,我也有一个功能:
foo(currentId, delta)
通过currentId
降低所有ID的优先级,该优先级小于或等于delta
这个函数必须使用复杂度O(log n),
所以我的问题是我需要存储哪些附加信息才能在任何阶段highest priority
使用with complexity O(1)
弹出节点(在使用foo之后!)。
P.S.
我尝试在右子树中存储有关最高优先级的信息,在左子树中存储最高优先级,但在foo
之后需要进行大量更改。它将需要的不仅仅是O(log n)。提前感谢有关树木的任何好主意或好书。
答案 0 :(得分:1)
不是存储每个子树中出现的最大优先级,对于具有父p的每个节点c,不要存储c的子树中最大优先级之间的差异和p子树中的最大优先级。这样,您可以在O(log n)时间内更新一系列优先级,并且仍然可以在O(log n)时间内找到最大优先级元素。