示例#1
0
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))
示例#2
0
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)
示例#3
0
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
示例#4
0
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
示例#5
0
 def test_length1(self):
     myList = array_list.empty_list()
     self.assertEqual(array_list.length(myList), 0)