函数的输入是这样的字典:
frec = {'a': 2, 'b': 4, ... , 'c': 1}
输出是霍夫曼抄本:
frec = {'a' : '00', 'b' : '01', ... , 'c': '0001'}
这就是功能:
def codice(frec):
lista = []
for carac,fr in frec.items():
heappush(lista,(fr,0,carac))
while len(lista) > 1:
x1 = heappop(lista)
x2 = heappop(lista)
x3 = (x1[0]+x2[0],max(x1[1],x2[1])+1,[x1,x2])
heappush(lista,x3)
dic = {}
rdic = {}
rama = []
rama.append(lista[0]+('',))
while len(rama) > 0:
elem = rama.pop()
if type(elem[2]) == list:
rama.append(elem[2][1]+(elem[-1]+'0',))
rama.append(elem[2][0]+(elem[-1]+'1',))
else:
dic[elem[2]]=elem[-1]
rdic[elem[-1]]=elem[2]
pass
return dic,rdic
我试图使用理解列表进行优化,但是我用python :)进行了新手。感谢。