左偏树的关系
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了左偏树的关系相关的知识,希望对你有一定的参考价值。
参考技术A下面我们来讨论左偏树的距离和节点数的关系。
[引理1] 若左偏树的距离为一定值,则节点数最少的左偏树是完全二叉树。
证明:由性质2可知,当且仅当对于一棵左偏树中的每个节点i,都有dist(left(i)) =dist(right(i)) 时,该左偏树的节点数最少。显然具有这样性质的二叉树是完全二叉树。
[定理1] 若一棵左偏树的距离为k,则这棵左偏树至少有2^(k+1)-1个节点。
证明:由引理1可知,当这样的左偏树节点数最少的时候,是一棵完全二叉树。距离为k的完全二叉树高度也为k,节点数为2^(k+1)-1,所以距离为k的左偏树至少有2^(k+1)-1个节点。
作为定理1的推论,我们有:
[性质4] 一棵N个节点的左偏树距离最多为ëlog(N+1)û-1。
证明:设一棵N个节点的左偏树距离为k,由定理1可知,N ≥ 2^(k+1)-1,因此k ≤ ëlog(N+1)û-1。
标程
《数字序列》程序 PROGRAMSeq_LeftistTree;TyPenode=recorddist:byte;key,left,right:longint;end;VaRnd:array[0..1000000]ofnode;stk,q:array[0..1000000]oflongint;n,cl,i:longint;Functionmerge(a,b:longint):longint;varc:longint;beginif(a=0)or(b<>0)and(nd[a].key<nd[b].key)thenbeginc:=a;a:=b;b:=c;end;merge:=a;ifb=0thenexit;nd[a].right:=merge(nd[a].right,b);ifnd[nd[a].left].dist<nd[nd[a].right].distthenbeginc:=nd[a].left;nd[a].left:=nd[a].right;nd[a].right:=c;end;nd[a].dist:=nd[nd[a].right].dist+1;end;Procedureprint;vartot,i,j:longint;begintot:=0;fori:=1tocldoforj:=q[i-1]+1toq[i]doinc(tot,abs(nd[j].key-nd[stk[i]].key));writeln(tot);end;BeGiNreadln(n);fillchar(nd,sizeof(nd),0);cl:=0;q[0]:=0;fori:=1tondobeginreadln(nd[i].key);dec(nd[i].key,i);inc(cl);stk[cl]:=i;q[cl]:=i;while(cl>1)and(nd[stk[cl]].key<nd[stk[cl-1]].key)dobegindec(cl);stk[cl]:=merge(stk[cl],stk[cl+1]);ifodd(q[cl+1]-q[cl])andodd(q[cl]-q[cl-1])thenstk[cl]:=merge(nd[stk[cl]].left,nd[stk[cl]].right);q[cl]:=q[cl+1];end;end;print;EnD.
左偏树
概要:左偏树是具有左偏性质的堆有序二叉树,它相比于优先队列,能够实现合并堆的功能。
先仪式型orzorzozr国家集训队论文https://wenku.baidu.com/view/515f76e90975f46527d3e1d5.html
左偏树的节点定义:
1 struct node { 2 int lc, rc, val, dis; 3 } LTree[maxn];
左偏树的几个基本性质如下:
- 节点的键值小于等于它的左右子节点的键值
- 节点的左子节点的距离不小于右子节点的距离
- 节点的距离等于右子节点的距离加一,由此可推出一个引理和一个定理:
- 若左子树的距离为一定值,则节点数最少的左偏树是完全二叉树
- 若一棵左偏树的距离为k,则这颗左偏树至少有2k+1-1个节点
4.一棵N个节点的左偏树的距离最多为[log(N+1)]-1
左偏树的基本操作
- 合并操作(事实上操作时始终把B插入A中)
函数返回的是合并后的树的根节点
首先特判是否存在空树
然后注意到左偏树我们需要保证根节点键值不大于两个子节点的键值,此处我们需要特判A、B的键值,决定swap函数的调用与否(维护性质1)
接着判断A的左右子树的距离,决定是否调用swap(维护性质2)
最后根据A右子树的距离生成A的距离(维护性质3)
2.插入节点
将B节点视为一棵左偏树,合并A、B即可
3.删除最小(大)节点
等同于合并根节点的左右子树
附题:http://acm.hdu.edu.cn/showproblem.php?pid=1512
先到这里QAQ
以上是关于左偏树的关系的主要内容,如果未能解决你的问题,请参考以下文章