版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、目录 实 验 原 理 1 程 源 代 1 三: 实 验 分 析 实 验 结 论 7 赫夫曼编码 实验原理 哈夫曼编码的具体步骤归纳如下: 概率统计(如对一幅图像,或m幅同种类型图像作灰度信 号统计),得到n个不同概率的信息符号。 将n个信源信息符号的n个概率,按概率大小排序。 将n个概率中,最后两个小概率相加,这时概率个数减为 n-1 个。 将n-1个概率,按大小重新排序。 重复,将新排序后的最后两个小概率再相加,相加和与 其余概率再排序。 如此反复重复n-2次,得到只剩两个概率序列。 以二进制码元(0.1)赋值,构成哈夫曼码字。编码结束。 哈夫曼码字长度和信息符号出现概率大小次序正好相反,即
2、大 概信息符号分配码字长度短,小概率信息符号分配码字长度长。 C、哈夫曼编码的特点 (1) 哈夫曼编码的构造顺序明确,但码不是唯一的(因以大赋1还是小 的赋1而异; (2) 哈夫曼编码的字长参差不齐,硬件实现不方便; (3) 只有在概率分布很不均匀时,哈夫曼编码才有显著的效果,而在 信源分布均匀时,一般不使用哈夫曼编码。 二:程序源代码: ttdefine MAXVALUE 10000 define MAXLEAF 30 define MAXNODE 59 ttdefine MAXBIT 10 ttdefine LENTH 30 include stdio. h ncludeiost:rean
3、i typedef struct float gailv; int flag; int parent: int lchild; int rchild; char ch; int t; HNodeType; typedef struct int bitMAXBIT; int start; HCodeType; typedef struct float gailv; char letter; Jmytype; /*it, s the type of data save in file*/ typedef struct filehuff int count; mytype mydataMAXLEAF
4、; filehuff()count二0; ; ; filehuff filedata; char codeMAXVALUE; HNodeType HuffNodeMAXNODE; void savetofile () FILE *fp; if (fp=fopen(,zdatafile txt, wb)=NULL) printf(打开失败 return; if(fwrite( void openfile() FILE *fp; if (fp=fopen(,zdatafile txt, rb)=NULL) return; fread( void translate() char c; int i,
5、 j, k=0, m, n=0; printf r请输入你想要译码的二进制序列”); printf(n); get char (); scanf (iMAXVALUE) i+) codei=c; scanf (,z%c/z, printf r对应的信源符号为:“); for (j二0; j=MAXVALUE j+) nrj+l; for (j=0, k=m; j=i; j+) 辻(codej二二0,) n=HuffNodek lchild; if (n-l) printf(%c, HuffNodekj. ch); k=m;j一一:continue; k二n; else n=HuffNodek
6、rchild; if(n=-l) printfHuffNodekJ. ch); k=m;j-一;continue; k=n; void Huffman() HCodeType HuffCodeMAXLEAF, cd; int i, j, ml, m2, xl, x2, c, p, m; if (filedata count二二0) printf (n输入信源符号总数:”); scanf (,z%d,z, filedata count=m; for (i=0;i2*m-l;i+) HuffNodeiiZ. gailv=0; HuffNodeEi parent二T; HuffXodei.flag=
7、0; HuffNodeEil. lchild=-l; HuffXodeEi. rchild二T; HuffXodeEi. ch二a ; for (i=0; im; i+) printf r请输入(概率,信源符号):); scanf (z,%f %cz,, filedata mydata Lil. gailv=HuffNodeLi gailv; filedata mydata Lil. 1etter二HuffNodei ch; savetof ile (); else npf iledata count; for (i二0;i2*m-l;i+) HuffNodeCi. gailv=0; Huff
8、Nodei parent二T; HuffNodei.flag=0; Huffodeilchild二-1; HuffNodeEi rchild=-l; Huffodei.ch二3; for (i=0; im; i+) HuffNodeLi gailv=filedata mydatai gailv; HuffNodeEi ch=filedata mydatailetter; for (i=0;im-l;i+) ml二m2二MAXVALUE; xl二x2二0; for(j二0;jm+i;j+) if(HuffXodeEjl. gailvml x2=xl; ml=HuffNodejl. gailv;
9、xl二 j; else if(HuffNodej. gailvm2 x2二 j; HuffNodexl parent二m+i; HuffNodex2 parent二m+i; HuffNodexl. flag=l; HuffNodex2. flag=l; HuffNodem+i. gailv=Huffodexl. gailv+HuffNodex2.gailv; HuffXodem+i. lchild=xl; HuffNodem+i. rchild=x2; for (i=0; im; i+) cd startm-l; c=i; p=HuffNodec parent; while(p!=-l) if
10、 (HuffXodeEp. lchildc)cd. bit cd. start二0; else cdbitcd start=l; cd. start-; c 二p; p=HuffNodec parent; for(j=cd start+1:jm;j+)HuffCodei bitj=cd bitjZ; HuffCodeLi. start=cd start; printfC对应的赫夫曼编码如下:0; printf (n信源符号概率 编码); for (i=0; im; i+) printf (z/%c%f、HuffNodeEi. ch, HuffNodeEi. gailv); for (j=Huf
11、fCodei start+1; jm; j+) printf(%d, HuffCodei. bitj); printf Cnz,); printf C按任意键继续n); main() char yn; printf(n); printf Cnz,); printf r信息论与编码实验n); openfile(); Huffman (); for(;) printf Cn是否想要把序列译码为信源符号?:(输入y or n) 9; scanf (z,%c,z, 辻(yn二二y yn二二,Y,) translate (); else break; return 0; system(,zpause,z
12、); 三:实验分析 编码实例如下: 由图中可以看出,符合基本的赫夫曼编码的原理,概率大的用短码,概率小的用长码。 信息论与编码实验 灣髀天曼绳餌如下: a0 b0 0 槪率 100000 150000 200000 25UMWW 300000 按任恚键继纟卖 编碼 110 111 00 01 10 是否想要把序列译码为信源符号?: 巴日J 0原巴 扌*Jl_ly扌 要你00信要 想入01的想 否输01应否 是请10对是 为二 审玛10:为译 列译00兮列 序要01符序 _Jm3 -pno_J ? ed为 ed源 选择译码:结果如下: 四:实验结论 哈夫曼的具体实现,在数据结构的相关课程曾做相应的实验,所 以无论在理解上或是实现上,都不是很困难,程序上实现哈夫曼的编 码与译码,由于哈夫曼自身的特点,编码与译码均不是唯一,但是相 同的编译码规则还是能实现正确的译码的。木实验,除了实现编译码 的具体实现,还实现数据的存储与读取,这给实验实现方便,不必每 次从命令提示符输入数据。总的来说,通过木次实验,对哈夫曼的编 译码有了一个更好的认识。 通过本次试验,对书上的理论知识有了进一步的认识,但是由于 对编程软件的知识欠缺,导致有
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 山东省商河县2026届初三下学期综合模拟物理试题含解析
- 浙江省舟山市普陀区2025-2026学年初三下期末考试(语文试题理)试卷含解析
- 四川省眉山市名校2025-2026学年初三年级期末质量调查英语试题含解析
- 重庆市巴南区全善学校2026年下学期期中英语试题含解析
- 河北省廊坊市名校2026年初三英语试题下学期期末教学质量监测试题含解析
- 江苏省南京市建邺三校联合~2025-2026学年初三(下)4月模拟语文试题试卷含解析
- 高渗甘露醇临床应用研究
- 孕妇结婚应急预案(3篇)
- 2026年物业工程设施设备预防性维护策略
- 2026年生物质能转化行业热解气化过程数字化能效管控项目
- 1完整版本.5kw机器人专用谐波减速器设计
- 急性心梗的急救护理与抢救流程
- 《ERP总体介绍》课件
- GB/T 44828-2024葡萄糖氧化酶活性检测方法
- 管制无线电陆空通话(2024年版)学习通超星期末考试答案章节答案2024年
- XX小学法治副校长(派出所民警)法制教育课讲稿
- ORACLE-EBS-成本管理手册
- DL∕T 5344-2018 电力光纤通信工程验收规范
- 检验科实验室生物安全培训课件
- 八年级数学下二次根式和勾股定理综合测试卷(含答案)
- 颈椎退行性疾病
评论
0/150
提交评论