首页 > AI文库 >

输入n个字母及其权值,对其进行哈夫曼编码

来自 河南省安阳市 的网友分享 (°C) 17782

来自 河南省安阳市 的网友 分享

(°C)

哈夫曼编码是一种用于数据压缩的算法,它使用变长编码表对源符号(如文件中的一个字母)进行编码,其中变长编码表是通过一种评估源符号出现概率的方法得到的。源符号的出现概率越高,其对应的哈夫曼编码越短。

以下是一个简单的Python实现:

```python
import heapq
from collections import defaultdict

def calculate_frequency(s):
frequency = defaultdict(int)
for c in s:
frequency[c] += 1
return frequency

def huffman_encode(frequency):
heap = [[weight, [symbol, ""]] for symbol, 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:])
return sorted(heapq.heappop(heap)[1:], key=lambda p: (len(p[-1]), p))

s = "huffman encoding"
frequency = calculate_frequency(s)
huff = huffman_encode(frequency)
print("Symbol".ljust(10) + "Weight".ljust(10) + "Huffman Code")
for p in huff:
print(p[0].ljust(10) + str(frequency[p[0]]).ljust(10) + p[1])
```

在这个例子中,我们首先计算输入字符串中每个字符的频率,然后使用这些频率创建一个最小堆。然后,我们从堆中取出两个最小的元素,合并它们,并将结果放回堆中。我们重复这个过程,直到堆中只剩下一个元素。最后,我们打印出每个字符及其对应的哈夫曼编码。

相关推荐

中国经济实现高质量发展具备哪些显著优势论文1500字

AI文库

世界变乱交织,中国笃行担当 变革动荡 大国关系 中国智慧 上述内容分别为大标题和三个小标题,请以此写出不少于2000字的形式与政策论文,要求内容充实具体,不存在抄袭、、雷同情况

AI文库

假如你是形式与政策这个课程的一名学生,请以“世界变乱多织,中国笃行担当”为主题,写一篇论文,要求完全按照论文的格式,字数一定在2500字以上!

AI文库

请结合《走好新时代科技自立自强之路》专题和今年2月8日广东省高质量发展大会聚焦产业科技话创新、谋未来主题,谈谈你对党的二十大提出的“科技强国”战略的认识及行动

AI文库

国家安全为什么与你我息息相关论文不少于1500

AI文库

热门图文

上一篇:完成机票预订系统测试分析报告的撰写,要求必须包含采用等价类划分、边界值等测试方法设计测试用例对系统的至少2个模块功能进行测试分析

下一篇:8255和LED数码管显示实验总结