下面是内存溢出 jb51.cc 通过网络收集整理的代码片段。
内存溢出小编现在分享给大家,也给大家做个参考。
#Coding:utf-8import structcodeDict={}#全局字典key=字符,value=数字encodeDict={}filename=NoneListForEveryByte=[]class Node: def __init__(self,right=None,left=None,parent=None,weight=0,charcode=None): self.right=right self.left=left self.parent=parent self.weight=weight self.charcode=charcode#按权值排序def sort(List): return sorted(List,key=lambda node:node.weight)#构建哈夫曼树def Huffman(listofNode): listofNode=sort(listofNode) while len(listofNode)!=1: a,b = listofNode[0],listofNode[1] new=Node() new.weight,new.left,new.right = a.weight + b.weight,a,b a.parent,b.parent = new,new listofNode.remove(a),listofNode.remove(b) listofNode.append(new) listofNode=sort(listofNode) return listofNodedef inputfile(): global filename global ListForEveryByte filename=raw_input("请输入要压缩的文件:") global codeDict with open(filename,'rb') as f: data=f.read() for Byte in data: codeDict.setdefault(Byte,0) #每个字节出现的次数默认为0 codeDict[Byte]+=1 ListForEveryByte.append(Byte)def outputCompressedfile(): global ListForEveryByte fileString="" with open(filename.split(".")[0]+".jbj","wb") as f: for Byte in ListForEveryByte: fileString+=encodeDict[Byte] #构成一个长字符序列 leng=len(fileString) more=16-leng%16 fileString=fileString+"0"*more #空位用0补齐 #print(fileString) leng=len(fileString) i,j=0,16 while j<=leng: k=fileString[i:j] a=int(k,2) #print(a) # print(repr(struct.pack(">H",a))) f.write(struct.pack(">H",a)) # f.write(str(a)) i=i+16 j=j+16def encode(head,listofNode): global encodeDict for e in listofNode: ep=e encodeDict.setdefault(e.charcode,"") while ep!=head: if ep.parent.left==ep: encodeDict[e.charcode]="1"+encodeDict[e.charcode] else: encodeDict[e.charcode]="0"+encodeDict[e.charcode] ep=ep.parentif __name__ == '__main__': inputfile() listofNode=[] for e in codeDict.keys(): listofNode.append(Node(weight=codeDict[e],charcode=e)) head=Huffman(listofNode)[0] #构建哈夫曼树,head称为树的根节点 encode(head,listofNode) for i in encodeDict.keys(): print(i,encodeDict[i]) #outputCompressedfile()
以上是内存溢出(jb51.cc)为你收集整理的全部代码内容,希望文章能够帮你解决所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
总结以上是内存溢出为你收集整理的Python实现的哈夫曼编码全部内容,希望文章能够帮你解决Python实现的哈夫曼编码所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)