当前位置: 首页 > news >正文

Python,非二进制的霍夫曼编码

一般来说,霍夫曼编码是二进制的,但是非二进制的也可以。本文中,通过修改N,可以得到任意进制的霍夫曼编码。

非二进制编码的作用:例如,设计九键输入法,希望根据拼音的概率来编码,常用的拼音分配较短的编码。这时,需要使用九进制霍夫曼编码,N=9。

代码如下:

a1=[[63,[['澳门','']]],[5000,[['广西','']]],[100,[['香港','']]],[76,[['澳门','']]]
]data='''广东	11346
山东	10047
河南	9605
四川	8341
江苏	8051
河北	7556
湖南	6899
安徽	6324
湖北	5917
浙江	5737
广西	4926
云南	4830
江西	4648
辽宁	4359
福建	3941
陕西	3864
黑龙江	3773
山西	3718
贵州	3600
重庆	3102
吉林	2704
甘肃	2637
内蒙古	2491
新疆	2487
上海	2424
台湾	2359
北京	2154
天津	1560
海南	934
香港	745
宁夏	688
青海	603
西藏	335
澳门	63
'''#用正则表达式获取数据
#a[i][0]是概率,a[i][1]是个数组,记录着符号和编码的关系
import re
ret=re.findall(r'(.+)\t(.+)',data)
a=[]
for x in ret:a.append([int(x[1]),[[x[0],'']]])#用N=9表示九进制
N=2
while len(a)>1:#按第一列排序,小的在前面a.sort()for i in range(min(N,len(a))):for x in a[i][1]:x[1]=str(i)+x[1]for i in range(1,min(N,len(a))):a[0][0]+=a[i][0]a[0][1]+=a[i][1]del a[1:min(N,len(a))]#显示结果
for x in a[0][1]:print(x[0],'\t',x[1])

代码解释:
a1是个示例,不参与运算。
data是符号和概率,用制表符和换行符分割。
然后,用正则表达式获取data到a,a的结构要看清。
算法的主体,是先排序,选出概率最小的N项,合并成1项。合并的过程中,概率相加,符号相连。
最后显示结果。

本算法没有创建树状结构,而是通过字符串运算来完成的。

修改N=9,即得到九进制编码结果。

http://www.lryc.cn/news/252419.html

相关文章:

  • 详解—[C++数据结构]—红黑树
  • 甘草书店记:6# 2023年10月31日 星期二 「梦想从来不是一夜之间实现的」
  • 基于Java SSM车辆租赁管理系统
  • 侯捷C++八部曲(一,面向对象)
  • 《数据库系统概论》学习笔记——王珊 萨师煊
  • 关于使用百度开发者平台处理语音朗读问题排查
  • 安全认证 | CISP和CISP-PTE的区别在哪里?
  • Unity3D 导出的apk进行混淆加固、保护与优化原理(防止反编译)
  • C语言扫雷小游戏
  • 用取样思想一探AIX上进程性能瓶颈
  • 分布式搜索引擎elasticsearch(二)
  • Tecplot绘制涡结构(Q准则)
  • Whisper
  • Android系统分析
  • 五、关闭三台虚拟机的防火墙和Selinux
  • 【从零开始学习Redis | 第六篇】爆改Setnx实现分布式锁
  • Kubernetes学习笔记-Part.05 基础环境准备
  • 语义分割 DeepLab V1网络学习笔记 (附代码)
  • java设计模式学习之【建造者模式】
  • Spring Boot中的RabbitMQ死信队列魔法:从异常到延迟,一网打尽【RabbitMQ实战 一】
  • nrm : 镜像源工具npm镜像切换
  • Star 10.4k!推荐一款国产跨平台、轻量级的文本编辑器,内置代码对比功能
  • iOS 17.2:可以修改消息提示音了
  • PTA 一维数组7-3出生年(本题请你根据要求,自动填充“我出生于y年,直到x岁才遇到n个数字都不相同的年份”这句话)
  • 【3】基于多设计模式下的同步异步日志系统-设计模式
  • Metasploit的使用和配置
  • 测试用例的设计思路
  • HCIP——交换综合实验
  • 大学生如何搭建自己的网站
  • linux 路由表的优先级