您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > 第3章最优二叉搜索树.
13.5最优二叉搜索树OptimalBinarySearchTrees2•1二叉搜索树•2最优二叉搜索树•3最优二叉搜索树问题描述•4最优子结构性质•5递归计算最优值•6算法3是一棵空树或者满足以下的性质:每个结点作为搜索对象,它的关键字是互不相同的。对于树上的所有结点,如果它有左子树,那么左子树上所有结点的关键字都小于该结点的关键字。对于树上的所有结点,如果它有右子树,那么右子树上所有结点的关键字都大于该结点的关键字。1二叉搜索树4xalwanwilwenwimwulzolyozomxulyumxemyonzi搜索过程:从根结点开始,如果根为空,则搜索不成功;否则使用待搜索值与根结点比较,如果待搜索值等于根结点关键字,则搜索成功返回,如果小于根结点,则向左子树搜索;如果大于根结点,则向右子树搜索。1二叉搜索树5•对于一个给定的关键字集合,可能有若干不同的二分检索树•如对保留字的子集Name:12345foriflooprepeatwhile的两棵二分检索树为ifforwhilelooprepeatifwhilelooprepeatforab考虑a图和b图中最坏比较次数和平均比较次数1二叉搜索树6•构造不同的二叉搜索树就有不同的性能特征。•二叉搜索树a在最坏情况下找一个标识符需要4次比较,而b表示的二分检索树最坏情况下只需3次比较。•假设只作成功的检索并且检索每个标识符的概率相同,则两棵二分检索树在平均情况下各需要12/5和11/5次比较。ifforwhilelooprepeatifwhilelooprepeatforab1二叉搜索树72、最优二叉搜索树存在的两个问题1在实际中也会遇到不成功检索的情况。2在实际中,不同标识符会有不同的检索概率。•对给定的标识符集合,希望给出构造二分搜索树的方法,使得所构造的二分搜索树具有最优的性能。2最优二叉搜索树8•扩充二叉树:当二叉树里出现空的子树时,就增加新的、特殊的结点——空树叶。对于原来二叉树里度数为1的分支结点,在它下面增加一个空树叶;对于原来二叉树的树叶,在它下面增加两个空树叶。•扩充二叉树是满二叉树,新增加的空树叶(以下称外部结点)的个数等于原来二叉树的结点(以下称内部结点)个数加1。在实际中也会遇到不成功检索的情况2最优二叉搜索树9xalwanwilwenwimwulzolyozomxulyumxemyonziAA代表其值处于wim和wul之间的可能关键码集合2最优二叉搜索树10•设S={x1,x2,···,xn}是一个有序集合,且x1,x2,···,xn表示有序集合的二叉搜索树利用二叉树的顶点存储有序集中的元素,而且具有性质:–存储于每个顶点中的元素x大于其左子树中任一个顶点中存储的元素,小于其右子树中任意顶点中存储的元素。二叉树中的叶顶点是形如(xi,xi+1)的开区间。在二叉搜索树中搜索一个元素x(1)在二叉树的内部顶点处找到:x=xi(2)在二叉树的叶顶点中确定:x∈(xi,xi+1)2最优二叉搜索树11在实际中,不同标识符会有不同的检索概率。•设Pi是对ai检索的概率。•设qi是对满足aiXai+1,0in的标识符X检索的概率,(假定a0=-且an+1=+)。a1Q(0)E0P(1)a2E1Q(1)P(2)aiP(i)ai+1EiQ(i)P(i+1)anP(n)EnQ(n)2最优二叉搜索树12最优二叉搜索树利用动态规划构造对标识符集合{a1,a2,…,an}的最优二叉搜索树算法(包括成功检索和不成功检索)。2最优二叉搜索树13•例标识符集{1,2,3}={do,if,stop}可能的二分检索树为:(a)321231(c)312(d)(b)312321(e)•设每个内、外结点检索的概率相同:pi=qi=1/7,求每棵树的平均比较次数(成本)。•若P1=0.5,P2=0.1,P3=0.05,q0=0.15,q1=0.1,q2=0.05,q3=0.05,求每棵树的平均比较次数(成本)。14在检索过程中,每进行一次比较,就进入下面一层,•对于成功的检索,比较的次数就是所在的层数加1。•对于不成功的检索,被检索的关键码属于那个外部结点代表的可能关键码集合,比较次数就等于此外部结点的层数。2最优二叉搜索树15例:P1=0.5,P2=0.1,P3=0.05,q0=0.15,q1=0.1,q2=0.05,q3=0.05123q0q1q2q3123q0q1q2q3q0123q1q2q3123q0q1q2q3123q0q1q2q3考虑平均搜索次数,也叫做平均路长Pa(n)=1×p1+2×p2+3×p3+1×q0+2×q1+3×(q2+q3)=1×0.5+2×0.1+3×0.05+1×0.05+2×0.1+3×(0.05+0.05)=1.52最优二叉搜索树abcde16分析对于图的内结点而言,第0层需要比较操作次数为1,第1层需要比较2次,第2层需要3次Pb(n)=1×p1+2×p3+3×p2+1×q0+3×(q2+q3)=1×0.5+2×0.05+3×0.1+1×0.15+2×0.05+3×(0.05+0.05)=1.6•Pc(n)=1×p2+2×(p1+p3)+2×(q0+q1+q2+q3)=1×0.1+2×(0.5+0.05)+2×(0.15+0.1+0.05+0.05)=1.9•Pd(n)=1×p3+2×p1+3×p2+1×q3+2×q0+3×(q1+q2)=1×0.05+2×0.5+3×0.1+1×0.05+2×0.15+3×(0.1+0.05)=2.15•Pe(n)=1×p3+2×p1+3×p2+1×q3+2×q0+3×(q1+q2)=1×0.05+2×0.5+3×0.1+1×0.05+2×0.15+3×(0.1+0.05)=2.152最优二叉搜索树17•找到元素x=xi的概率为bi;确定x∈(xi,xi+1)的概率为ai。其中约定x0=-∞,xn+1=+∞,有2最优二叉搜索树18•在一个表示S的二叉树T中,设存储元素xi的结点深度为ci;叶结点(xj,xj+1)的结点深度为dj。•表示在二叉搜索树T中作一次搜索所需的平均比较次数。P又称为二叉搜索树T的平均路长,在一般情况下,不同的二叉搜索树的平均路长是不同的。2最优二叉搜索树193、最优二叉搜索树问题描述•对于有序集S及其存取概率分布(a0,b1,a1,···,bn,an),在所有表示有序集S的二叉搜索树中找出一棵具有最小平均路长的二叉搜索树。结点在二叉搜索树中的层次越深,需要比较的次数就越多,因此要构造一棵最小二叉树,一般尽量把搜索概率较高的结点放在较高的层次。3最优二叉搜索树问题204、最优子结构性质•假设选择k为树根,则1,2,…,k-1和a0,a1,…,ak-1都将位于左子树L上,其余结点(k+1,…,n和ak,ak+1,…,an)位于右子树R上。kLR1,2,…,k-1a0,a1,…,ak-1k+1,…,nak,ak+1,…,an4最优子结构性质21511472063353976425431399844最优子结构性质22511472063353976425431399844最优子结构性质23•设COST(L)和COST(R)分别是二分检索树T的左子树和右子树的成本。•则检索树T的成本是:P(k)+COST(L)+COST(R)+……•若T是最优的,则上式及COST(L)和COST(R)必定都取最小值。4最优子结构性质24最优子结构性质证明•二叉搜索树T的一棵含有顶点xi,···,xj和叶顶点(xi-1,xi),···,(xj,xj+1)的子树可以看作是有序集{xi,···,xj}关于全集为{xi-1,xj+1}的一棵二叉搜索树(T自身可以看作是有序集)。根据S的存取分布概率,在子树的顶点处被搜索到的概率是:4最优子结构性质25jipwpww)(pww)(pwpwr,jmli,mijr,jmm,mli,mijij111111左子树的搜索概率右子树的搜索概率设Tij是有序集{xi,···,xj}关于存储概率分布为{ai-1,bi,…,bj,aj}的一棵最优二叉搜索树,其平均路长为pij,Tij的根顶点存储的元素xm,其左子树Tl和右子树Tr的平均路长分别为pl和pr。由于Tl和Tr中顶点深度是它们在Tij中的深度减1,所以得到{xi,···,xj}的存储概率分布为{ai-1,bi,…,bj,aj},其中,ah,bk分别是下面的条件概率:4最优子结构性质26构造最优二叉搜索树时,可以选择先构造其左右子树,使其左右子树最优,然后构造整棵树。4最优子结构性质275、递归计算最优值•最优二叉搜索树Tij的平均路长为pij,则所求的最优值为p1,n。由二叉树的花费公式•根据最优二叉搜索树问题的最优子结构性质可建立计算pij的递归式如下初始时jipwpww)(pww)(pwpw,jk,jki,ki,kij,jk,jkk,ki,ki,kijij11111111115递归计算最优值28记wi,jpi,j为m(i,j)递归计算最优值5递归计算最优值29根据该公式,计算树T[i][j]的花费只用到了T[i][k-1],T[k+1][j],可得到具体求解过程如下:1)构造只有1个内部结点的最优二叉搜索树T[1][1],T[2][2]…,T[n][n],可以求得m[i][i]同时可以用一个数组存做根结点元素为:s[1][1]=1,s[2][2]=2…s[n][n]=n2)构造具有2个内部结点的最优二叉搜索树30例•给出标识符集{1,2,3}={do,if,stop}存取概率•若P1=0.5,P2=0.1,P3=0.05,q0=0.15,q1=0.1,q2=0.05,q3=0.05构造一棵最优二叉搜索树5递归计算最优值31q0=0.15,P1=0.5,q1=0.1,P2=0.1,q2=0.05,P3=0.05,q3=0.051q0q1T[1][1]w[1][1]=0.75m[1][1]=0.752q1q2T[2][2]w[2][2]=0.25m[2][2]=0.253q2q3T[3][3]w[3][3]=0.15m[3][3]=0.1512q0q1q212q0q1q2T[1][2]w[1][2]=0.9m[1][2]=0.9+m[1][1]+m[3][2]=1.65w[1][2]=0.9m[1][2]=0.9+m[1][0]+m[2][2]=1.15q0T[1][0]w[1][0]=0.15m[1][0]=0q1T[2][1]w[2][1]=0.1m[2][1]=0q2T[3][2]w[3][2]=0.05m[3][2]=0q3T[4][3]w[4][3]=0.05m[4][3]=032q0=0.15,P1=0.5,q1=0.1,P2=0.1,q2=0.05,P3=0.05,q3=0.051q0q1T[1][1]w[1][1]=0.75m[1][1]=0.752q1q2T[2][2]w[2][2]=0.25m[2][2]=0.253q2q3T[3][3]w[3][3]=0.15m[3][3]=0.1512q0q1q212q0q1q2T[1][2]w[1][2]=0.9m[1][2]=0.9+m[1][1]+m[3][2]=1.65w[1][2]=0.9m[1][2]=0.9+m[1][0]+m[2][2]=1.1523q1q2q323q1q2q3T[2][3]w[2][3]=0.5m[2][3]=0.5m[2][3]=0.633q0=0.15,P1=0.5,q1=0.1,P2=0.1,q2=0.05,P3=0.05,q3=0.051q0q1T[1][1]w[1][1]=0.75m[1][1]=0.752q1q2T[2][2]w[2][2]=0.25m[2][2]=0.253q2q3T[3][3]w[3][3]=0.15m[3][3]=0.1512q0q1q212q0q1q2T[1][2]w[1][2]=0.9m[1][2]=0.9+m[1][1]+m[3
本文标题:第3章最优二叉搜索树.
链接地址:https://www.777doc.com/doc-2155805 .html