По моему заданию я должен кодировать и декодировать деревья Хаффмана. У меня проблема с созданием моего дерева, и я застрял.
Не обращайте внимания на операторы печати -, они предназначены только для меня, чтобы проверить и посмотреть, что будет на выходе, когда моя функция запустится.
Для первого цикла 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 <- 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 использование уровней ()< -не является просто переименованием уровней, но и не переупорядочивает их так, как я ожидал.
Может кто-нибудь объяснить разницу?