惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

小众软件
小众软件
B
Blog RSS Feed
美团技术团队
博客园 - 【当耐特】
C
Check Point Blog
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
M
MIT News - Artificial intelligence
aimingoo的专栏
aimingoo的专栏
J
Java Code Geeks
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Microsoft Azure Blog
Microsoft Azure Blog
博客园 - 司徒正美
T
Tailwind CSS Blog
Last Week in AI
Last Week in AI
Google DeepMind News
Google DeepMind News
D
DataBreaches.Net
人人都是产品经理
人人都是产品经理
N
Netflix TechBlog - Medium
Vercel News
Vercel News
P
Proofpoint News Feed
IT之家
IT之家
I
InfoQ
腾讯CDC
H
Hackread – Cybersecurity News, Data Breaches, AI and More

博客园 - Aimd

EPS图片转换 & 共享一个Excel宏,用于画Latex表格 Latex从零到开始使用 Eclipse下配置及使用Tomcat 6.0数据库连接池连接sqlserver2000 强制删除文件夹 SWT应用程序打包成jar过程 解决firefox频繁询问代理服务器用户名和密码问题 SQL server 2005 不能重新安装解决及ADO连接事例代码 SQL server 2005 远程连接问题及解决 家乡回长春路上拍的照片 blog的三种人 右键打不开磁盘又出新花样 用jni实现java使用dll 允许SWT Table的Tableitem多行显示 今天遇到一个geotools(GIS)和Eclipse合作的巨恶问题 实现模型间的多线连接 慎用EMF Ecore文件的名字 BIRT插件的使用 RCP的布局得两个细节 RCP导出注意事项
数据压缩方法
Aimd · 2006-05-17 · via 博客园 - Aimd

数据压缩当然包括所有数据的压缩,但是所有数据都用字符表示,比如图像、文本等。所以本文讲如何对一个字符串进行压缩,可以在这个基础上对所有数据进行压缩处理。
      把一个字符串进行压缩,并可以恢复,我们就把它理解为把一个字符串变短,并且这个短的字符串可以恢复回原来的串。这里有一个典型的方法,比如aaaaabbbbb用5a5b(5个a,5个b)表示就达到了压缩的目的,这里讲一个更通用的方法,不处理子串,对每一个字符进行压缩编码。
      假设要压缩字符串str,str的每一字符占8位,如果我们能用少于8位的01编码来表示每一个出现的字符,那么总长度就回变小,再如果这个编码是前缀编码(任意一个的编码都不是另一个编码的前缀),那么我们就可以把这个编码的01串恢复到原来的字符串。
      假定一个字符串中只含有a、b、c、d四个字符,他们在字符串中出现的个数为1000、100、10、1,很明显经编码压缩后的串长度为1000*a编码长+100*b编码长+10*c编码长+1*d编码长,从中我们知道,把这个式子最小化就得到了正确的编码,huffman编码完全满足要求,并满足前缀编码。
      此问题的huffman树(具体如何构造不介绍,任意数据结构的书都有):

      从中可以看到每个字符的编码:a 0,b 10,c 111,d 110。
      压缩后的长度变为1000*1 + 100*2 + 10*3 + 3,明显变短,并且可以恢复。
      此方法对长文本会有好的压缩比例,但是对短的就未必了。
      每一个字符占8位,当这个字符的编码达到8位时,叶子节点的个数足够表示文本的内容了。