from make_tree import * f = open('failas.txt') text = f.read() freq = {} for i in text: p = ord(i) freq[p] = 0 for i in text: p = ord(i) k = freq[p] k = k + 1 freq[p] = k print freq m = make_tree(freq) code = '' print_tree(m, None, code) output = '' print array for i in text: t = 0 for k in array: if i == chr(k): t = 1 if t == 1: print 'labas' else: print 'error' ''' simple huffman tree gives binary codes written by kestaz ''' from copy import deepcopy class tree: def __init__(self,freq,value): self.value = value self.freq = freq self.right = None self.left = None def 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 del m[v1] for v,i in enumerate(m): if y == i.freq: t = 1 p2 = deepcopy(i) v2 = v if t == 1: del m[v2] f = tree(p1.freq+p2.freq,'*') f.right = p1 f.left = p2 m.append(f) array = {} def print_tree(d, c, code): global array 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) array[d.freq] = [d.value, code] 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 = [] def make_tree(d): for i in d.keys(): k = d[i] m.append(tree(i,k)) while len(m)>1: make_simple_tree(m) code = '' return m[0] #make_tree(d) #code = '' #print_tree(m[0], None, code) #print '' #tree_print(m[0])