以下是一个Python实现的Huffman树的例子:\n\npython\nimport heapq\nfrom collections import defaultdict\n\nclass Node:\n def __init__(self, freq, char=None):\n self.freq = freq\n self.char = char\n self.left = None\n self.right = None\n\n def __lt__(self, other):\n return self.freq < other.freq\n\ndef build_huffman_tree(data):\n # 统计字符频率\n freq_table = defaultdict(int)\n for char in data:\n freq_table[char] += 1\n \n # 构建优先队列\n heap = []\n for char, freq in freq_table.items():\n node = Node(freq, char)\n heapq.heappush(heap, node)\n\n # 构建Huffman树\n while len(heap) > 1:\n node1 = heapq.heappop(heap)\n node2 = heapq.heappop(heap)\n merged = Node(node1.freq + node2.freq)\n merged.left = node1\n merged.right = node2\n heapq.heappush(heap, merged)\n\n return heap[0]\n\ndef traverse_huffman_tree(root, code='', codes={}):\n if root is None:\n return\n if root.char is not None:\n codes[root.char] = code\n traverse_huffman_tree(root.left, code + '0', codes)\n traverse_huffman_tree(root.right, code + '1', codes)\n\ndef huffman_encoding(data):\n if data == '':\n return '', None\n\n root = build_huffman_tree(data)\n codes = {}\n traverse_huffman_tree(root, codes=codes)\n\n encoded_data = ''.join(codes[char] for char in data)\n return encoded_data, root\n\ndef huffman_decoding(encoded_data, root):\n if encoded_data == '':\n return ''\n\n decoded_data = ''\n node = root\n for bit in encoded_data:\n if bit == '0':\n node = node.left\n else:\n node = node.right\n if node.char is not None:\n decoded_data += node.char\n node = root\n\n return decoded_data\n\n# 测试\ndata = 'hello world'\nencoded_data, root = huffman_encoding(data)\ndecoded_data = huffman_decoding(encoded_data, root)\n\nprint('原始数据:', data)\nprint('编码后:', encoded_data)\nprint('解码后:', decoded_data)\n\n\n上述代码中,build_huffman_tree函数用于构建Huffman树,traverse_huffman_tree函数用于遍历Huffman树并生成每个字符的编码,huffman_encoding函数用于对数据进行编码,huffman_decoding函数用于对编码数据进行解码。最后通过测试数据进行验证编码和解码的正确性。

Python Huffman Tree Implementation: Efficient Data Compression

原文地址: https://www.cveoy.top/t/topic/qal3 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录