哈夫曼树(利用python实现)

2016-05-25
import numpy as npimport queue
image = 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 =0 for idx,element in enumerate(data): if(element<first): second = first sid = fid first = element fid - idx elif (element <second and element !=first): second = element return fid,first,sid,second


class Node: def __init__(self): self.prob = None self.code = None self.data = None self.left = None self.right = None def __lt__(self, other): if (self.prob< other.prob): return 1 else: return 0 def __ge__(self, other): if(self.prob>other.prob): return 1 else: return 0


def tree(probabilities): prq = queue.PriorityQueue() for color,probability in enumerate(probabilities): leaf = Node() leaf.data = color leaf.prob = probability prq.put(leaf) while(prq.qsize()>1): newnode = Node() l = prq.get() r = prq.get()
newnode.left = l newnode.right = r newprob = l.prob+r.prob newnode.prob = newprob prq.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] = 1 huffman_traversal.count +=1 huffman_traversal(root_node.left, tmp_array, f) huffman_traversal.count -=1 if (root_node.right is not None): tmp_array[huffman_traversal.count] = 0 huffman_traversal.count +=1 huffman_traversal(root_node.right, tmp_array, f) huffman_traversal.count -=1 else: huffman_traversal.output_bits[ root_node.data] = huffman_traversal.count bitstream = ''.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) return

root_node = tree(probabilities)tmp_array = np.ones([4], dtype=int)huffman_traversal.output_bits = np.empty(5, dtype=int)huffman_traversal.count = 0f = open('codes.txt', 'w')huffman_traversal(root_node, tmp_array, f)

结果




点一点 在看 支持一下。

欢迎关注公众号了解更多。





相关文章

漫画:什么是 “哈夫曼树” ?

2021-09-14
哈夫曼树是由麻省理工学院的哈夫曼博士于1952年发明,这到底是一颗什么样的树呢?刚才我们学习了树的带权路径长度(WPL),...

原以为哈夫曼树、哈夫曼编码很难,结果……

2021-09-14
哈夫曼树介绍大家好,我是bigsai.原以为哈夫曼树、哈夫曼编码很难,结果它很简单啊老铁们!哈夫曼树、哈夫曼编码很多人可能听...

双日练 | 哈夫曼树的构造,以及WPL的计算

2021-09-14
则其最小的带权路径长度(WPL)是( )A.89B.200C.208D.289 本题考查:哈夫曼树的构造,以及WPL的计算解析: WPL=(16+21+...

漫画:“哈夫曼编码” 是什么鬼?

2021-09-14
漫画:什么是 “哈夫曼树” ?那么,这种数据结构究竟有什么用呢?我们今天就来揭晓答案.计算机系统是如何存储信息的呢?计算...

哈夫曼树与哈夫曼编码详解

2021-09-14
哈夫曼树 1 定义在含有n个带权叶结点的二叉树中,其中 带权路径长度(WPL)最小的二叉树 称为 哈夫曼树,也称最优二叉树.如下...

哈夫曼树与哈夫曼编码

2021-09-14
哈夫曼树:带权路径长度WPL最小的二叉树;也叫最优树;如果给图1和图2标上权重的话,就是图3的样子.图3左边二叉树的WPL=5*...

【视频】题目讲解--哈夫曼树

2021-09-14

NOIP初赛复习(五)哈夫曼树和哈夫曼编码

2021-09-14
如何构造一棵哈夫曼树?(哈夫曼树也是一棵二叉树)给n个点,每个点都有权值,构造一棵哈夫曼树.每次选剩下的两棵根权值最小...

漫画:“哈夫曼编码” 是什么鬼?

2021-09-14
一种特殊的数据结构 “哈夫曼树”,也被称为最优二叉树那么,这种数据结构究竟有什么用呢?我们今天就来揭晓答案.计算机系统是...

算法漫画:什么是 “哈夫曼树” ?

2021-09-14
哈夫曼树是由麻省理工学院的哈夫曼博士于1952年发明,这到底是一颗什么样的树呢?刚才我们学习了树的带权路径长度(WPL),...

随机推荐

PHP7到底有多快,基准测试与特性分析告诉你

2020-05-13
PHP7到底有多快! 下面我们来测试下PHP7性能提升到底有多少...PHP7炫目新特性 PHP7 除了在性能方面的极大提升,还添加了很多新的特性...

Web高效开发必备的PHP框架

2020-04-26
PHP、Python、JAVA、Ruby 等项目的发布.通过 SSH 将程序部... 3、项目名称: 基于Yii 框架协同办公管理系统 IBOS复杂的用户组...

广东国际拍卖有限公司给您拜年啦!

2020-03-03

PHP文件包含小总结

2020-02-06
php://(1) php://input是个可以访问请求的原始数据的只读流,可以... \xampp\apache\logs\error.log3.IIS6.0+win2003默认日志文件:C:...

Apache Kylin 在 eBay 的实践

2020-01-07
Apache Kylin 社区在未来能够带来更多了不起的功能,并对行业产生更大的影响.今天的议程包括:介绍 eBay 的开源文化Apache ...

【北京热招】知名游戏公司高薪招聘JAVA开发工程师!

2015-12-22
【背景介绍】国内知名游戏公司,上线一年内,完美兼容两百万款原生游戏和应用,吸引了众多著名游戏开发商入驻,已经成为国内休...

说说AUTOSAR数据类型的那些事儿

2015-03-17
数据类型的定义是AUTOSAR设计中非常重要的一部分,在Signal-Based的架构中,数据往往是一些简单的类型,如布尔、枚举、有/无...

信管风采 | 三年磨一剑,只为圆梦来

2015-02-24
语法阶段学校发的课本即可,数据结构推荐程杰老师的《大话数据结构》,高级算法推荐李煜东老师的《算法竞赛进阶指南》.书是辅...

【一张图教你拍风光大片】堆栈技巧知多少

2015-02-13
在风光摄影中堆栈是比较常用的一种技法,让你的照片从前景到背景实现最大化的锐利效果.想象一下一幅图像从镜头前不到1米的距...

抵制萨德!通许人在行动!

2015-01-10
洛丽波棒棒糖是乐天在华销售的主打糖果,有7种形状,草莓、苹... 可以买车不考虑现代可以买电视机不看LG买零食的时候当然也可...