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

推荐订阅源

博客园 - 聂微东
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
月光博客
月光博客
博客园 - 三生石上(FineUI控件)
The Cloudflare Blog
博客园 - Franky
IT之家
IT之家
V
Visual Studio Blog
博客园 - 【当耐特】
阮一峰的网络日志
阮一峰的网络日志
V
V2EX
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 司徒正美
爱范儿
爱范儿
Hugging Face - Blog
Hugging Face - Blog
宝玉的分享
宝玉的分享
博客园 - 叶小钗
有赞技术团队
有赞技术团队
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
酷 壳 – CoolShell
酷 壳 – CoolShell
量子位
罗磊的独立博客
小众软件
小众软件
Jina AI
Jina AI

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