首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >哈夫曼树实现 python

哈夫曼树实现 python

作者头像
py3study
发布2020-01-09 15:49:28
发布2020-01-09 15:49:28
6970
举报
文章被收录于专栏:python3python3

参考博客:

http://linux.xidian.edu.cn/bbs/thread-70-1-1.html

基本上相当于抄写一遍了。。呃呃。。。。。

代码语言:javascript
复制
import heapq
def make_hufftree(inlist):
    trees=list(inlist)
    heapq.heapify(trees)
    while len(trees)>1:
        rightChild,leftChild=heapq.heappop(trees),heapq.heappop(trees)
        parentNode=(leftChild[0]+rightChild[0],leftChild,rightChild)
        heapq.heappush(trees,parentNode)
    return trees[0]
def encodehufftree(curNode,codelist,pref=''):
    if len(curNode)==2:
        codelist.append((curNode[1],pref))
    else:
        encodehufftree(curNode[1],codelist,pref+'0')
        encodehufftree(curNode[2],codelist,pref+'1')
def printcode(codelist):
    for item in codelist:
        print item[0],item[1]
exampleData = [
    (0.125 , 'aaa'),
    (0.075 , 'aab'),
    (0.050 , 'aac'),
    (0.075 , 'aba'),
    (0.045 , 'abb'),
    (0.030 , 'abc'),
    (0.050 , 'aca'),
    (0.030 , 'acb'),
    (0.020 , 'acc'),
    (0.075 , 'baa'),
    (0.045 , 'bab'),
    (0.030 , 'bac'),
    (0.045 , 'bba'),
    (0.027 , 'bbb'),
    (0.018 , 'bbc'),
    (0.060 , 'bca'),
    (0.018 , 'bcb'),
    (0.012 , 'bcc'),
    (0.050 , 'caa'),
    (0.030 , 'cab'),
    (0.020 , 'cac'),
    (0.030 , 'cba'),
    (0.018 , 'cbb'),
    (0.012 , 'cbc'),
    (0.020 , 'cca'),
    (0.012 , 'ccb'),
    (0.008 , 'ccc')
  ]
hufftree=make_hufftree(exampleData)
codelist=[]
encodehufftree(hufftree,codelist)
codelist.sort(key=lambda x:x[0])
printcode(codelist)
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/08/26 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档