python实现huffman编码_Python实现huffman编码
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编码相关推荐
- python声明编码_Python 2.x 编码声明:是coding:utf-8还是coding=urf-8呢
我一般在Linux上的写法是: #!/usr/bin/env python # -*- coding: utf-8 -*- 我们知道在Python源码的头文件中要声明编码方式,如果你不只是会用到asc ...
- python设置文件编码_python修改文件编码为utf-8格式
原博文 2019-12-02 17:11 − 简单实现.h,.c文件修改编码为utf-8格式. import os; import chardet; file_path = "." ...
- python转换字符编码_Python常见字符编码间的转换
学习Python,字符编码间的转换是绕不过去的一只拦路虎,不把编码彻底搞明白,总有一天它会猝不及防坑你一把. Python2.x和Python3.x在字符编码的设置上也有很大区别(Python3未来将 ...
- python 输出字符串编码_Python print 字符串编码问题
又一次, 被Python的编码问题搞得焦头烂额. 过去的记忆中, Python给我的印象之一就是让人痛不欲生的编码问题, 后来基本不碰Python很可能与此有关. 这次又用到Python了, 基本上, ...
- python设置默认utf8编码_Python设置默认编码为utf8的方法
本文实例讲述了python设置默认编码为utf8的方法.分享给大家供大家参考,具体如下: 这是Python的编码问题,设置python的默认编码为utf8 python安装目录:/etc/python ...
- python实现base64解码_Python实现base64编码解码
Python实现base64编码解码 通过编程了解base64编码解码过程 (纯属无聊之举,且不支持汉字) a = input("输入(1.base64加密/2.base64解密):&quo ...
- python中utf-8编码_Python 使用 UTF-8 编码(转)
一般我喜欢用 utf-8 编码,在 python 怎么使用呢? 1.在 python 源码文件中用 utf-8 文字.一般会报错,如下: File "F:\workspace\psh\src ...
- python编码使用ascii编码_Python中的编码问题:ASCII码 Unicoden编码 UTF-8编码
编码 字符串是一种数据类型,但是,字符串比较特殊的是还有一个编码问题. 因为计算机只能处理数字,如果要处理文本,就必须先把文本转换为数字才能处理.最早的计算机在设计时采用8个比特(bit)作为一个字节 ...
- python文本文件读取失败_Python 读取文本文件编码错误解决方案(未知文本文件编码情况下解决方案)...
很多情况下我们是这样读取文本文件的: with open(r'F:\.Python Project\spidertest1\test\pdd凉席.txt', 'r') as f: text = f.r ...
最新文章
- C语言内存管理超详解
- 让SpringMVC Restful API优雅地支持多版本
- 把 charles,Fiddler 证书安装到安卓根目录,解决安卓微信 7.0 版本以后安装证书也无法抓包问题,需要 root
- nginx学习笔记002---Nginx代理配置_案例1_实现了对前端代码的方向代理_并且配置了后端api接口的访问地址
- win32开发(图形绘制)
- GOF23种设计模式在Java中的应用(part 1)
- Eigen中的map
- 究竟先操作缓存,还是数据库?
- arcgis分析道路节点中心性degree,closeness,betweenness
- java xml特殊字符_mybatis xml中特殊字符处理及特殊符号
- MATLAB电话拨号音仿真,MATLAB电话拨号音的合成与识别
- 使用Typora编辑器编写md文档插入图片方法
- 使用Qt绘制二维码 QRcode
- DWG格式的数据如何转换投影?
- python定义一个匿名函数使用什么关键字_python3----函数、匿名函数
- clr 面试_C# 常见面试问题汇总
- 第十四届蓝桥杯大赛软件赛省赛 C/C++ 大学 B 组
- camera 成像原理
- flickr的奇怪的认证过程
- infoQ 百度技术沙龙第25期回顾:海量数据处理技术解析