Haffman 编码

Haffman 编码 根据字符在文件中出现频率不同建立一个用0,1串表示字符的最优方式。
给出现频率高的字符用较短的编码,出现频率较低的字符用较长的编码,达到整体编码最少的目的。//   使用不同长度(位数)的编码来表示各字符的最优
构造Haffman树:
哈夫曼提出构造 最优前缀码 的 贪心算法,由此产生的编码方案称为哈夫曼编码:
若C是编码字符集,表示其最优前缀码的二叉树中恰有|C|个叶子
如 用 0 1 编码 ,有2个叶节点
先选两个最小的节点,合并,然后继续选择两个最小节点,合并,知道最后构成一棵树为止!

const string &shorterString(const string &s1,const string &s2)
{
return s1.size() < s2.size ? s1 :s2;
}


cout<< shortString(s1,s2)<<endl;
cout<<(s1.size <s2.size ? s1 : s2)<<endl;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
(1) 输入一个字符串用结构体链表存储字符串中出现的不同字符及其出现的次数。 (2) 定义赫夫曼数的结点结构体,把不同的字符及其在字符串中出现的次数作为叶子结点的元素及其权值,统计叶子结点的个数n,开辟可以存储2*n个结点的顺序表,来赫夫曼树的各个结点,然后按照一定的规则构造赫夫曼树。 (3) 开辟一个可以存储叶子结点元素及指向存储其赫夫曼编码链表的指针的顺序表,然后从叶子结点开始向上访问,是左孩子的把“0”接进链表是右孩子的把“1”接进链表,直到根结点,然后把叶子结点的元素及存储其赫夫曼链表的头指针读入顺序表,直到把所有的叶子结点的元素及指向存储其赫夫曼编码链表的头指针读入顺序表,这样得到的赫夫曼编码是倒序的。 (4) 从存储其叶子结点及指向存储其赫夫曼编码链表头指针的顺序表表头开始顺序访问各元素,在输出其赫夫曼编码之前,把链表中的编码顺序读入到等长的栈中,然后编码出栈就会得到顺序的赫夫曼编码,直到把所有的叶子结点都访问到。 (5) 用一个字符型的指针指向字符串的第一个字符,从存储叶子结点元素及指向存储其赫夫曼编码链表的头指针的顺序表表头开始访问顺序表中的各元素,直到找到叶子结点的元素和当前字符相等就结束访输出赫夫曼编码,回到表头,指针后移,直到输出字符串的最后一个字符的赫夫曼编码,这样就得到输入字符串的赫夫曼编码

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值