Huffman树建立,右大左小

如arr = [(‘a’,15),(‘b’,8),(‘c’,6),(‘e’,5),(‘e’,3),(‘f’,1)]

Step1:根据values排序,生成:[(‘a’,15),(‘b’,8),(‘c’,6),(‘e’,5),(‘e’,3),(‘f’,1)]。

Step2: e,f值最小,从arr中取出,作左右孩子节点,e+f =4作为父节点(p1)。更新arr,重新排序;arr =[(‘a’,15),(‘b’,8),(‘c’,6),(‘e’,5),(‘p1’,4)]

Step3: 重复step2, b和p1值最小,作为左右孩子,e+p1 =9作为父节点(p2)。更新arr,重新排序;arr =[[(‘a’,15),(‘p2’,9),(‘b’,8),(‘c’,6)]

class Node():

def __init__(self,name=None,value=None):

self.name = name

self.value = value

self.right = None

self.left = None

class HuffmanTree():

def __init__(self,arr):

self.nodes = [Node(values[0],values[1]) for values in arr] #每个值生成node

while len(self.nodes)!= 1: #第一个作为root,所以不等于1

self.nodes.sort(key =lambda node:node.value, reverse= True) #step1

# step2

p = Node(value = (self.nodes[-1].value + self.nodes[-2].value)) #作为父节点

p.left = self.nodes.pop(-1)

p.right = self.nodes.pop(-1)

self.nodes.append(p)

self.root = self.nodes[0]

self.Code = list(range(10)) #用于储存编码的code,长度比数深度大就行

#生成Huffman编码

def HuffmanCode(self,tree,length):

node = tree

if (not node):

return

elif node.name:

result = str(node.name)+'的编码为:'

for i in range(length):

result += str(self.Code[i])

print(result)

return

self.Code[length] = 0

self.HuffmanCode(tree.left,length +1)

self.Code[length] = 1

self.HuffmanCode(tree.right,length+1)

def GenCode(self):

self.HuffmanCode(self.root,0)

if __name__=='__main__':

arr = [('a',15),('b',8),('c',6),('e',5),('e',3),('f',1)]

tree=HuffmanTree(arr)

tree.GenCode()

输出:

a的编码为:0

f的编码为:1000

e的编码为:1001

e的编码为:101

c的编码为:110

b的编码为:111

原文链接:https://blog.csdn.net/wo_renshen/article/details/111992426

python实现huffman编码_Python实现huffman编码相关推荐

  1. python声明编码_Python 2.x 编码声明:是coding:utf-8还是coding=urf-8呢

    我一般在Linux上的写法是: #!/usr/bin/env python # -*- coding: utf-8 -*- 我们知道在Python源码的头文件中要声明编码方式,如果你不只是会用到asc ...

  2. python设置文件编码_python修改文件编码为utf-8格式

    原博文 2019-12-02 17:11 − 简单实现.h,.c文件修改编码为utf-8格式. import os; import chardet; file_path = "." ...

  3. python转换字符编码_Python常见字符编码间的转换

    学习Python,字符编码间的转换是绕不过去的一只拦路虎,不把编码彻底搞明白,总有一天它会猝不及防坑你一把. Python2.x和Python3.x在字符编码的设置上也有很大区别(Python3未来将 ...

  4. python 输出字符串编码_Python print 字符串编码问题

    又一次, 被Python的编码问题搞得焦头烂额. 过去的记忆中, Python给我的印象之一就是让人痛不欲生的编码问题, 后来基本不碰Python很可能与此有关. 这次又用到Python了, 基本上, ...

  5. python设置默认utf8编码_Python设置默认编码为utf8的方法

    本文实例讲述了python设置默认编码为utf8的方法.分享给大家供大家参考,具体如下: 这是Python的编码问题,设置python的默认编码为utf8 python安装目录:/etc/python ...

  6. python实现base64解码_Python实现base64编码解码

    Python实现base64编码解码 通过编程了解base64编码解码过程 (纯属无聊之举,且不支持汉字) a = input("输入(1.base64加密/2.base64解密):&quo ...

  7. python中utf-8编码_Python 使用 UTF-8 编码(转)

    一般我喜欢用 utf-8 编码,在 python 怎么使用呢? 1.在 python 源码文件中用 utf-8 文字.一般会报错,如下: File "F:\workspace\psh\src ...

  8. python编码使用ascii编码_Python中的编码问题:ASCII码 Unicoden编码 UTF-8编码

    编码 字符串是一种数据类型,但是,字符串比较特殊的是还有一个编码问题. 因为计算机只能处理数字,如果要处理文本,就必须先把文本转换为数字才能处理.最早的计算机在设计时采用8个比特(bit)作为一个字节 ...

  9. python文本文件读取失败_Python 读取文本文件编码错误解决方案(未知文本文件编码情况下解决方案)...

    很多情况下我们是这样读取文本文件的: with open(r'F:\.Python Project\spidertest1\test\pdd凉席.txt', 'r') as f: text = f.r ...

最新文章

  1. C语言内存管理超详解
  2. 让SpringMVC Restful API优雅地支持多版本
  3. 把 charles,Fiddler 证书安装到安卓根目录,解决安卓微信 7.0 版本以后安装证书也无法抓包问题,需要 root
  4. nginx学习笔记002---Nginx代理配置_案例1_实现了对前端代码的方向代理_并且配置了后端api接口的访问地址
  5. win32开发(图形绘制)
  6. GOF23种设计模式在Java中的应用(part 1)
  7. Eigen中的map
  8. 究竟先操作缓存,还是数据库?
  9. arcgis分析道路节点中心性degree,closeness,betweenness
  10. java xml特殊字符_mybatis xml中特殊字符处理及特殊符号
  11. MATLAB电话拨号音仿真,MATLAB电话拨号音的合成与识别
  12. 使用Typora编辑器编写md文档插入图片方法
  13. 使用Qt绘制二维码 QRcode
  14. DWG格式的数据如何转换投影?
  15. python定义一个匿名函数使用什么关键字_python3----函数、匿名函数
  16. clr 面试_C# 常见面试问题汇总
  17. 第十四届蓝桥杯大赛软件赛省赛 C/C++ 大学 B 组
  18. camera 成像原理
  19. flickr的奇怪的认证过程
  20. infoQ 百度技术沙龙第25期回顾:海量数据处理技术解析

热门文章

  1. vue+vuetify项目
  2. python os.environ
  3. 【STM32学习】SysTick定时器(嘀嗒定时器)
  4. (VS2010)C语言浅尝冒泡排序
  5. Ubuntu 20.04 服务器的R中安装 Rtools / devtools
  6. cba篮球暂停次数和时间_关于篮球CBA官方暂停规则的体会
  7. 违反 GPL 协议,法院判罚了!国内首例
  8. 统一日志处理(Logback日志工具)
  9. vue-router如何使用?,vue-router使用步骤
  10. Linux 测试 IO 性能(磁盘读写速度)