左偏树算法的介绍
左偏树算法是一个合并类算法,类似于线段树合并、启发式合并等算法,用于优先队列的合并。可以在 O ( l o g n ) O(logn) O(logn)的时间内实现合并两个优先队列
和删除队头
。常用于处理树上问题。
左偏树的结构与性质
左偏树的大致结构是这样的:
如图所述,我们规定 d i s x dis_x disx表示 x x x不断往右走能走的步数(和最右叶节点的距离).那么在这幅图中,每一个节点上的蓝色字体表示的就是具体的 d i s dis dis值。
观察左偏树的形状,我们发现了左偏树有如下性质:
- 任意节点的 d i s dis dis值比该节点的右孩子的 d i s dis dis多 1 1 1.表达成公式有: d i s x = d i s r s o n x + 1 dis_x=dis_{rson_x}+1 disx=disrsonx+1
- 任意节点左孩子的dis值永远大于等于右孩子的dis值。即: d i s r s o n x ≤ d i s l s o n x dis_{rson_x} \le dis_{lson_x} disrsonx≤dislsonx
- 如果当前左偏树维护的