关于哈夫曼树怎么构建的、哈夫曼编码怎么求,请参考
哈夫曼树及python实现
这些基础的东西就不在这里阐述了,本文直接上代码。
参考链接:哈夫曼树的 Python 实现

哈夫曼树的构建和编码

'''huffman编码
'''
import copyclass Node:def __init__(self, name, weight):self.name = name #节点名self.weight = weight #节点权重self.left = None #节点左孩子self.right = None #节点右孩子self.father = None # 节点父节点#判断是否是左孩子def is_left_child(self):return self.father.left == self#创建最初的叶子节点
def create_prim_nodes(data_set, labels):if(len(data_set) != len(labels)):raise Exception('数据和标签不匹配!')nodes = []for i in range(len(labels)):nodes.append( Node(labels[i],data_set[i]) )return nodes# 创建huffman树
def create_HF_tree(nodes):#此处注意,copy()属于浅拷贝,只拷贝最外层元素,内层嵌套元素则通过引用,而不是独立分配内存tree_nodes = nodes.copy() while len(tree_nodes) > 1: #只剩根节点时,退出循环tree_nodes.sort(key=lambda node: node.weight)#升序排列new_left = tree_nodes.pop(0)new_right = tree_nodes.pop(0)new_node = Node(None, (new_left.weight + new_right.weight))new_node.left = new_leftnew_node.right = new_rightnew_left.father = new_right.father = new_nodetree_nodes.append(new_node)tree_nodes[0].father = None #根节点父亲为Nonereturn tree_nodes[0] #返回根节点#获取huffman编码
def get_huffman_code(nodes):codes = {}for node in nodes:code=''name = node.namewhile node.father != None:if node.is_left_child():code = '0' + codeelse:code = '1' + codenode = node.fathercodes[name] = codereturn codesif __name__ == '__main__':labels = ['a','b','c','d','e','f']data_set = [9,12,6,3,5,15]nodes = create_prim_nodes(data_set,labels)#创建初始叶子节点root = create_HF_tree(nodes)#创建huffman树codes = get_huffman_code(root, nodes)#获取huffman编码#打印huffman码for key in codes.keys():print(key,': ',codes[key])

运行结果如下:

a :  00
b :  01
c :  100
d :  1010
e :  1011
f :  11

哈夫曼编码+python实现相关推荐

  1. 哈夫曼编码原理与Python实现代码(附手动推导过程原稿真迹)

    哈夫曼编码依据字符出现概率来构造异字头(任何一个字符的编码都不是其他字符的前缀)的平均长度最短的码字,通过构造二叉树来实现,出现频次越多的字符编码越短,出现频次越少的字符编码越长.为了演示哈夫曼编码原 ...

  2. Python数据结构11:树的实现,树的应用,前中后序遍历,二叉查找树BST,平衡二叉树AVL树,哈夫曼树和哈夫曼编码

    1.概念 树一种基本的"非线性"数据结构. 相关术语: 节点Node:组成树的基本部分.每个节点具有名称,或"键值",节点还可以保存额外数据项,数据项根据不同的 ...

  3. 5.1 Python图像处理之图像编码-哈夫曼编码

    5.1 Python图像处理之图像编码-哈夫曼编码 文章目录 5.1 Python图像处理之图像编码-哈夫曼编码 1 算法原理 2 代码 3 效果 1 算法原理 哈夫曼编码是一种根据词频变化的变长二进 ...

  4. 用Python对图像哈夫曼编码

    图像处理课要求对一幅图像进行哈夫曼编码/解码,并计算编码效率和平均编码长度.哈夫曼编码的原理就不写了,也可以在网上找到比较详细的介绍,比如这个博客.这种数据结构方面的代码其实最好用C写,用Python ...

  5. Python 代码实现哈夫曼编码

    一.哈夫曼编码是什么? 哈夫曼编码(Huffman Coding),又称霍夫曼编码,是一种编码方式,可变字长编码(VLC)的一种.Huffman于1952年提出一种编码方法,该方法完全依据字符出现概率 ...

  6. Python实现英文文本的霍夫曼编码压缩

    霍夫曼编码作为变长码,在已知字符出现的频率的前提下,将频率高的字符用短码表示,频率低的字符用长码表示,实现用最短的码符号完整的表示出一段文本的信息. 例如 对于 这样一文本,进行字符频率统计,部分结果 ...

  7. Python+Qt 使用哈夫曼编码对文本文件进行压缩,解压缩

    from Huffman_Ui import * from PyQt5.QtWidgets import * from PyQt5.QtCore import * from PyQt5.QtGui i ...

  8. 算法导论——贪心算法:哈夫曼编码(霍夫曼编码)

    2019独角兽企业重金招聘Python工程师标准>>> package org.loda.greedy;import org.junit.Test; import org.loda. ...

  9. Huffman(哈夫曼)编码--又称最佳编码(最有效的二进制编码)

    2019独角兽企业重金招聘Python工程师标准>>> 在看一道Google笔试题时用到哈夫曼编码,于是去搜了下资料.题目如下: 用二进制来编码字符串"abcdabaa&q ...

最新文章

  1. 脑电情绪识别:脑功能连接网络与局部激活信息结合
  2. ssrf漏洞内网渗透_渗透技巧之SSRF
  3. 《孙子兵法》【火攻第十二】
  4. Prometheus监控学习笔记之PromQL简单示例
  5. ARINC429总线收发器 -- HI-3582调试记录
  6. 软件平台与中间技术复习
  7. linux系统怎么使用r语言,linux命令行下使用R语言绘图
  8. Docker Windows Containers
  9. 室内定位如何介入工业互联网背景
  10. 某某行政处罚文书网 (请求参数: ciphertext)
  11. 前端工程师简历怎么写才更容易进入面试呢?
  12. seaborn调色板 color, hls, cubehelix, dark, diverging_palette
  13. 解决Hander dispatch failed;nested exception is java .lang. AbstractMethodError:Method com/mchange/v2/c
  14. HttpClient使用详解 get与post请求
  15. Android开发UI新技能,你get这个新技能了吗?(附源码详解)
  16. 工程伦理--13.4 临平净水厂化解“邻避效应”的对策
  17. Cris 的Python日记(三):循环语句
  18. 让BAT执行php程序,不错哦!
  19. 玩转数据,和echar
  20. 结构体内容引用自非结构体数组对象_类和对象

热门文章

  1. 人才为王,语音识别技术并非高不可攀
  2. python的数字类型有哪些子类型_PYTHON-基本数据类型-数字类型,字符串类型,列表类型-练习...
  3. Ajax实现搜索提示框~超级详细
  4. this.$router.push用query传参对象时需注意的地方
  5. 结构体中操作c语言,C语言中结构体的操作
  6. mysql选择前12周_第十二周作业
  7. 【java笔记】IDEA debug调试
  8. FFmpeg源代码简单分析:configure
  9. 常用编码软件简单使用记录 1 : 自主编码器
  10. node代理请求 vue_vue-cli项目开发/生产环境代理实现跨域请求+webpack配置开发/生产环境的接口地址...