Exemplo n.º 1
0
 def encodeSymbol(self, s):
     if not s in self.__root.getSymbols():
         raise Exception('Unknown symbol')
     else:
         if s in self.__root.leftChild:
             # add a 0
             HuffmanTree.encodeSymbol(HuffmanTreeNode.getLeftChild(self))
             pass
         else:
             # add a 1.
             HuffmanTree.encodeSymbol(HuffmanTreeNode.getRightChild(self))
             pass
Exemplo n.º 2
0
def unit_test_00():
    hnodes = [
        HuffmanTreeNode(symbols=set([kv[0]]), weight=kv[1])
        for kv in [('A', 4), ('B', 3), ('C', 1), ('D', 1)]
    ]
    ht = HuffmanTree.fromListOfHuffmanTreeNodes(hnodes)
    print(str(ht.getRoot()))
    print(str(ht.getRoot().getLeftChild()))
    print(str(ht.getRoot().getRightChild()))
    print(str(ht.getRoot().getRightChild().getLeftChild()))
    print(str(ht.getRoot().getRightChild().getLeftChild().getLeftChild()))
    print(str(ht.getRoot().getRightChild().getLeftChild().getRightChild()))
    print(str(ht.getRoot().getRightChild().getRightChild()))
Exemplo n.º 3
0
 def mergeTwoNodes(htn1, htn2):
     #print 'Merging', str(htn1), str(htn2)
     symbols = set(htn1.getSymbols())
     for i in htn2.getSymbols():
         symbols.add(i)
     n = HuffmanTreeNode(symbols=symbols, weight=htn1.getWeight() + htn2.getWeight())
     n.setLeftChild(htn1)
     n.setRightChild(htn2)
     return n
Exemplo n.º 4
0
 def mergeTwoNodes(htn1, htn2):
     #print 'Merging', str(htn1), str(htn2)
     symbols = set(htn1.getSymbols())
     for i in htn2.getSymbols():
         symbols.add(i)
     n = HuffmanTreeNode(symbols=symbols, weight=htn1.getWeight() + htn2.getWeight())
     if(htn1.isLeaf() and htn2.isLeaf()):
         if(next(iter(htn1.getSymbols())) > next(iter(htn2.getSymbols()))):
             tmp = htn1;
             htn1 = htn2;
             htn2 = tmp;
     n.setLeftChild(htn1)
     n.setRightChild(htn2)
     return n
Exemplo n.º 5
0
 def freqMapToListOfHuffmanTreeNodes(freq_map):
     return [HuffmanTreeNode(symbols=set([item[0]]), weight=item[1]) for item in freq_map.items()]
Exemplo n.º 6
0
#!/usr/bin/python3

################################################
# module: unit_tests.py
# author: vladimir kulyukin
# Py3 unit tests for HW04, S18
# bugs to vladimir dot kulyukin at usu dot edu
################################################

from HuffmanTree import HuffmanTree
from HuffmanTreeNode import HuffmanTreeNode
from BinHuffmanTree import BinHuffmanTree
from CharFreqMap import CharFreqMap

ht_nodes = [
    HuffmanTreeNode(symbols=set([kv[0]]), weight=kv[1])
    for kv in [('A', 8), ('B', 3), ('C', 1), ('D', 1), ('E',
                                                        1), ('F',
                                                             1), ('G',
                                                                  1), ('H', 1)]
]

txt0 = 'AABCCDEFG'
txt1 = 'AABBBBHHHFFGGGDDDDEEEECCCCCCCCDDDDDHHHHHAAAAAA'
## Change the value of work_dir to the directory where
## you save the files moby_dick_ch01.txt, moby_dick_ch01.txt,
## test_txt0.txt, and test_txt1.txt.
work_dir = '/Users/kelsyeanderson/Desktop/Homework4/data/'


def unit_test_00():
Exemplo n.º 7
0
 def findTwoLowestWeightNodes(list_of_nodes):
     sorted_list = sorted(list_of_nodes, key = HuffmanTreeNode.getWeight(), reverse = True)
     return sorted_list[0], sorted_list[1]