通过迭代树来解码比特序列

时间:2013-04-28 14:56:52

标签: python tree huffman-code

phrase='hello overflow'
sequence='00100011101010000110101011000110110100'
tree=[
       [
         [
           [' ', 'f'],
           ['h', 'r']
         ],
         [
           ['w', 'v'],
           'e'
         ]
       ],
       ['l', 'o']
     ]

我在执行列表“树”的迭代时遇到了一些问题。我想要做的是,给定输入比特流,在这种情况下“序列”,“树”相应地迭代到每个比特,例如:

如果我想要字母'h',在“短语”中,它对应于“序列”中的4个第一位,(0010),我必须转到树[0] [0] [1] [0]

我有2个关于如何做到这一点的想法,其中一个是通过使用这样的for循环:

for bit in phrase:
    if len(tree[bit])>1:
        calls recursive method, plus some rules

def recursive(list,bit):
    return list[bit]

但是这给了我一个问题,因为我无法从流中提供新的比特,而在循环内部来自递归方法。

另一种是在“序列”和“树”之间使用某种并行迭代。

任何人都可以对此有所了解吗?

1 个答案:

答案 0 :(得分:1)

您不需要递归。只需遍历序列中的位。从pos = tree开始。对于每个位,向下移动树:pos = pos[bit]。如果pos仍然是列表,请继续下一位。如果pos不是列表,则在那里输出字符并将pos设置回根tree并继续下一位。如果您保留pos不等于tree的循环,请注意您收到的代码不完整的错误。