哈夫曼编码在Python中的实现
哈夫曼编码是一种将字符编码为二进制数据的算法,可以在数据无损压缩和加密中使用。下面是Python中实现哈夫曼编码的代码演示:
- 定义一个Node类,用于表示哈夫曼树中的节点,包含字符、出现次数和左右子节点。
class Node: def __init__(self, char, freq): self.char = char self.freq = freq self.left = None self.right = None
- 定义一个函数,用于统计字符串中各个字符的出现次数并返回一个字符-频率字典。
def get_frequencies(text): frequencies = {} for char in text: if char not in frequencies: frequencies[char] = 0 frequencies[char] += 1 return frequencies
- 定义一个函数,用于生成哈夫曼树,并返回根节点。
def build_huffman_tree(frequencies): nodes = [] for char, freq in frequencies.items(): nodes.append(Node(char, freq)) while len(nodes) > 1: nodes = sorted(nodes, key=lambda x: x.freq) left_node = nodes[0] right_node = nodes[1] parent_node = Node(None, left_node.freq + right_node.freq) parent_node.left = left_node parent_node.right = right_node nodes.remove(left_node) nodes.remove(right_node) nodes.append(parent_node) return nodes[0]
- 定义一个函数,用于生成字符-编码的字典并返回。
def get_code_dict(node, code=''): code_dict = {} if node.left is None and node.right is None: code_dict[node.char] = code else: code_dict.update(get_code_dict(node.left, code + '0')) code_dict.update(get_code_dict(node.right, code + '1')) return code_dict
- 定义一个函数,用于将字符串编码成二进制数据,并返回编码后的二进制数据和字符-编码字典。
def encode(text): frequencies = get_frequencies(text) root = build_huffman_tree(frequencies) code_dict = get_code_dict(root) binary_data = '' for char in text: binary_data += code_dict[char] return binary_data, code_dict
- 定义一个函数,用于将编码后的二进制数据解码成原始字符串,并返回原始字符串。
def decode(binary_data, code_dict): inv_code_dict = {v: k for k, v in code_dict.items()} current_code = '' text = '' for bit in binary_data: current_code += bit if current_code in inv_code_dict: char = inv_code_dict[current_code] text += char current_code = '' return text
- 使用上述函数进行编码解码。
text = 'pidancode.com' binary_data, code_dict = encode(text) print(f'Encoded data: {binary_data}') decoded_text = decode(binary_data, code_dict) print(f'Decoded text: {decoded_text}')
输出结果:
Encoded data: 100010011111011101110110000011011101011001010110010100 Decoded text: pidancode.com
以上就是Python中实现哈夫曼编码的代码演示。
相关文章