项目实训2016--石一龙介绍.doc

  1. 1、本文档共14页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
《算法分析与设计》 ——哈夫曼编码的设计与实现 姓名: 栾小飞 所属班级: 13软件G3班 所在系部: 信息学院 指导教师: 陈娟 时间: 2016年5月 实验目的 1、掌握哈夫曼编码原理;? 2、熟练掌握哈夫曼树的生成方法; 3、设计哈夫曼树编码系统,锻炼编程能力,巩固哈夫曼算法,熟悉遍历方法 二、实验内容 在编程中要实现字符统计、哈夫曼树的建立及该树的哈夫曼编码的读取,这三者顺序进行。 三、实验步骤 1、字符统计: 字符统计是为了计算出字符的频数,以之构成哈夫曼树叶子结点的权。在实现中,本人采用一个链表表示字符的统计信息。并把所有字符关联到一起。这个链表在后面称为承载统计字符链表。在链表中的结点是一个结构体。 struct information_node { char ch; int frequency; struct information_node *next; } *head0; 其中ch用来记录相应的字符。frequency用来记录字符出现的字符的频数,最后用来构成哈夫曼树叶子结点的权重。以head0来指向该链表。其中,本人在这个链表中的表头的结点,本人不用作统计字符的记录。而以其表头结点的frequancy来记录该链表中字符和数。便于后面的函数实现。 void statistics() { char ch; while((ch=cin.get())!=#)//从输入流中断获取字符 if (!find_record(ch))//如果在承载字符的链表中以有那个字符,就不记录。退回调用 //函数。 recording(ch);//如果在承载字符的链表中没那个字符,就向那个链表插入一个结 //点来记录那个字符。 else count(ch);// 由于有该字符,向承载统计字符链表中就该字符结点的个数记录项 //加1. } 2、构建哈夫曼树: 在构建哈夫曼树就用其构建的方法,即哈夫曼树中树从叶子结点开始建立。每次由无父结点的结点中选出两个权重最小的两结点,把它们的权重之和来构建一个新结点的权重,并且用那两个结点要记录它们的父结点就是那个新结点。再重复如上的操作,直到最后的树的建成。而哈夫曼编码的读取,可用树的遍历的方法。这里,本人用树的双亲表示法来表示树的结构。 创建了2*n-1哈夫曼树结点空间,给存储哈夫曼树结点的那个空间的前n个空间输入n个结点值,这n个结点是叶子结点(其中n是统计的不同字符各数)。它们的相关数据来自承载统计字符链表中的相应数据,一个叶子结点,就要读取一个承载统计字符链表的一个结点的数据。而剩余的空间用来存放其它的结点,因为一棵哈夫曼树如果有n个叶子结点,那么这棵树总共有2*n-1个结点。叶子结点以输入,那就是存在如何构树的问题了,本人采用双亲表示法来表示树的结点。在每个结点是一个结构体类型。 struct huffman_number_node { char ch; int data; int parent; int left_child; int right_child; } *head; ch为字符。data用来记录权重。parent用来记录该结点的位置,如果其无父结点,其值为-1,left_child来记录其左子结点的位置,无左子树,就记录为0。ritht_child用来记录右子结点的位置。如果无右子结点就把它记录为0。最后用head来指向那个存储空间。这样就能很好的指把所有的结点关联起来,构成一棵树。利用构成哈夫曼树的方法,来构成一棵哈夫树。 enter_huffman_values( n);//哈夫曼树叶子结点的输入 creat_huffman_tree(number,n);//创建哈夫曼树 从哈夫曼树中读哈夫曼编码: 本人采用从以叶子结点开始,来读哈夫曼码元。读的方法是从叶子结点开始,然后就顺着叶子结点所记录的父结点。访问其父结点。在父结点中记录其是左子树,就向栈中输入码元0.否则是1.如此继续下去,直到访问到根结点。这时,这个叶子结点的

文档评论(0)

挑战不可能 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档