




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、数据结构 课程设计名称:赫夫曼树的建立 专业班级:信息与计算科学2013级一班 姓名: 课题分工(概要设计,详细方案与代码设 计,调试与结果)(需求分析,调试与结果,改进方案) 课题组成人员: 指导教师: 完成日期:2015年6月25日一、摘要运用C语言编写程序(工具VC+6.0),建立函数输入二叉树,并输出赫夫曼树,完成编码。建立赫夫曼树的过程,给定权值Wi(i=1,2,3,.)构成左右子树为空二叉树集合,从集合中选取权值最小的树构成新的二叉树,新二叉树根结点的权值为其左右子树权值之和,将新的二叉树加入到集合中,如此重复,直到只有一棵树(赫夫曼树)。构造好赫夫曼树之后,从根到叶子结点的路径及
2、为编码。二、系统需求分析在信息传递时,希望总长度可能的短,及采用最短码赫夫曼编码的应用,就是采用这种有效的数据压缩技术可以节省数据文件的存储空间和计算机网络的传送时间。建立最优二叉树函数,要求可以建立函数输入二叉树,并输出其赫夫曼树以及赫夫曼编码。三、系统概要设计1、存储结构:采用了数组和结构体结合的存储方式。以下是树中结点的存储结构形式,其中包括了权值,左孩子,右孩子,父亲这几个结点。typedef struct unsigned int weight; /权值 unsigned int parent,lchild,rchild; HTNode;/ 动态分配数组存储赫夫曼树2、基本算法: (
3、1)流程图: 开始 输入叶子结点个数 输入结点权值,m=2n-1 给结点1n和n+1m分别赋初值 构建赫夫曼树结束遍历赫夫曼树,求赫夫曼编码输出赫夫曼树(2)下面的代码是用来生成赫夫曼树的,其中这个过程汇总了select方法来不断寻找当前所有结点中权值最小的结点,然后生成新的结点,再生成相应的树。for(p=*HT+1,i=1;i=n;+i,+p,+w) (*p).weight=*w; (*p).parent=0; /给每个结点权值赋值(*p).lchild=0; (*p).rchild=0; /双亲,左右孩子赋初值 for(;i=m;+i,+p) (*p).parent=0; for(i=n
4、+1;i=m;+i) / 建赫夫曼树 / 在HT1i-1中选择parent为0且weight最小的两个结点,其序号分别为s1和s2 select(*HT,i-1,&s1,&s2); (*HT)s1.parent=(*HT)s2.parent=i; (*HT)i.lchild=s1; (*HT)i.rchild=s2; (*HT)i.weight=(*HT)s1.weight+(*HT)s2.weight; 3、所有实现功能的函(1)int main() :接收原始数据:从终端读入整数集大小n,n个整数和n个权值,调用函数HuffmanCoding(&HT,&HC,w,n); ,以及输出编码。(
5、2)void select(HuffmanTree t,int i,int *s1,int *s2):在所有的树中,找到权值最小的两个赋值给s1和s2,供HuffmanCoding使用。(3)int min1(HuffmanTree t,int i):找最小权值。(4)void HuffmanCoding(HuffmanTree *HT,HuffmanCode *HC,int *w,int n):构建赫夫曼树输出赫夫曼树,以及遍历赫夫曼树求编码。四、详细方案设计开始创建赫夫曼树:是结束(*p).weight=*w; (*p).parent=0; (*p).lchild=0; (*p).rchi
6、ld=0; i=i+1否否是i=i+1i=m(*HT)s1.parent=(*HT)s2.parent=i; (*HT)i.lchild=s1; (*HT)i.rchild=s2; (*HT)i.weight=(*HT)s1.weight+(*HT)s2.weight;i=ni=1初始化赫夫曼表且有m=2n-1结点开始赫夫曼编码:遍历赫夫曼树求每个赫夫曼树的编码,i=1i=n(*HT)i.weight=0,结点状态标志是是否是否结束此时编码为1(*p).lchild=0; (*p).rchild=0; 右子是否空此时编码为0左子是否空P权值是否为1p是否为空5、 代码详细设计1、 源代码#in
7、clude #include / 赫夫曼树和赫夫曼编码的存储表示typedef struct unsigned int weight; unsigned int parent,lchild,rchild; HTNode, *HuffmanTree; / 动态分配数组存储赫夫曼树typedef char *HuffmanCode; / 动态分配数组存储赫夫曼编码表/ 函数void select()调用int min1(HuffmanTree t,int i) int j,flag; unsigned int k=UINT_MAX; / 取k为不小于可能的值 for(j=1;j=i;j+) if(
8、tj.weight*s2) j=*s1;*s1=*s2; *s2=j; / 算法6.13 P148 / w存放n个字符的权值(均0),构造赫夫曼树HT,并求出n个字符的赫夫曼编码HC void HuffmanCoding(HuffmanTree *HT,HuffmanCode *HC,int *w,int n) int m,i,s1,s2; unsigned c,cdlen; HuffmanTree p; char *cd; if(n=1) return; m=2*n-1; *HT=(HuffmanTree)malloc(m+1)*sizeof(HTNode); / 0号单元未用for(p=*
9、HT+1,i=1;i=n;+i,+p,+w) (*p).weight=*w; /赋权值(*p).parent=0; /给双亲,左右孩子赋初值(*p).lchild=0; (*p).rchild=0; for(;i=m;+i,+p) (*p).parent=0; for(i=n+1;i=m;+i) / 建赫夫曼树 / 在HT1i-1中选择parent为0且weight最小的两个结点,其序号分别 为s1和s2 select(*HT,i-1,&s1,&s2); (*HT)s1.parent=(*HT)s2.parent=i; (*HT)i.lchild=s1; (*HT)i.rchild=s2; (
10、*HT)i.weight=(*HT)s1.weight+(*HT)s2.weight; printf(赫夫曼树为:n); printf(元素权值父结点 左孩子 右孩子n); for(i=1;i=2*n-1;i+) printf(%5d %5d %5d %5dn,(*HT)i.weight,(*HT)i.parent,(*HT)i.lchild,(*HT)i.rchild); / 以下为算法6.13,无栈非递归遍历赫夫曼树,求赫夫曼编码,以上同算法6.12 *HC=(HuffmanCode)malloc(n+1)*sizeof(char*); / 分配n个字符编码的头指针向量(0不用) cd=(
11、char*)malloc(n*sizeof(char); / 分配求编码的工作空间 c=m; cdlen=0; for(i=1;i1):); scanf(%d,&n); w=(int *)malloc(n*sizeof(int); printf(请依次输入%d个权值(整型):n,n); for(i=0;i=n-1;i+) scanf(%d,w+i); HuffmanCoding(&HT,&HC,w,n); printf(赫夫曼编码: n);for(i=1;i=n;i+) puts(HCi); system(pause); return 0; 6、 测试与调试结果7、 分析与改进此算法的时间复杂度为O(n2)。由实验结果知道,建立赫夫曼树,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年建瓯市属事业单位考试试卷
- 2025辽宁沈阳水务集团有限公司“智汇水务”招聘考前自测高频考点模拟试题及答案详解(网校专用)
- 2025年河北雄安新区雄县卫健系统公开招聘专业技术人员71名模拟试卷附答案详解(黄金题型)
- 2025年灌南县公开招聘事业单位工作人员43人考前自测高频考点模拟试题及答案详解(夺冠)
- 2025内蒙古阿拉善盟首批事业单位“1+N”招聘54人模拟试卷附答案详解(考试直接用)
- 2025湖南衡阳理工职业学院人才招聘4人模拟试卷附答案详解(典型题)
- 2025广东韶关市始兴县事业单位招聘暨“青年人才”和“急需紧缺人才”招聘89人模拟试卷附答案详解
- 2025广东中山翠亨集团有限公司副总经理选聘1人模拟试卷带答案详解
- 2025年哈尔滨巴彦县公安局公开招聘警务辅助人员32人考前自测高频考点模拟试题及一套答案详解
- 2025内蒙古通辽市奈曼旗招募青年见习人员387人模拟试卷及答案详解(名师系列)
- 云南师大附中2024年数学高一下期末联考试题含解析
- 供应链管理综合实验实验报告
- (正式版)JBT 5300-2024 工业用阀门材料 选用指南
- 2024量子人工智能技术白皮书-量子信息网络产业联盟-2024.1
- 公务员考试培训-判断推理通关秘籍
- 第13课《警惕可怕的狂犬病》 课件
- 《社会工作伦理案例分析》课件 儿童和青少年社会工作伦理
- HSK标准教程5下-课件-L2
- 艺人明星形象代言肖像权使用合同模板
- 毕业设计论文-计算机类
- 工作单位接收函
评论
0/150
提交评论