NOIp数据结构.ppt

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
NOIp数据结构

堆栈、队列、树形结构;栈;栈;栈的应用;分析;栈的应用;;;例题三:最长词链;;分析;;算法框架;;栈的应用;表达式:3 × ( 5 – 2 ) + 7 @;算法流程;算法框架;队列;队列;队列的应用;算法框架;队列的其它应用;牙医诊所;二叉树;多叉树转二叉树;多叉转二叉的例子;几类特殊的树形结构;哈夫曼树;哈夫曼树;构造二叉哈夫曼树;哈夫曼树应用;假设英文原串中的字符存放于字符集S中,‖S‖= X,每个字符在字串中出现的概率为W[i],L[i]为字符i的编码长.   依题意得,对S集合中的不同字符进行N进制编码后要求 1)新字串的码长最短   WPL=∑W[i]*L[i] (i∈1..X) 使得在WPL是所有编码方式中的最小值 2)编码无二义性 任意一字符编码都不为其它字符编码的前缀 此题以哈夫曼树来解答是非常适宜的.N为此哈夫曼树的分叉数,S字符集里的元素即为此   N叉哈夫曼树的叶子,概率W[i]即为叶子结点的权重,从根结点到各叶子结点的路径长即为该叶子结点的编码长L[i].由哈夫曼树的思想可以知道哈夫曼树的建立是一步到位的贪心法,即权重越大的结点越靠近该树的根,这样,出现频率越大的字符其编码就越短. ;但具体应该怎样建立起此N叉哈夫曼树呢? 2叉哈夫曼树已经讲过,我们来看3叉。 N=3时又是怎样一种情况呢? 设 S={A,B,C,D,E}   W=[7,4,2,5,3} 则按权重排序可得   S={A,D,B,E,C}        W=[7,5,4,3,2];那么此哈夫曼树的树形应为怎样呢?  是以下的左图,还是右图,或是两者均不是        ?                ?    ? ? ?              ?  ?      ?  ?  ?           ?   ?     ?? ??  A          A  ? ?            ?  ? ? ?                ?  ?    D   B E  C           D ? ?                  ? ?                            B  ? ?                              ?   ?                              E  C;显然,要带权路径长WPL最短,那么,此树的高度就应尽可能的小,由此可知将此树建成 丰满N叉树是最合理的,于是我们尽量使树每一层都为N个分枝. 这样,我们得到了初步算法。;类似2叉哈夫曼树,我们把每次取2个改成每次取3个,对于 S={A,D,B,E,C}        W=[7,5,4,3,2] 我们进行如下操作: ;哈夫曼树应用;7;思考: 我们发现对于这种情况恰巧每层均为N个分枝,但事实上并非所有的N叉哈夫曼树都可得到每层N个分枝.例于当N=3,‖S‖=6时就不可能构成一棵每层都为三个分枝的三叉树.如何来处理这种情况呢 ?;最简单的处理方式就是添加若干出现概率为0的空字符填补在N叉树的最下一层,这些权为0的虚结点并无实际意义但却非常方全便于这棵N叉树的建立.空字符的添加个数add的计算如下:   Y=‖S‖ mod (n-1)   add=0   (Y=1)      add=1   (Y=0)   add=N-Y (Y>1)     虚结点的加入使得权重最小的N-add个字符构成了距根结点最远的分枝,使其它字符构成的N叉树保持了丰满的N叉结构.;例: N=3       S={A,B,C,D,E,F}      W=[1,2,3,4,5,6};由此可知,对于N叉二叉树我们也可以类似处理。;堆;堆;堆(以小根堆为例);算法描述(建堆);堆——选择与维护;算法描述(堆排序);堆排序算法;堆的应用;堆的应用;堆的应用;注意到,每次合并完果子会删掉两堆,并添加一堆新的,如果采用线性表,时间复杂度将高达O(N^2),对于N=20000是不够的。 所以,我们考虑用小根堆优化。;算法: 建立空堆 每读入一个数插入堆中 每次取两个堆顶元素合并,并插入合并后的数,总共合并n-1次。;用堆优化dijstra算法;例题分析;例题分析;例题分析;例题分析;二叉有哪些信誉好的足球投注网站树;二叉有哪些信誉好的足球投注网站树;二叉排序树用于动态查找;查找相信大家都想得到。 根据性质只要每次查找时,符合则退出,否则就在左孩子(查找值小于当前值)

文档评论(0)

djdjix + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档