logo资料库

淮海工学院算法分析与设计实验三贪心算法.doc

第1页 / 共7页
第2页 / 共7页
第3页 / 共7页
第4页 / 共7页
第5页 / 共7页
第6页 / 共7页
第7页 / 共7页
资料共7页,全文预览结束
淮海工学院计算机工程学院 实 验 报 告 书 课 程 名 : 《算法分析与设计》 题 目: 实验 3 贪心算法 班 级: 学 号: 姓 名: 评语: 成绩: 指导教师: 批阅时间: 年 月 日
《 算法分析与设计》实验报告 - 1 - 实验 3 贪心算法 实验目的和要求 (1)了解前缀编码的概念,理解数据压缩的基本方法; (2)掌握最优子结构性质的证明方法; (3)掌握贪心法的设计思想并能熟练运用 (4)证明哈夫曼树满足最优子结构性质; (5)设计贪心算法求解哈夫曼编码方案; (6)设计测试数据,写出程序文档。 实验内容 设需要编码的字符集为{d1, d2, …, dn},它们出现的频率为{w1, w2, …, wn},应用哈夫 j ka  ik  曼树构造最短的不等长编码方案。 实验环境 Turbo C 或 VC++ 实验学时 2 学时,必做实验 数据结构与算法 建立哈弗曼树: void HuffmanTree(element huffTree[],double w[],int n) { int i,k,i1,i2; for(i=0;i<2*n-1;i++) { } huffTree[i].parent=-1; huffTree[i].lchild=-1; huffTree[i].rchild=-1; for(i=0;i
《 算法分析与设计》实验报告 - 2 - huffTree[i2].parent=k; huffTree[k].weight=huffTree[i1].weight+huffTree[i2].weight; huffTree[k].lchild=i1; huffTree[k].rchild=i2; } } 哈弗曼编码: void Huffmancode(element huffTree[],int n) { int i,j,k; string s; for(i=0;i=0;k--) { } cout<
《 算法分析与设计》实验报告 - 3 - #include #include using namespace std; struct element { }; double weight; int lchild,rchild,parent; void Select(element huffTree[],int k,int &s1,int &s2) { int i; for (i=0;i<=k;i++) { } if(huffTree[i].parent==-1) { } s1=i; break; for(i=0;i<=k;i++) { } if (huffTree[i].parent==-1) { } if(huffTree[i].weight
《 算法分析与设计》实验报告 - 4 - s2=i; break; { } } for(i=0;i<=k;i++) { } } if (huffTree[i].parent==-1&&i!=s1) { } if(huffTree[i].weight
《 算法分析与设计》实验报告 - 5 - huffTree[k].weight=huffTree[i1].weight+huffTree[i2].weight; huffTree[k].lchild=i1; huffTree[k].rchild=i2; } } void Huffmancode(element huffTree[],int n) { int i,j,k; string s; for(i=0;i=0;k--) { } cout<
《 算法分析与设计》实验报告 - 6 - int n=7; double w[7]={1,3,3,4,6,7,9}; element huffTree[13]; HuffmanTree(huffTree,w,n); Huffmancode(huffTree,n); { } 实验结果 实验体会 本次实验为哈弗曼树的建立及编码,这在数据结构的时候就学过,但本次实验与以 前学的不太一样,数据结构不一样,没有用到链表和指针,比以前的更容易理解更简单。 但是在实验的时候还是遇到了问题,比如对哈弗曼树中权值较小的两个节点的选取, 改了很长时间才改对,回过头来看又觉得真的是小问题,还有就是关于 string 的一些 相关的知识不是特别熟悉,所以在课外的时候,我们应该或回过头去看一些以前学过的 知识,这样就能更加连贯的理解所学的所以知识。
分享到:
收藏