树形结构的应用.pptVIP

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

外部排序例续 当输出缓冲区已满时,将输出缓冲区内容写入磁盘,写完之后继续进行合并。 当某一输入缓冲区空时,则从对应于空缓冲区的输入run中继续读取记录放入该缓冲区,读取过程结束后合并继续进行。 当这些run中的4000个记录都写入输出run中时,四个run的合并过程结束 run串的产生-1 通过使用赢者树,可减少run的个数。 开始时,建立含p 名选手的赢者树,其中每个选手对应输入集合中的一个元素。 每个选手有一个值(即对应的元素值)和一个run 号。前p 个元素的run号均为1。 当两选手进行比赛时,具有较小run 号的选手获胜。在run 号相同的情况下,按选手的值进行比较,具有较小值的元素成为赢家。 run串的产生-2 重复: 将最终赢者W 移入它的run号所对应的run中。 若输入中有下一个输入元素N,则 读入下一个输入元素N 如果N的值大于等于W的值,则元素N的run号与W 的相同。 如果N的值小于W 的值,若将N 的run号设置为W 的run号加1。 用N取代W 原来的位置。 重构赢者树 否则,用∞代替 直到所有元素输出到对应的run 当采用上述方法生成run时, run的平均长度约为2p。 run串的产生例 例:输入元素:17,21,05,44,60,12,56,32,29 P=3 k路合并 k个run要合并成一个排好序的run。 因在每一次循环中都需要找到最小值,故将每一个元素合并到输出run中需O(k)时间,因此产生大小为n的run所需要的时间为O(kn)。 若使用赢者树,则可将这个时间缩短为Θ(k+nlogk)。 k路合并 首先用O (k)的时间初始化含k个选手的赢者树。这k个选手都是k个被合并run中的头一个元素。 然后将赢者移入输出run中并用相应的输入run中的下一个元素替代之。如果在该输入run中无下一元素,则需用一个key值很大(不妨为∞)的元素替代之。 k次移入和替代赢家共需耗时Θ(logk)。因此采用赢者树进行k路合并的总时间为Θ(k+nlogk)。 a b c d e f 27 0 0 0 0 0 1 1 1 1 1 a: 00 b: 010 c: 011 d: 100 e: 101 f: 11 构造霍夫曼树的实现 使用一个最小堆来存储二叉树集合。 最小堆的每个元素包括两部分: 二叉树 二叉树的权值. templateclass T class Huffman { friend BinaryTreeint HuffmanTree(T[],int); public: operator T() const {return weight;} private: BinaryTreeint tree; T weight; }; template class T BinaryTree int HuffmanTree(T a[],int n) {// 根据权重a [1 : n]构造霍夫曼树 // 创建一个单节点树的数组 HuffmanT *w = new HuffmanT [n+1]; BinaryTreeint z, zero; for (int i = 1; i = n; i++) { z.MakeTree(i,zero,zero); w[i].weight = a[i]; w[i].tree = z; } // 把数组变成一个最小堆 MinHeap HuffmanT H(1); H.Initialize(w,n,n); //将堆中的树不断合并 Huffman T x,y; for(i=1;in;i++){ H.DeleteMin(x); H.DeleteMin(y); z.MakeTree(0,x.tree,y.tree); x.weight+=y.weight; x.tree=z; H.Insert(x); } H.DeleteMin(x);//最后的树 H.Deactivate( ); delete[]w; Return x.tree; } Huffman编码的描述 Class CodeNode {public …… private: char ch; char *chcode; } CodeNode HC[n]; Char *cd; 求Huffman编码的实现思想-1 从根出发,遍历Huffman树,求的每个叶子节点的Huffman编码。 设二叉树节点的data:ch+tag 初始化所有节点的tag=0; P指向当前访问的节点,pp指向P的父节点。p初始化为Huffman树的根节点; Char *cd; int cdlen=0; //cd暂存遍历过程中得到的0/1串 遍历中遇到的下一个叶子节点nextl=1;

文档评论(0)

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

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

1亿VIP精品文档

相关文档