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

推荐订阅源

量子位
Stack Overflow Blog
Stack Overflow Blog
人人都是产品经理
人人都是产品经理
The GitHub Blog
The GitHub Blog
Engineering at Meta
Engineering at Meta
Vercel News
Vercel News
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Y
Y Combinator Blog
The Cloudflare Blog
Last Week in AI
Last Week in AI
B
Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
T
Tailwind CSS Blog
V
Visual Studio Blog
博客园 - 三生石上(FineUI控件)
小众软件
小众软件
Google DeepMind News
Google DeepMind News
D
DataBreaches.Net
博客园 - 司徒正美
B
Blog RSS Feed
Microsoft Azure Blog
Microsoft Azure Blog
罗磊的独立博客
Hugging Face - Blog
Hugging Face - Blog
L
LangChain Blog

博客园 - 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位时,叶子节点的个数足够表示文本的内容了。