Huffman实现对26个英文字母的编码
Huffman实现对26个英文字母的编码
题目:应用Huffman编码实现对26个字母的编码。已知各字母出现频率如下图所示:
以下是生成霍夫曼树的一个示例:
- 利用字符集中每个字符的使用频率作为权值构造一个哈夫曼树;
- 从根结点开始,为到每个叶子结点路径上的左分支赋予0,右分支赋予1,并从根到叶子方向形成该叶子结点的编码。
用 python 实现上述题目中的要求:
#树节点类构建
class Node(object):def __init__(self,name=None,value=None):self._name=nameself._value=valueself._left=Noneself._right=None#哈夫曼树类
class HuffmanTree(object):#根据Huffman树的思想:以节点为基础,反向建立Huffman树def __init__(self,char_weights):self.Leav=[Node(part[0],part[1]) for part in char_possibility] #根据输入的字符及其频率生成节点while len(self.Leav)!=1: self.Leav.sort(key=lambda node:node._value,reverse=True) # 逆向排序c=Node(value=(self.Leav[-1]._value+self.Leav[-2]._value)) # 以最小两个结点的值相加成为新节点c._left=self.Leav.pop(-1)c._right=self.Leav.pop(-1)self.Leav.append(c)self.root=self.Leav[0]self.Buffer=list(range(10)) #用递归的思想生成编码def pre(self,tree,length):node=treeif (not node):returnelif node._name:print (node._name + ' encoding:',end=''),for i in range(length):print (self.Buffer[i],end='')print ('\n')returnself.Buffer[length]=0self.pre(node._left,length+1)self.Buffer[length]=1self.pre(node._right,length+1)# 生成霍夫曼编码 def get_code(self):self.pre(self.root,0)if __name__=='__main__':#输入的是字符及其频率char_possibility=[('A',7.25),('B',1.25),('C',3.5),('D',4.25),('E',12.75),('F',3),('G',2),('H',3.5),('I',7.75),('J',0.25),('K',0.5),('L',3.75),('M',2.75),('N',7.75),('O',7.5),('P',2.75),('Q',0.5),('R',8.5),('S',6),('T',9.25),('U',3),('V',1.5),('W',1.5),('X',0.5),('Y',2.25),('Z',0.25)]tree=HuffmanTree(char_possibility)tree.get_code()
最后得到 26个字母 编码结果如下所示:
符号 | 频率 | 分配的代码 | 码长 |
---|---|---|---|
A | 7.25 | 1010 | 4 |
B | 1.25 | 001100 | 6 |
C | 3.5 | 10011 | 5 |
D | 4.25 | 0010 | 4 |
E | 12.75 | 011 | 3 |
F | 3 | 10000 | 5 |
G | 2 | 11010 | 5 |
H | 3.5 | 10010 | 5 |
I | 7.75 | 1101 | 4 |
J | 0.25 | 100011101 | 9 |
K | 0.5 | 10001101 | 8 |
L | 3.75 | 11100 | 5 |
M | 2.75 | 01000 | 5 |
N | 7.75 | 1100 | 4 |
O | 7.5 | 1011 | 4 |
P | 2.75 | 00111 | 5 |
Q | 0.5 | 10001100 | 8 |
R | 8.5 | 1111 | 4 |
S | 6 | 0101 | 4 |
T | 9.25 | 000 | 3 |
U | 3 | 01001 | 5 |
V | 1.5 | 100010 | 6 |
W | 1.5 | 001101 | 6 |
X | 0.5 | 10001111 | 8 |
Y | 2.25 | 111011 | 6 |
Z | 0.25 | 100011100 | 9 |
Huffman实现对26个英文字母的编码相关推荐
- 由数字、26个英文字母、下划线或汉字的正则表达式
2019独角兽企业重金招聘Python工程师标准>>> 1.由数字.26个英文字母或者下划线组成的字符串: ^[0-9a-zA-Z_]{1,}$ 2.非负整数(正整数 + 0 ): ...
- java程序a-z b-y,请完成下列Java程序:对大写的26个英文字母加密,从键盘输入一个大写字母串,输出这个串加密后的结 - 赏学吧...
请完成下列Java程序:对大写的26个英文字母加密,从键盘输入一个大写字母串,输出这个串加密后的结果.加密操作是将字母变换成倒序的大写字母,如A->Z,B->Y. 注意:请勿改动main( ...
- bp神经网络matlab代码_基于Matlab的BP神经网络识别26个英文字母
一.设计思想 字符识别在现代日常生活的应用越来越广泛,比如车辆牌照自动识别系统,手写识别系统,办公自动化等等.本文采用BP网络对26个英文字母进行识别.首先将待识别的26个字母中的每一个字母都通过长和 ...
- jsp未正确拼写字 mysql_江西26个英文字母的正确拼写方式
原标题:江西26个英文字母的正确拼写方式 你听说过26个字母吗? 对,就是"歪果仁"的字母表 那你知道江西和这26个字母之间的联系吗? 那不二叔来普及一下 "26个字母与 ...
- Java小技巧输出26个英文字母,不用一个一个手打
在实际需求中,可能会遇到需要循环产生26个英文字母,一个一个输出肯定会累死,看看下面这种方式: String name; for(int i = 1;i<=26;i++){name = Stri ...
- 计算机英语格式怎么写,26个英文字母,正确的书写格式,孩子真的会吗?
尽管这是互联网时代,但许多传统的事物还是不能忘记的,例如用笔书写. 不仅汉字在格式上特别重要,而且英文字母的写作也很特别. 尽管许多孩子从小学开始就学习英语,而且26字母的写作也很方便,他们真的还好吗 ...
- [程序员学英语]26个英文字母
英文中最基础.最基础的当然是26个字母了,很多人可能觉得这个太简单了.但是经常也会遇到到一些人不能对这些单词正确的发音.可能是以前教我们的老师本来就教得不对.或者一部分人可能会带有地方口音以至于不能正 ...
- java输出26个字母_Java语言:输出26个英文字母(从键盘输入)
程序要求:输出26个英文字母,从键盘输入字符a,然后26个字母分两行进行输出,每十三个字母一行 程序如下 import java.util.Scanner; public class Demo { p ...
- 随机生成26个英文字母
随机生成26个英文字母,很简单,就是把26个英文字母当成一个字符串,然后随机生成26个数的坐标,然后得到随机的字母. 代码如下: Random rd=new Random(); int ...
- 怎样用python提取英文字母_python如何获取一次获取26个英文字母
第一种方法,也是最笨的方法,自己输入. 第二种方法,使用string方法 string.ascii_uppercase,26大写英文字母 string.ascii_lowercase,26个小写英文字 ...
最新文章
- P1049 装箱问题
- 如何解决多线程并发问题
- Java线程同步:synchronized锁住的是代码还是对象
- 限时免费报名丨网易新消费CXO论坛 - 深圳站
- NameError: name 'long' is not defined
- win7系统0xt000000f错误代码的解决方法
- ROS在编译生成自定义消息时报错ModuleNotFoundError: No module named 'em'
- scp shell脚本无需密码输入
- ZR_DJYVP2阻燃型计算机电缆,阻燃计算机电缆ZR-DJYVP 1*3*1.5
- 距离矢量路由算法_计算机网络自学笔记:选路算法
- LayaAir 对象池 laya.utils.Pool
- Python TAB 补齐
- 关于Docker镜像再封装的详细文档
- 国家信息安全等级保护三级认证(三级等保设置以及注意点)
- 万里汇WorldFirst人民币提现,1天内到账,太快了!
- 机器学习虾扯淡之线性回归No.39
- 在云端管理您的所有身份(AAD)-第二部分
- 服务器虚拟机控制台打不开,OpenStack虚拟机控制台打不开
- 魅族m15简单开启Usb调试模式的步骤
- xp系统中如何修复浏览器打不开的问题
热门文章
- 腾讯刷屏!一季度狂赚478亿,员工人均月薪7.6万
- c语言中平方根函数(sqrt)
- zen-cart修改 zencart 模板修改
- EasyExcel 实现冻结行和列
- Pandas基础|列方向分组变形
- 红细胞识别matlab,图像处理—红细胞计数(Matlab).doc
- html中单元格向下合并单元格,html中单元格合并 HTML 怎么给合并单元格设置宽度...
- 2022年PYTHON应用行业,PYTHON就业方向
- 手机裁剪圆角图片_Photoshop裁剪圆角图片方法
- OSChina 周五乱弹 —— 企鹅尼克号