算法解析哈夫曼(huffman)压缩算法
前言
本篇将介绍哈夫曼压缩算法(Huffmancompression)哈夫曼压缩算法(Huffmancompression)
众所周知,计算机存储数据时,实际上存储的是一堆0和1(二进制)。
如果我们存储一段字符:ABRACADABRA!
那么计算机会把它们逐一翻译成二进制,如A:01000001;B:01000010;!:00001010。
每个字符占8个bits,这一整段字符则至少占12896bits。
但如果我们用一些特殊的值来代表这些字符,如:
图中,0代表A;1111代表B;等等。此时,存储这段字符只需30bits,比96bits小多了,达到了压缩的目的。
我们需要这么一个表格来把原数据翻译成特别的、占空间较少的数据。同时,我们也可以用这个表格,把特别的数据还原成原数据。
首先,为了避免翻译歧义,这个表格需满足一个条件:任何一个字符用的值都不能是其它字符的前缀。
我们举个反例:A:0;B:01;这里,A的值是B的值的前缀。如果压缩后的数据为01xxxxxx,x为0或者1,那么这个数据应该翻译成A1xxxxxx,还是Bxxxxxxx?这样就会造成歧义。
然后,不同的表格会有不同的压缩效果,如:
这个表格的压缩效果更好。
那么我们如何找到最好的表格呢?这个我们稍后再讲。
为了方便阅读,这个表格是可以写成一棵树的:
这棵树的节点左边是0,右边是1。任何含有字符的节点都没有非空子节点。(即上文提及的前缀问题。)
这棵树是在压缩的过程中建成的,这个表格是在树形成后建成的。用这个表格,我们可以很简单地把一段字符变成压缩后的数据,如:
原数据:ABRACADABRA!
表格如上图。
令压缩后的数据为S;
第一个字符是A,根据表格,A:11,故S11;
第二个字符是B,根据表格,B:00,故S1100;
第三个字符是R,根据表格,R:011,故S1100011;
如此类推,读完所有字符为止。
压缩搞定了,那解压呢?很简单,跟着这棵树读就行了:
压缩后的数据S11000111101011100110001111101
记住,读到1时,往右走,读到0时,往左走。
令解压后的字符串为D;
从根节点出发,第一个数是1,往右走:
第二个数是1,往右走:
读到有字符的节点,返回此字符,加到字符串D里。D:A;
返回根节点,继续读。
第三个数是0,往左走:
第四个数是0,往左走:
读到有字符的节点,返回此字符,加到字符串D里。D:AB;
返回根节点,继续读。
第五个数是0,往左走:
第六个数是1,往右走:
第七个数是1,往右走:
读到有字符的节点,返回此字符,加到字符串D里。D:ABR;
返回根节点,继续读。
如此类推,直到读完所有压缩后的数据S为止。
压缩与解压都搞定了之后我们需要先把原数据读一遍,并把每个字符出现的次数记录下来。如:
ABRACADABRA!中,A出现了5次;B出现了2次;C出现了1次;D出现了1次;R出现了2次;!出现了1次。
理论上,出现频率越高的字符,我们给它一个占用空间越小的值,这样,我们就可以有最佳的压缩率
由于哈夫曼压缩算法这块涉及内容较多,文章篇幅很长;全文全方面讲解了Compose布局的各方面知识。更多Android前言技术进阶,我自荐一套《完整的Android的资料,以及一些视频课讲解》现在私信发送进阶或者笔记即可免费获取
最后我想说:
对于程序员来说,要学习的知识内容、技术有太多太多,要想不被环境淘汰就只有不断提升自己,从来都是我们去适应环境,而不是环境来适应我们
技术是无止境的,你需要对自己提交的每一行代码、使用的每一个工具负责,不断挖掘其底层原理,才能使自己的技术升华到更高的层面
Android架构师之路还很漫长,与君共勉
孕妇肚子大应该怎么上厕所孕妇在怀孕之后一定要注意可以使用蹲坑来上厕所,这样的话能够锻炼盆骨的肌肉,而且也是比较卫生的,不会出现感染的情况,但是要注意不要蹲的太久,这样的话会引起宝宝出现了缺氧的情况,建……
明是格林库里王者荣誉之争(独家深度解密)詹姆斯用谋算计库里欲先得第五冠,湖人挖坑勇士,看谁智商更高!库里10月10日在记者会上面对提问时说,我知道有人策划了此次事件,但我现在不能说。意思所指很明……
成都世乒赛团体赛有感成都世乒赛团体赛已完美收官。昨天中日半决赛是提前上演的冠亚军对决,男乒险胜日本挺进决赛,轻松3:0夺冠就显而易见了。因为这些年乒乓球团体决赛不论男女几乎都是中日对决。因2……
英超第10轮C罗替补进球Antony破门曼联21逆转埃弗顿I足球战报网10月10日讯,北京时间2022年10月10日02:00,20222023赛季英超第10轮展开角逐,埃弗顿主场迎战曼联。上半场,埃弗顿率先得分,凭借A伊沃比的进球,……
华为Mate50今天首发!卫星通信明年将普及高通联发科都有今天下午14:30,华为将召开新品发布会,正式推出大家期待已久的华为Mate50系列。这次华为Mate50带来了不少突破性的新功能,包括此前官方已经预热公布出的应急模式、……
3000元能买什么冰箱?内行人真心推荐这三款,容量大还省电冰箱自然是家家都在用,不过很多人为了图放的东西多会去买冰柜,但是大多数人家中的空间没那么大,还是选择一个大点的冰箱比较划算。那今天就借着这个机会,给大家罗列一些内行人推荐的大容……
2022年换手机首选这三款,运行速度快价格很良心,还能再用5很多人用手机用不过两年,甚至好多手机一年就卡,而这种情况并不是用户的原因,很大程度上是手机确实不咋样,速度快价格低能用几年的手机是大家最希望的,那么有没有这种手机呢,当然有,小……
前女排国手为陈露女儿庆生!两人皆定居美国,独自带娃生活很惬意近日,前男篮国手孙悦的女儿迎来了自己的8岁生日,而陈露与女儿已经在美国定居将近2年,在国内的孙悦自然也无法与女儿见面,但是孙悦通过工作室向女儿送上了祝福。不过,同样在美国定居的……
母亲去世三周年祭徐庆举不久前,我和妻子去了华山,然后转道西安。妻子第一次到西安,兵马俑是必须去看的。因兵马俑我已参观多次,便没有再花那份钱,只让妻子一个人去参观了。在等候她的时段,我在挨……
最高12999元!五大史诗级突破,华为Mate50岂止向上捅684天前,华为发布了技惊四座的Mate40系列,令无数国人沸腾,本以为这是华为巅峰的开始,岂料,却成了华为手机落寞的标志!经历了重重打压,华为销量断崖式下滑,新品也被迫……
鹿客智能锁选购推荐,优惠入手高性价比款式在我看来,选智能锁,主要看三方面:是否智能?是否安全?售后是否有保障?所以在选智能锁的时候,一定要看品牌,因为大品牌,技术更先进,售后也更完善。鹿客智能锁就是一个不……
移植后,胚胎发育缓慢怎么办?在胚胎移植且着床之后,一般28天就可以看到胎囊、胎芽和胎心。有部分患者的胚胎发育很缓慢,着床后血值HCG指标不理想,引起了妈妈们的焦虑。胚胎发育缓慢,会不会导致胎停育的现……