All pastes #628000 Raw Edit

kestaz

public python v1 · immutable
·published 2007-07-20 17:37 UTC
rendered paste body
''    simple huffman tree    gives binary codes    written by kestaz   '''from copy import deepcopyclass tree:    def __init__(self,freq,value):        self.value = value        self.freq = freq        self.right = None        self.left = Nonedef make_simple_tree(m):    l = []    for i in m:        l.append(i.freq)        l.sort()    x = l[0]    del l[0]    y = l[0]    for v,i in enumerate(m):        if x == i.freq:            t = 1            p1 = deepcopy(i)            v1 = v    if t == 1:        t = 0        for v,i in enumerate(m):            if y == i.freq:                t = 1                p2 = deepcopy(i)                v2 = v        if t == 1:            del m[v1]            del m[v2-1]            f = tree(p1.freq+p2.freq,'*')            f.right = p1            f.left = p2            m.append(f)def print_tree(d, c, code):    if d != None:        if c != None: code = code + str(c)    if d.left == None and d.right == None:         print str(d.freq) + ' ' + str(d.value)        print code        code = ''        return    print_tree(d.right,1, code)    print_tree(d.left, 0, code)def tree_print(d):    if d == None: return     print str(d.freq) + ' ' + str(d.value)    tree_print(d.left)    tree_print(d.right)    d = { 5: 1, 7: 2, 10: 3, 15: 4, 20: 5, 45:6}m = []for i in d.keys():    k = d[i]    m.append(tree(i,k))    while len(m)>1:    make_simple_tree(m)code = ''print_tree(m[0], None, code)print ''tree_print(m[0])