def header_writer(bitwriter,alist): count=0 for i in range(array_list.length(alist)-1): if(array_list.get(alist,i) != 0): count+=1 bitwriter.write_byte(count) for i in range(array_list.length(alist)-1): if(array_list.get(alist,i) != 0): bitwriter.write_byte(i) bitwriter.write_int(array_list.get(alist,i))
def huffman_encode(input, output): final_encoded = '' occurrence_list = count_occurrences(input) if all (x== None for x in occurrence_list): output = HuffmanBitsWriter(output) output.write_code('00') output.close() return olist = count_occurrences(input) sorted_list = make_sorted_list(occurrence_list) pairtree = join_leaves(sorted_list) tree = pairtree.first code = build_character_code(pairtree.first, occurrence_list) #code is the occurrence list with the encoded string for each ascII value/index string = open(input, 'r') string2 = string.readlines() string.close() line = 0 for each in string2: #if line != 0: # final_encoded += code[10] for letter in each: #r.strip() index = ord(letter) encoded= code[index] #print(encoded) encoded = str(encoded) final_encoded += encoded #line += 1 output = HuffmanBitsWriter(output) #open file to write in #1) The number of codes represented in the Tree as a single 1 byte integer code_num = number_of_codes(occurrence_list) output.write_byte(code_num) #2) Each character c and number of occurrences n as tuple(c, n) for i in range(array_list.length(olist)): if olist[i] != None: output.write_byte(i) num = olist[i] num = int(num) output.write_int(num) #3) Sequence of bits as encoded string #print(final_encoded) for num in final_encoded: output.write_code(num) #output.write_code(final_encoded) output.close() #need the traverse string of CHARACTERS not ASCII values string_list = make_character_sorted_list(olist) string_pairtree = join_leaves(string_list) stringtree = string_pairtree.first return traverse(stringtree)
def convert_llist(alist): llist=None for i in range(array_list.length(alist)-1): g=array_list.get(alist, i) if(g != 0): llist=linked_list.insert_sorted(llist,Leaf(i,g),comes_before) return llist
def make_character_sorted_list(occurrence_list): sorted_list = linked_list.empty_list() for i in range(array_list.length(occurrence_list)): if occurrence_list[i] != None: leaf = make_leaf(chr(i), occurrence_list[i]) sorted_list = linked_list.insert_sorted(sorted_list, leaf, comes_before) return sorted_list
def test_length1(self): myList = array_list.empty_list() self.assertEqual(array_list.length(myList), 0)