用python实现哈夫曼树和哈夫曼编码

用python实现哈夫曼树和哈夫曼编码

昨晚亢神现场演示了一下构造哈夫曼树与进行哈夫曼编码,于是回来之后自己也简单写了一个

哈夫曼树的基本概念

这篇文章就讲的不错

代码

直接上代码

iput=[('zrd',5),('sea',3),('handsome',2),('beauty',1),('rd',1),('love',2)]
#初始化
n=len(iput)
father=[-1]*2*n
pot=[0]*2*n
origin=[(i,v) for i,v in zip(range(n),dict(iput).keys())]
souce=[(i,v) for i,v in zip(range(n),dict(iput).values())]
#创建哈夫曼树
while(len(souce)>1):
    souce.sort(key=lambda k:k[1])
    x=souce.pop(0)
    y=souce.pop(0)
    father[y[0]]=father[x[0]]=n
    pot[x[0]]=0;pot[y[0]]=1
    souce.append((n,x[1]+y[1]))
    n=n+1
father.pop()
pot.pop()
#由哈夫曼树生成哈夫曼编码
dic={
     }
for i,name in origin:
    st=''
    t=i
    while father[t]!=-1:
        st=str(pot[t])+st
        t=father[t]        
    dic[name]=st
print(dic)

输出结果为

{
     'zrd': '11', 'sea': '01', 'handsome': '100', 'beauty': '000', 'rd': '001', 'love': '101'}

创造出的哈夫曼树为
用python实现哈夫曼树和哈夫曼编码_第1张图片

大概就是这样了,过几天还准备试试写一个压缩和解压的python小程序

你可能感兴趣的:(算法,二叉树,霍夫曼树,huffman,tree)