网站大量收购闲置独家精品文档,联系QQ:2885784924

最优分搜索树.docVIP

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
最优分搜索树

最优二分搜索树 指令MEMBER(x,S):若x在S中则返回”yes”,否则返回”no”。 设有n个实数 a1a2…an构成集合S, 考虑由MEMBER指令构成的序列。 (在指令序列中抽去INSERT, DELETE等其它的指令) 指令MEMBER(x,S)中的x可能是某个ai,也可能不在S中。 把不在S中的数按区间分为n+1类, 以b0,b1,…,bn作为每一类数的代表: b0a1, a1b1a2,… ,an-1bn-1an, bnan (-∞,a1) , (a1,a2), … , (an-1,an), (an,+∞) ∴有b0a1b1a2…an-1bn-1anbn。 在下面的讨论中,我们把bj作为二分搜索树的虚结点(j=0,1,2,…,n)。 在MEMBER指令序列中, 有的ai,bj可能出现多次,有的可能出现很少,也可能不出现。 因此在构造二分搜索树时, 要把出现次数多的ai,bj尽量放到靠近根部的位置,以减少搜索次数。 定义pi为MEMBER (ai,S)出现的频率(i=1,2,…,n), qj为MEMBER (bj,S)出现的频率(j=0,1,2,…,n)。 则+=1 定义一棵二分搜索树的总耗费: + 深度depth从0计起,即二分搜索树的根的深度为0。 depth(ai)+1为找出ai所需要的比较次数, depth(bj) 为确定bj(S所需要的比较次数。 例:S = {10, 14, 18, 5, 15, 12, 7}(集合中的数按插入的次序给出)。 图a 图b 假设MEMBER (b6,S) 出现次数为80% (b6:15~18), MEMBER (5, S) 出现次数为10%, 其余ai、bj在MEMBER指令序列中出现频率相等,共计10% 。 则:图a二分搜索树的总耗费约为3.67, 图b二分搜索树的总耗费约为2.18。 有无总耗费更小的二分搜索树?如何找出耗费最小的二分搜索树? 分析:假定T0是棵最优二分搜索树,它的根是ak(第k小的数)。 则ak的左子树中必然包含了{a1…ak-1}, ak的右子树中必然包含了{ak+1…an}。 而且,左子树一定是关于{a1…ak-1}的最优二分搜索树, 右子树一定是关于{ak+1…an}的最优二分搜索树。 (否则,用更优的子树代替当前的子树,其总耗费比T0的更小,矛盾。) 根据二分搜索树的性质,任何一颗子树中结点的编号都是连续的。 而且,最优树中的任何一颗子树, 也必然是关于子树中结点的最优树。 (以上两个结论的证明留作作业,证明请尽可能严格。) ∴最优二分搜索树具有最优子结构性质。 这样,若规模为m≤n-1的最优子树均已知, 就可以通过逐一计算以a1,a2,…,an为根的树的耗费, 来确定(使耗费达到最小的)根ak并找出最优二分搜索树。 在上述计算中,规模较小的最优子树在计算中要多次被用到, 故问题具有高度重复性。考虑用动态规划法 考察一棵树接到另一个结点之下构成一棵新树时耗费的增加。 设有一棵由结点bi,ai+1,bi+1,…,aj,bj构成的树。 (注意下标连续,真实结点ai+1从到aj。) 按定义该树的耗费为+, (二分搜索树的耗费定义:+) 这里depth(al)为al在该树中的深度,depth(bl)为bl在该树中的深度。 当该树作为子树接到另一个结点之下构成一棵新树时, 这棵子树中的每个结点的深度在新树中均增加了1。 因此,该子树在新树中的耗费增加了 +=+++…+(+),记该数为wij。 定义:在所有由结点bi,ai+1,bi+1,…,aj,bj构成的树中, 把耗费最小的树记为Tij。(注意该树中不含ai但含bi)。 若由结点bi,ai+1,bi+1,…,aj,bj构成的树以ak作为根 (i+1(k(j), 则bi,ai+1,bi+1,…,ak-1,bk-1必然在其左子树中, 则bk,ak+1,bk+1,…,aj,bj必然在其右子树中, 这样的树中耗费最小的必然是 以Ti,k-1为其左子树,以Tk,j为其右子树。 记cij是最优子树Tij的耗费, 则ci,k-1是最优子树Ti,k-1的耗费,ck,j是最优子树Tk,j的耗费。 考察以ak (i+1(k(j)为根、由结点bi,ai+1,bi+1,…,aj,bj构成的、 耗费最小的树的总耗费: 由上述讨论,该树的左子树必然是Ti,k-1,右子树必然是Tk,j。 这棵树的总耗费可分为三部分:左子树、右子树和根。 由于Ti,k-1作为左子树接到结点ak之下时,其耗费增加wi,k-1, 故左子树的耗费为:ci,k-1+ wi,k-1, 同理,右子树的耗费为:ck,j+wk,j, 由于根ak的深度为0,按定

文档评论(0)

panguoxiang + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档