压缩算法有很多种,这里我给你一个使用Python实现的简单的哈夫曼编码(Huffman Coding)算法的源码,哈夫曼编码是一种广泛使用的无损数据压缩算法。
import heapq from collections import defaultdict def huffman_encode(data): # 计算每个字符的频率 frequency = defaultdict(int) for char in data: frequency[char] += 1 # 创建一个优先队列,用于构建哈夫曼树 heap = [[weight, [char, ""]] for char, weight in frequency.items()] heapq.heapify(heap) # 构建哈夫曼树 while len(heap) > 1: lo = heapq.heappop(heap) hi = heapq.heappop(heap) for pair in lo[1:]: pair[1] = '0' + pair[1] for pair in hi[1:]: pair[1] = '1' + pair[1] heapq.heappush(heap, [lo[0] + hi[0]] + lo[1:] + hi[1:]) # 生成哈夫曼编码表 huff_code = sorted(heapq.heappop(heap)[1:], key=lambda p: (len(p[1]), p)) huff_dict = {char: code for char, code in huff_code} # 编码输入数据 encoded_data = "".join(huff_dict[char] for char in data) return huff_dict, encoded_data def huffman_decode(encoded_data, huff_dict): # 反转哈夫曼编码表 reversed_dict = {code: char for char, code in huff_dict.items()} # 解码数据 decoded_data = [] current_code = "" for bit in encoded_data: current_code += bit if current_code in reversed_dict: decoded_data.append(reversed_dict[current_code]) current_code = "" return "".join(decoded_data) if __name__ == "__main__": data = "this is an example for huffman encoding" huff_dict, encoded_data = huffman_encode(data) print("Encoded data:", encoded_data) print("Huffman dictionary:", huff_dict) decoded_data = huffman_decode(encoded_data, huff_dict) print("Decoded data:", decoded_data)
这个代码实现了一个简单的哈夫曼编码和解码功能,它计算输入数据中每个字符的频率,然后使用这些频率构建一个哈夫曼树,它生成一个哈夫曼编码表,将每个字符映射到其对应的二进制编码,它使用这个编码表对输入数据进行编码和解码。
小伙伴们,上文介绍了“压缩算法 源码”的内容,你了解清楚吗?希望对你有所帮助,任何问题可以给我留言,让我们下期再见吧。
原创文章,作者:未希,如若转载,请注明出处:https://www.kdun.com/ask/1118177.html
本网站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本网站。如有问题,请联系客服处理。
发表回复