Как создать дерево для кодирования и декодирования Хаффмана?

По моему заданию я должен кодировать и декодировать деревья Хаффмана. У меня проблема с созданием моего дерева, и я застрял.

Не обращайте внимания на операторы печати -, они предназначены только для меня, чтобы проверить и посмотреть, что будет на выходе, когда моя функция запустится.

Для первого цикла for я получил все значения и индекс из текстового файла, который использовал в своем основном блоке для тестирования.

Во втором цикле for я вставил все данные в приоритетную очередь.

Я так застрял в том, куда идти дальше -Я пытаюсь создавать узлы, но я не понимаю, как двигаться дальше. Может ли кто-нибудь сказать мне, правильно ли я делаю это?

def _create_code(self, frequencies):
    '''(HuffmanCoder, sequence(int)) -> NoneType
    iterate over index into the sequence keeping it 256 elements long, '''
    #fix docstring
    p = PriorityQueue()
    print frequencies

    index = 0 
    for value in frequencies:
        if value != 0:
            print value #priority
            print index #elm
            print '-----------'       
        index = index + 1


    for i in range(len(frequencies)):
        if frequencies[i] != 0:
            p.insert(i, frequencies[i])  
            print i,frequencies[i]
            if p.is_empty():
                a = p.get_min()
                b = p.get_min()
                n1 = self.HuffmanNode(None, None, a)
                n2 = self.HuffmanNode(None, None, b)
                print a, b, n1, n2
    while not p.is_empty():
        p.get_min()

Я вручную вставил первые два, чтобы начать свое дерево, это правильно?

Как мне продолжать? Я знаю идею этого, просто код -мудрый, я очень застрял.

Кстати, это использование python. Я пытался посмотреть в Википедии, я знаю шаги, мне просто нужна помощь в коде и в том, как мне двигаться дальше, спасибо!

HuffmanNode исходит из этого вложенного класса :

class HuffmanNode(object):

    def __init__(self, left=None, right=None, root=None):
        self.left = left
        self.right = right
        self.root = root
-. 121 ---1219537- Уровни настройки при создании коэффициента по сравнению с `уровнями ()<-` Сначала создадим несколько множителей :F1 < -factor (c (1,2,20,10,25,3 ))F2 < -коэффициент (paste0 (F1, "лет" ))F3 < -F2 уровни (F3 )< -paste0 (sort (F1 ), "годы" )F4 < -коэффициент (paste0 (F1, "лет" ),...

Давайте сначала создадим некоторые факторы:

F1 <- factor(c(1,2,20,10,25,3))
F2 <- factor(paste0(F1, " years"))
F3 <- F2
levels(F3) <- paste0(sort(F1), " years")
F4 <- factor(paste0(F1, " years"), levels=paste0(sort(F1), " years"))

тогда взгляните на них:

> F1
[1] 1  2  20 10 25 3 
Levels: 1 2 3 10 20 25

> F2
[1] 1 years  2 years  20 years 10 years 25 years 3 years 
Levels: 1 years 10 years 2 years 20 years 25 years 3 years

> F3
[1] 1 years  3 years  10 years 2 years  20 years 25 years
Levels: 1 years 2 years 3 years 10 years 20 years 25 years

> F4
[1] 1 years  2 years  20 years 10 years 25 years 3 years 
Levels: 1 years 2 years 3 years 10 years 20 years 25 years

Прежде всего отмечу, что "ожидаемый" порядок уровней в F2 не похож на F1. Взглянув на документацию factor, можно понять, почему :уровни создаются путем предварительной сортировки входных данных. В случае F2,это строки, в которых при сортировке учитывается длина (? ).

Что мне сложнее понять, так это разницу в установке уровней между F3 и F4. В F3 я устанавливаю уровни после создания фактора, а в F4 я устанавливаю их явно при создании фактора. В F3 использование уровней ()< -не является просто переименованием уровней, но и не переупорядочивает их так, как я ожидал.

Может кто-нибудь объяснить разницу?

8
задан Reinstate Monica - G. Simpson 20 July 2012 в 22:19
поделиться