无常规计数器的胖堆:实现、实验与分析
1. 基本操作分析
1.1 删除操作
当执行删除操作时,被删除元素所在根节点的违规库存排名需要更新。随后,该根节点可被移除,其所有子树会插入到树库存中。树库存中的树数量最多增加 (2 \log_3 n + O(1)),可能需要进行多次树缩减操作。树缩减涉及的元素比较次数最多为 (2 \log_3 n + O(1))。
若删除的元素是最小值,需要扫描所有根节点和违规节点来找到新的最小值,并更新最小指针,这最多需要 (3 \log_3 n + O(1)) 次元素比较。删除操作会使元素数量 (n) 减 1,可能导致违规节点数量超过阈值,此时需要进行违规缩减。总的来说,删除操作执行的元素比较次数最多为 (5 \log_3 n + O(1) \approx 3.16 \lg n),时间复杂度为 (O(\lg n))。
1.2 合并操作
假设要合并的两个队列分别包含 (m) 和 (n) 个元素,且 (m \leq n)。合并操作主要有两个任务:
- 合并树库存 :将较小树库存中的树逐个移动到较大的树库存中,然后通过重复树缩减操作,使树的数量在允许的阈值范围内。此过程涉及的元素比较次数最多为 (2 \log_3 m + O(1))。
- 合并违规库存 :保留两个可调整大小数组中较大的一个作为合并后优先队列的违规库存基础,将另一个数组中的所有违规节点移动到该库存后将其丢弃。每次移动违规节点时,可能需要执行违规缩减,此过程涉及的元素比较次数最多为 (3 \log_3 m + O(1))。
合并操作执
超级会员免费看
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



