Huffman树

来源:互联网 发布:株洲网络危机公关公司 编辑:程序博客网 时间:2024/05/29 23:48
演示网站:


http://huffman.ooz.ie/


class MinPri:    def __init__(self):        self.heaplist = []    def Dequeue(self):        minObj = self.heaplist[0]        idxMin = 0        for i in self.heaplist:            if i.comFun(minObj) < 0:                minObj = i                idxMin = self.heaplist.index(i)        del self.heaplist[idxMin]        return minObj    def Insert(self,objectIn):        self.heaplist.append(objectIn)    def Empty(self):        return len(self.heaplist) == 0    class HuffmanTree:    def __init__(self,freq,char):        self.key = freq        self.char = char        self.left = 0        self.right = 0    def comFun(self,OtherNode):        if self.key > OtherNode.key:            return 1        elif self.key == OtherNode.key:            return 0        else:            return -1        def MakeHuffmanTree(charList,freList):    num = len(charList)    minQ = MinPri()        for i in range(0,num):        node = HuffmanTree(freList[i],charList[i])        minQ.Insert(node)    for i in range(0,num - 1):        x = minQ.Dequeue()        y = minQ.Dequeue()        z = HuffmanTree(x.key + y.key , 0)        z.left = x        z.right = y        minQ.Insert(z)    return minQ.Dequeue()def PrintHuffmanTree(ht):      code = []      Traval(code, ht)  def Traval(code, root, dir='3'):      if not dir == '3':          code.append(dir)        if not root.char == 0:          print root.char, " : ", "".join(code)      else:          Traval(code, root.left, '0')          code.pop()          Traval(code, root.right, '1')          code.pop()  if __name__ == '__main__':      charList = ['a', 'b', 'c', 'd', 'e', 'f', 'g']      freqList = [ 2,  5,   9,    3,   40,  6,  10 ]      TreeTop = MakeHuffmanTree(charList, freqList)      PrintHuffmanTree(TreeTop)


0 0
原创粉丝点击