| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 443 人关注过本帖
标题:需c++huffman编码 要求在下
只看楼主 加入收藏
caop0307
Rank: 1
等 级:新手上路
帖 子:4
专家分:4
注 册:2013-12-30
结帖率:0
收藏
已结贴  问题点数:20 回复次数:3 
需c++huffman编码 要求在下
一、二元Huffman码
在通信领域,信息编码是一种最基本的理论基础与技术手段,可以针对文字、声音、图像、视频、模型等,分为信源编码、信道编码。编码的方法有很多。1952年,一位外国人提出了一种逐个符号的编码方法,姑且称为H编码方法。其基本思想如下:
设有n个信号u1,u2,…,un,其概率分布依次为p(u1),p(u2),…,p(un),称为信号值,且满足下式:
p(u1)+p(u2)+…+p(un)=1
简记为:
 
H码的编码步骤可以简述为:
(1)    首先将n个信号按值的大小排列。
(2)    将最小的两个信号合并成一个新的信号,新信号的值为该两信号值的和,从而将原n个信号缩减为n-1个信号。
(3)    把缩减后的信号仍按值递减排列,然后再将其中最小的两个信号合并成一个新信号,这样又缩减为n-2个信号。
(4)    依此类推,直至只剩下1个信号为止。
(5)    将每次合并的两个信号分别用“0”和“1”两个符号表示。
(6)    从最后一级开始,向前返回,就得出各信号所对应的符号序列,即为各信号对应的码字。
例如:已知
 
其对应的H码如图所示:
 
再如:对
 
有两种编码过程:
  
方法(a)的具体原则是,把合并后的信号总是放在其他相同值的信号之上(或之左),方法(b)则是把合并后的信号值放在其他相同值的信号之下(或之右)。通过分析,方法(a)优于方法(b),方法(a)的方差比方法(b)的方差要小许多。
二、m元Huffman码
上面讨论的编码方法可称为二元编码,其思想可推广到m元编码。不同的只是每次把值最小的m个信号合并成一个新的信号,并分别用0,1,…,m-1等m个符号来表示。
对于m元编码,信号个数n必须满足下式:
n=(m-1)Q+m
式中:     n——信号个数
m——码元数
Q——缩减次数
对于二元码,总能找到一个Q,满足上式。但对于m元码,当n为任意正整数时,不一定能找到一个Q满足上式,此时,可以人为地增加一些值为零的信号以满足上式。然后取值最小的m个信号合并成一个新信号,并把这些信号的值相加作为该新信号的值,重新由大到小排序,再取最小的m个信号合并,如此下去。
m元的H码编码步骤如下:
(1)    验证所给n是否满足上式,若不满足,可以人为地增加一些值为零的信号,以使最后一步有m个信号;
(2)    取最小的m个符号合并成一个新信号,并分别用0,1,…,m-1给各分支赋值,把这些信号的值相加作为该新信号的值;
(3)    将新信号和剩下信号重新排序,重复(2)。
(4)    从最后一级开始,向前返回,就得出各信号所对应的符号序列,即为各信号对应的码字。
后来新加的值为零的信号,虽也赋予码字,但实际上是冗余码字,并未用上,但这样编成的码,仍是最佳的,也就是平均码长最短,如果等值信号排队时注意到顺序,则码长的方差也是最小的。
例如:
已知
 
其三元编码如下图所示:
 
四元编码如下图:
 
要求:
编写代码,设有50个信号,用二种方法,运行程序后,显现下面的参考界面:
H码编码
============
1.方法A
2.方法B
请选择(1或2 ,0:退出):
选择一个菜单后,要求输入码元数N,N取值范围为2~16。输入后,显示编码结果。
 
搜索更多相关主题的帖子: 外国人 技术 领域 模型 通信 
2013-12-31 09:26
peach5460
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:武汉
等 级:贵宾
威 望:30
帖 子:2780
专家分:6060
注 册:2008-1-28
收藏
得分:10 
有兴趣的初学者可以做一下...

我总觉得授人以鱼不如授人以渔...
可是总有些SB叫嚣着:要么给代码给答案,要么滚蛋...
虽然我知道不要跟SB一般见识,但是我真的没修炼到宠辱不惊...
2013-12-31 10:15
caop0307
Rank: 1
等 级:新手上路
帖 子:4
专家分:4
注 册:2013-12-30
收藏
得分:0 
实习急用
2013-12-31 14:05
whisper_time
Rank: 2
等 级:论坛游民
帖 子:6
专家分:10
注 册:2013-12-30
收藏
得分:10 
曹鹏你就不要来丢人了
2013-12-31 14:23
快速回复:需c++huffman编码 要求在下
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.021832 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved