博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
任何数据都可压缩成1‰
阅读量:6904 次
发布时间:2019-06-27

本文共 1161 字,大约阅读时间需要 3 分钟。

不管你信不信,我己经实现了将任何数据压缩重千分之一,我压缩的依据就是数据中含有大量的重复字符,将这些重复字符信息用占用空间较少的符号或代码来代替的过程。

压缩的原理

每个文件都由各种不同代码组成,比如01代码。这类文件只有数字0与1组合。压缩原理就是“通过查找其中的规律,简化数字的排列”。比如00000110001111111111简化成5个0,2个1,3个0,10个1的排列。在极限压缩方式下可以将28.1G压到25.8M。

用WinRAR压缩后可以看出,多媒体文件压缩比最低,与原文件相差无几,而文本文件和程序文件压缩比要高一些,最高达到3:1,从实际经验来看,平时常见的文件压缩比都在10倍以下。

算法原理

字典算法:字典算法是最为简单的压缩算法之一。它是把文本中出现频率比较多的单词或词汇组合做成一个对应的字典列表,并用特殊代码来表示这个单词或词汇的这样一种算法。

还有一种压缩编码是一种变长的编码,根据文本不同的具体情况会有不同的压缩编码变体与之相适应,产生更大的压缩比率。如变体1:重复次数+字符,文本字符串:AAABBBCCCCDDDD,编码后得到:3A3B4C4D。变体2:特殊字符+重复次数+字符,文本字符串:AAAAABCCCCBCCC,编码后得到:BB5ABB4CBB3C。编码串的最开始说明特殊字符B,以后B后面跟着的数字就表示出重复的次数。

那么如何实现快速高密度压缩呢?解决方案是查找每个符号的通用程度,我们建立一个未压缩数据的柱状图;通过拆分柱状图为两部分来创建一个二叉树,每个递归的一半应该和另一半具有同样的权符号数。编码器使用这种逻辑来找到每个符号最优的表示方法。然而解码器使用唯一的标识在压缩流中每个编码的开始和结束,其通过在读压缩数据位的时候自顶向底进行无限传送,选择基于数据流中的每个独立的分支,一旦一个到子节点,解码器就知道一个完整的编码已经读出来了,这样完成了体积极小的压缩过程。

如何实现高压缩

系统文件如游戏跟一些代码的文档能用7Z进行压缩。当然,压缩率也意味着费时间的压缩跟解压。压缩率小的没必要用7z,直接打包反而更好。

影音图像文件多数压缩率只能通过再编码有损压缩。比如BMP图像转jpg,APE转MP3。

大家用的WinRar是外国软件,但中国的压缩技术也很厉害,2013年末的时候,新闻联播播出:我国突破压缩技术,可将文件在rar的基础上,图片可再压缩100倍,视频可再压缩10倍。

随着视频图像、文档映象、多媒体等技术的出现,压缩技术成了网络管理员的一个重要工作内容。数据压缩技术是挤压数据,使其占用较少的磁盘存储空间和用时更短的传输压缩时间,广大用户还是没有体验到3年前的压缩技术,压縮技术的推广对未来科技的发展也是必不可少的。

作者:陈杰

来源:51CTO

转载地址:http://phmdl.baihongyu.com/

你可能感兴趣的文章
android jni——helloworld
查看>>
UML类图(转载)
查看>>
初到深圳面试分享(下)
查看>>
Android Canvas saveLayerAlpha使用
查看>>
指针类型强制转换
查看>>
MySQL常用命令大全
查看>>
查看Android应用签名信息
查看>>
Solr官方文档翻译-About & Getting Started
查看>>
MVC、MVP、MVVM、Angular.js、Knockout.js、Backbone.js、React.js、Ember.js、Avalon.js、Vue.js 概念摘录...
查看>>
优化中的subgradient方法
查看>>
fastDFS 一二事 - 简易服务器搭建(单linux)
查看>>
Elasticsearch初步使用(安装、Head配置、分词器配置)
查看>>
thinkphp 3.2.3 计划任务具体实现实例教程
查看>>
php源码解读
查看>>
linux编译ruby1.8.7 出现OPENSSL错误
查看>>
设计模式(五):中介者模式
查看>>
grep(Global Regular Expression Print)
查看>>
WCF学习之旅—WCF服务的批量寄宿(十三)
查看>>
解决“不是有效的win32应用程序”问题
查看>>
安装opencv以及遇到的坑
查看>>