Huffman实现对26个英文字母的编码

题目:应用Huffman编码实现对26个字母的编码。已知各字母出现频率如下图所示:


以下是生成霍夫曼树的一个示例:

  1. 利用字符集中每个字符的使用频率作为权值构造一个哈夫曼树;
  2. 从根结点开始,为到每个叶子结点路径上的左分支赋予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个英文字母的编码相关推荐

  1. 由数字、26个英文字母、下划线或汉字的正则表达式

    2019独角兽企业重金招聘Python工程师标准>>> 1.由数字.26个英文字母或者下划线组成的字符串: ^[0-9a-zA-Z_]{1,}$ 2.非负整数(正整数 + 0 ): ...

  2. java程序a-z b-y,请完成下列Java程序:对大写的26个英文字母加密,从键盘输入一个大写字母串,输出这个串加密后的结 - 赏学吧...

    请完成下列Java程序:对大写的26个英文字母加密,从键盘输入一个大写字母串,输出这个串加密后的结果.加密操作是将字母变换成倒序的大写字母,如A->Z,B->Y. 注意:请勿改动main( ...

  3. bp神经网络matlab代码_基于Matlab的BP神经网络识别26个英文字母

    一.设计思想 字符识别在现代日常生活的应用越来越广泛,比如车辆牌照自动识别系统,手写识别系统,办公自动化等等.本文采用BP网络对26个英文字母进行识别.首先将待识别的26个字母中的每一个字母都通过长和 ...

  4. jsp未正确拼写字 mysql_江西26个英文字母的正确拼写方式

    原标题:江西26个英文字母的正确拼写方式 你听说过26个字母吗? 对,就是"歪果仁"的字母表 那你知道江西和这26个字母之间的联系吗? 那不二叔来普及一下 "26个字母与 ...

  5. Java小技巧输出26个英文字母,不用一个一个手打

    在实际需求中,可能会遇到需要循环产生26个英文字母,一个一个输出肯定会累死,看看下面这种方式: String name; for(int i = 1;i<=26;i++){name = Stri ...

  6. 计算机英语格式怎么写,26个英文字母,正确的书写格式,孩子真的会吗?

    尽管这是互联网时代,但许多传统的事物还是不能忘记的,例如用笔书写. 不仅汉字在格式上特别重要,而且英文字母的写作也很特别. 尽管许多孩子从小学开始就学习英语,而且26字母的写作也很方便,他们真的还好吗 ...

  7. [程序员学英语]26个英文字母

    英文中最基础.最基础的当然是26个字母了,很多人可能觉得这个太简单了.但是经常也会遇到到一些人不能对这些单词正确的发音.可能是以前教我们的老师本来就教得不对.或者一部分人可能会带有地方口音以至于不能正 ...

  8. java输出26个字母_Java语言:输出26个英文字母(从键盘输入)

    程序要求:输出26个英文字母,从键盘输入字符a,然后26个字母分两行进行输出,每十三个字母一行 程序如下 import java.util.Scanner; public class Demo { p ...

  9. 随机生成26个英文字母

    随机生成26个英文字母,很简单,就是把26个英文字母当成一个字符串,然后随机生成26个数的坐标,然后得到随机的字母. 代码如下: Random rd=new Random();         int ...

  10. 怎样用python提取英文字母_python如何获取一次获取26个英文字母

    第一种方法,也是最笨的方法,自己输入. 第二种方法,使用string方法 string.ascii_uppercase,26大写英文字母 string.ascii_lowercase,26个小写英文字 ...

最新文章

  1. P1049 装箱问题
  2. 如何解决多线程并发问题
  3. Java线程同步:synchronized锁住的是代码还是对象
  4. 限时免费报名丨网易新消费CXO论坛 - 深圳站
  5. NameError: name 'long' is not defined
  6. win7系统0xt000000f错误代码的解决方法
  7. ROS在编译生成自定义消息时报错ModuleNotFoundError: No module named 'em'
  8. scp shell脚本无需密码输入
  9. ZR_DJYVP2阻燃型计算机电缆,阻燃计算机电缆ZR-DJYVP 1*3*1.5
  10. 距离矢量路由算法_计算机网络自学笔记:选路算法
  11. LayaAir 对象池 laya.utils.Pool
  12. Python TAB 补齐
  13. 关于Docker镜像再封装的详细文档
  14. 国家信息安全等级保护三级认证(三级等保设置以及注意点)
  15. 万里汇WorldFirst人民币提现,1天内到账,太快了!
  16. 机器学习虾扯淡之线性回归No.39
  17. 在云端管理您的所有身份(AAD)-第二部分
  18. 服务器虚拟机控制台打不开,OpenStack虚拟机控制台打不开
  19. 魅族m15简单开启Usb调试模式的步骤
  20. xp系统中如何修复浏览器打不开的问题

热门文章

  1. 腾讯刷屏!一季度狂赚478亿,员工人均月薪7.6万
  2. c语言中平方根函数(sqrt)
  3. zen-cart修改 zencart 模板修改
  4. EasyExcel 实现冻结行和列
  5. Pandas基础|列方向分组变形
  6. 红细胞识别matlab,图像处理—红细胞计数(Matlab).doc
  7. html中单元格向下合并单元格,html中单元格合并 HTML 怎么给合并单元格设置宽度...
  8. 2022年PYTHON应用行业,PYTHON就业方向
  9. 手机裁剪圆角图片_Photoshop裁剪圆角图片方法
  10. OSChina 周五乱弹 —— 企鹅尼克号