哈夫曼编码压缩
哈夫曼编码是一种基于字符出现频率的压缩技术,可在不使用预定义字典的情况下压缩文本。它建立一棵二叉树,其中每个字符表示为从根到该节点的01编码。频率较高的字符使用较短的编码,而频率较低的字符使用较长的编码。这使得压缩更有效,因为出现频率高的字符压缩后使用的位数比出现频率低的字符要少。
以下是使用python编写的哈夫曼编码压缩函数:
import heapq
from collections import defaultdict
# 构建哈夫曼树
def build_tree(frequency_dict):
heap = [[freq, [char, '']] for char, freq in frequency_dict.items()]
heapq.heapify(heap)
while len(heap) > 1:
low = heapq.heappop(heap)
high = heapq.heappop(heap)
for pair in low[1:]:
pair[1] = '0' + pair[1]
for pair in high[1:]:
pair[1] = '1' + pair[1]
heapq.heappush(heap, [low[0] + high[0]] + low[1:] + high[1:])
return sorted(heapq.heappop(heap)[1:], key=lambda p: (len(p[-1]), p))
# 使用哈夫曼树压缩数据
def compress(text):
frequency_dict = defaultdict(int)
for char in text:
frequency_dict[char] += 1
pairs = build_tree(frequency_dict)
encoding_dict = dict(pairs)
encoded_text = ''
for char in text:
encoded_text += encoding_dict[char]
return encoded_text, encoding_dict
# 使用哈夫曼树解压数据
def decompress(encoded_text, encoding_dict):
decoding_dict = {
上一篇:不使用字典动态创建变量”的