【发布时间】:2012-07-20 04:25:32
【问题描述】:
对于我的任务,我要对霍夫曼树进行编码和解码。我在创建树时遇到问题,我被卡住了。
不要介意打印语句 - 它们只是供我测试并查看我的函数运行时的输出。
对于第一个 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
【问题讨论】:
-
怎么会这样?递归让我很困惑,你能指导我吗?
-
其实,我认为迭代解决方案非常简单。以下是维基百科文章Huffman Encoding 中给出的两种此类算法。
标签: python tree encode huffman-code