“Treap按搜索键形成 BST,并以独立随机优先级保持期望平衡;优先级不属于输入几何坐标。PST 的 y 是数据本身,堆序用于范围剪枝,而平衡来自 x 中位分解,不是随机性。”
双重不变量 ​
每个不同键
split
期望深度证明 ​
在排好序的键
三键例子 ​
键
随机性边界 ​
期望不等于每次高度都对数;小概率仍可形成链。若对手能预知或挑选优先级,独立排列论证失效。用键哈希生成确定性优先级时,要说明哈希种子是否隐藏及碰撞 tie-break;重复键可用 multiplicity 或
Split/Merge 正确性 ​
Split 在根键不大于阈值时递归切右子树,并把返回的左部分接回根右侧;反之对称切左子树。归纳假设保证两棵返回树内部仍满足键序和优先级堆序,根与未改子树关系也未变。Merge 选择优先级较小的根,并只递归合并它朝另一树的一侧;前提“左树所有键小于右树”不可省略。
随机优先级应在键第一次插入时固定。每次访问或旋转重抽优先级会改变分布并破坏持久身份;删除后重新插入是否沿用旧优先级也需按应用的随机模型约定。
插入的状态变化 ​
插入键 5、随机优先级 17 时,先按 BST 规则落到键序位置。若父键 7 的优先级为 23,旋转使 5 上升;若新父键 3 的优先级为 11,则停止。每次旋转同时保留中序键序和最小堆序,故不需要在两个不变量之间二选一。
等价地,可执行以下分裂—合并过程:
split(T,5)得到键小于 5 的与不小于 5 的 ; - 新建单节点
,检查其优先级未与现存键冲突; - 先
merge(L,x),再与合并; - 每次 merge 选择优先级较小的根,并递归处理唯一一侧。
期望高度来自随机优先级诱导的随机排列,对固定输入键集合取期望。对手若能看到优先级后再选择键或优先级碰撞采用有偏规则,随机 BST 的分析前提就已改变;需要隐藏随机种子或使用足够宽的独立优先级。
参考资料
- Cecilia Aragon, Raimund Seidel, Randomized Search Trees, FOCS, 1989.
- Raimund Seidel, Cecilia Aragon, Randomized Search Trees, Algorithmica, 1996.