[python]Huffman Encoding哈夫曼编码

::self.left = Noneself.right = Noneself.father = Noneself.freq = freq:return self.father.left == self:return [Node(freq) for freq in freqs]:queue = nodes[:]while len(queue) > 1:queue.sort(key=lambda item:item.freq)node_left = queue.pop(0)node_right = queue.pop(0)node_father = Node(node_left.freq + node_right.freq)node_father.left = node_leftnode_father.right = node_rightnode_left.father = node_fathernode_right.father = node_fatherqueue.append(node_father)queue[0].father = Nonereturn queue[0]:codes = [”] * len(nodes)for i in range(len(nodes)):node_tmp = nodes[i]while node_tmp != root:if node_tmp.isLeft():codes[i] = ‘0’ + codes[i]else:codes[i] = ‘1’ + codes[i]node_tmp = node_tmp.fatherreturn codesif __name__ == ‘__main__’:#chars = [‘A’,’B’,’C’,’D’,’E’,’F’,’G’,’H’,’I’,’J’,’K’,’L’,’M’,’N’]#freqs = [10,4,2,5,3,4,2,6,4,4,3,7,9,6]chars_freqs = [(‘C’, 2), (‘G’, 2), (‘E’, 3), (‘K’, 3), (‘B’, 4),(‘F’, 4), (‘I’, 4), (‘J’, 4), (‘D’, 5), (‘H’, 6),(‘N’, 6), (‘L’, 7), (‘M’, 9), (‘A’, 10)]nodes = createNodes([item[1] for item in chars_freqs])root = createHuffmanTree(nodes)codes = huffmanEncoding(nodes,root)for item in zip(chars_freqs,codes):print ‘Character:%s freq:%-2d encoding: %s’ % (item[0][0],item[0][1],item[1])

输出结果

>>>: 10100: 10101: 0000: 0001: 0100: 0101: 0110: 0111: 1011: 1110: 1111: 001: 100: 110

,旅行,有一种苍凉,“浮云游子意,落日故人情”,

[python]Huffman Encoding哈夫曼编码

相关文章:

你感兴趣的文章:

标签云: