程序

import numpy as np
import queueimage = np.array([[3,1,2,4],[2,4,0,2],[2,2,3,3],[2,4,4,2],]
)
hist=np.bincount(image.ravel(), minlength=5)
probabilities = hist/np.sum(hist)def get2smallest(data):first=second =1;fid=sid =0for idx,element in enumerate(data):if(element<first):second = firstsid = fidfirst = elementfid - idxelif (element <second and element !=first):second = elementreturn fid,first,sid,secondclass Node:def __init__(self):self.prob = Noneself.code = Noneself.data = Noneself.left = Noneself.right = Nonedef __lt__(self, other):if (self.prob< other.prob):return 1else:return 0def __ge__(self, other):if(self.prob>other.prob):return 1else:return 0def tree(probabilities):prq = queue.PriorityQueue()for color,probability in enumerate(probabilities):leaf = Node()leaf.data = colorleaf.prob = probabilityprq.put(leaf)while(prq.qsize()>1):newnode = Node()l = prq.get()r = prq.get()newnode.left = lnewnode.right = rnewprob = l.prob+r.probnewnode.prob = newprobprq.put(newnode)return prq.get()def huffman_traversal (root_node, tmp_array, f):if (root_node.left is not None):tmp_array[huffman_traversal.count] = 1huffman_traversal.count +=1huffman_traversal(root_node.left, tmp_array, f)huffman_traversal.count -=1if (root_node.right is not None):tmp_array[huffman_traversal.count] = 0huffman_traversal.count +=1huffman_traversal(root_node.right, tmp_array, f)huffman_traversal.count -=1else:huffman_traversal.output_bits[root_node.data] = huffman_traversal.countbitstream = ''.join(str(cell) for cell in tmp_array[1:huffman_traversal.count])color = str(root_node.data)wr_str = color + ''+bitstream + '\n'f.write(wr_str)returnroot_node = tree(probabilities)
tmp_array = np.ones([4], dtype=int)
huffman_traversal.output_bits = np.empty(5, dtype=int)
huffman_traversal.count = 0
f = open('codes.txt', 'w')
huffman_traversal(root_node, tmp_array, f)

结果

后续

如果想了解更多物联网、智能家居项目知识,可以关注我的项目实战专栏。
或者关注公众号。

编写不易,感谢支持。

哈夫曼树(利用python实现)相关推荐

  1. 怎么用python实现哈夫曼树_数据结构-哈夫曼树(python实现)

    好,前面我们介绍了一般二叉树.完全二叉树.满二叉树,这篇文章呢,我们要介绍的是哈夫曼树. 哈夫曼树也叫最优二叉树,与哈夫曼树相关的概念还有哈夫曼编码,这两者其实是相同的.哈夫曼编码是哈夫曼在1952年 ...

  2. 常用数据结构之线索二叉树和哈夫曼树

    1.线索二叉树 上一篇二叉树中,我们介绍了基本的二叉树的结构.每一个父节点对应两个子节点,左子节点和右子节点.其中我们会看到,很多节点的左右节点都为null,为了更高效的存储和遍历,我们考虑一种方式将 ...

  3. 数据结构“基于哈夫曼树的数据压缩算法”的实验报告

    一个不知名大学生,江湖人称菜狗 original author: jacky Li Email : 3435673055@qq.com Last edited: 2022.11.20 目录 数据结构& ...

  4. 数据结构 基于哈夫曼树的数据压缩算法

    数据结构 基于哈夫曼树的数据压缩算法 实验目的 实验内容 实验提示 实验代码 实验小结 实验目的 1.掌握哈夫曼树的构造算法. 2.掌握哈夫曼编码的构造算法. 实验内容 问题描述 输入一串字符串,根据 ...

  5. python实现哈夫曼树的可视化

    标题 1,允许转载,只需在该博客下的评论下评论,并附上自己的博客地址即可 2,不允许伪原创 3,其他暂议 1.配置pip安装工具 在python的文件下找到script文件夹 打开文件夹Scripts ...

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

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

  7. python哈夫曼树_python霍夫曼树

    class Node(): data=0 left=None right=None father=None def __init__(self,data,left,right): self.data= ...

  8. 哈夫曼树(Huffman Tree)的介绍、画法、哈夫曼树的可视化显示(Python代码实现)

    https://blog.csdn.net/hanhanwanghaha宝藏女孩 欢迎您的关注! 欢迎关注微信公众号:宝藏女孩的成长日记 如有转载,请注明出处(如不注明,盗者必究) 目录 一.概念 二 ...

  9. Python实现霍夫曼树

    Python实现霍夫曼树 霍夫曼树是一种特殊的二叉树,是一种带权路径长度最短的二叉树,又称为最优二叉树. 给定 N 个权值作为二叉树的 N 个叶节点的权值,构造一棵二叉树,若该二叉树的带权路径长度达到 ...

  10. Huffman Tree哈夫曼树权值路径长度WPL计算,binarytree ,Python

    Huffman Tree哈夫曼树(霍夫曼树.赫夫曼树)权值路径长度WPL计算,binarytree ,Python 计算定义:把构建成功的哈夫曼树的每一个边缘节点(叶子)值乘以该节点到根的路径长度,最 ...

最新文章

  1. 【 MATLAB 】impz函数介绍(数字滤波器的脉冲响应)
  2. ae万能弹性表达式_外置常用ae插件 快速掌握AE软件的精髓
  3. 【收藏】解决关闭Hadoop时no namenode to stop异常
  4. 关于正则验证中文名字2-5位的时候
  5. Spring对于Bean管理的核心组件
  6. java 开发 jvm_Java开发人员应了解的JVM流行语
  7. SmartPDA图片
  8. 10kv开关柜价格_一进三出10KV负荷开关环网柜乌兰察布
  9. eclipse/myeclipse添加插件3种方式
  10. 【前端杂记】断点续传
  11. win10 net framework 3.5提示错误代码0x800f081f
  12. 希腊字母读音及科学上的应用
  13. 液晶屏UFB、STN、TFT比较
  14. Android文件存储编程实验,Android编程中File文件常见存储与读取操作demo示例
  15. 前端框架 ng 环境配置
  16. 解决Clock skew detected.
  17. Spring Boot (二)集成Mybatis、Druid
  18. 景区夜游如何为游客讲好文旅故事
  19. Python日积月累_6_迭代器+生成器
  20. 阿里云服务器华北1、华北2、华北3、华北4、华北5 是哪个城市

热门文章

  1. Android 程式开发:(二十)内容提供者 —— 20.6 自定义ContentProvider的使用
  2. 清除无用工具栏:CommandbarCleaner下载
  3. 深入Java----集合----BitSet
  4. (二)再议MII、RMII、GMII接口
  5. 网页设计中 透明效果的使用技巧
  6. showcase basketball stadium
  7. SQL 死锁分析(转贴)
  8. Flutter CustomScrollView 的巧妙使用
  9. java基础将一个int数组转换成一个字符串
  10. sqlserver创建程序集