将计算机数据压缩1000倍,有什么经济价值1000元的礼品

计算机算法:数据压缩之位图(2) - 文章 - 伯乐在线
& 计算机算法:数据压缩之位图(2)
,我们知道了如何压缩一段重复元素组成的数据。这种压缩称为“游程编码”,该算法在无损数据压缩传输时非常方便。但问题是数据必须遵循特定格式。比如,字符串“aaaaaaaabbbbbbbb”可以被压缩成“a8b8”。此时,16个字符的字符串被压缩成4个字符,没有丢失任何信息,而长度却只有原始长度的25%。但当字符(元素)以不同方式分散时,问题就会出现。如果字符不变,但是没有连续出现,会是什么情况?如果字符串是“abababababababab”会如何?长度一样,字符一样,但是我们不能使用游程编码!确实,使用游程算法在最优情况下只能得到相同的字符串。
然而在这种情况下,我们看到另一个事实。该字符串有太多重复元素组成,尽管不是一个接着另一个。我可以使用位图压缩该字符串。也就是说我们可以使用序列中的位来保存给定元素出现的位置,这个序列可以简单地转换成一个十进制值。上例中的字符串“abababababababab”可以压缩成“1010”,即十进制数43690,甚至表示成十六进制的AAAA更好。由此这个长字符串就被压缩了。当解压(解码)消息时,我们再从十进制/十六进制转化成二进制,匹配字符的出现次数。当然,上面这个例程非常简单,假设只有一个重复字符,其余组成字符不同,像这样:“abacadaeafagahai”。那么,我们可以使用对字符“a”使用位图-“1010”,压缩后为“AAAA bcdefghi”。正如你所看到的,所有例子字符串只有16字符,这是一个限制。对变长数据使用位图有些棘手,它的解码不太容易。
从根本上来说,位图压缩保存了消息中频繁出现元素的位置!
此外,位图压缩不仅适用于字符串。也能压缩数组,对象以及任何数据。我之前帖子中的例程就很合适。我们需要使用JSON从服务器传输一个很大的数组到客户机(浏览器)。该数据非常适合于“游程编码”。假设数据不一样——不同年份的集合,这些时间以不同方式分散。
$data = array(
0 =& 1991,
1 =& 1992,
2 =& 1993,
3 =& 1994,
4 =& 1991,
5 =& 1992,
6 =& 1993,
7 =& 1992,
8 =& 1991,
9 =& 1991,
10 =& 1991,
11 =& 1992,
12 =& 1992,
13 =& 1991,
14 =& 1991,
15 =& 1992,
12345678910111213141516171819
$data = array(&&&&&&&&0 => 1991,&&&&&&&&1 => 1992,&&&&&&&&2 => 1993,&&&&&&&&3 => 1994,&&&&&&&&4 => 1991,&&&&&&&&5 => 1992,&&&&&&&&6 => 1993,&&&&&&&&7 => 1992,&&&&&&&&8 => 1991,&&&&&&&&9 => 1991,&&&&&&&&10 => 1991,&&&&&&&&11 => 1992,&&&&&&&&12 => 1992,&&&&&&&&13 => 1991,&&&&&&&&14 => 1991,&&&&&&&&15 => 1992, &&&&&&&&...);
JSON将会对消息进行编码,编码后的消息如下(一个简单但很大的javascript数组)。
[93,92,91,92,91,1992, ...]
[1991,1992,1993,1994,1991,1992,1993,1992,1991,1991,1991,1992,1992,1991,1991,1992, ...]
然而,如果使用位图压缩,我们将得到一个更短的数组。
$data = array(
0 =& array(1991, ';),
1 =& array(1992, ';),
2 =& array(1993, ';),
3 =& array(1994, ';),
$data = array(&&&&&&&&0 => array(1991, ';),&&&&&&&&1 => array(1992, ';),&&&&&&&&2 => array(1993, ';),&&&&&&&&3 => array(1994, ';),);
此时的JSON如下:
[[&],[&],[&],[&]]
[[1991,"0110"],[1992,"1001"],[1993,"0000"],[1994,"0000"]]
很明显,随着待压缩数据增加,压缩率会变得越来越好。事实上,大部分人都是从图像了解了位图压缩,因为该算法主要用于图像压缩。可想而知,在压缩黑白图像时效果会多么好(因为黑色和白色可以视为0和1)。实际上,它也被用于超过两种颜色(例如256色),压缩的程度就非常高。
下面基于PHP的实现仅仅是为了阐明位图压缩算法。这个算法适用于任何数据结构。
// too many repeating &a& characters
$msg = 'aazahalavaatalawacamaahakafaaaqaaaiauaacaaxaauaxaaaaaapaayatagaaoafaawayazavaaaazaaabararaaaaakakaaqaarazacajaazavanazaaaeanaaoajauaaaaaxalaraaapabataaavaaab';
function bitmap($message)
$bits = $rest = '';
while ($v = $message[$i]) {
if ($v == 'a') {
$bits .= '1';
$bits .= '0';
$rest .= $v;
return number_format(bindec($bits), 0, '.', '') . $;
echo bitmap($msg);
// uncompressed:
acaaaaadaaaabalaaeaaaaganaaxakaavawamaasavajawaaaayaauaaadalanagaeaeamaarafalaazaaaiasaanaahaaazaraxaalaahaaawaaajasamahaajaakarapanaakaoakaanawalaacamauaamaal
// compressed:
zhlvtlwcmhkfqiucxuxpytgofwyzvzbrrkkqrzcjzvnzenojuxlrpbtvb
123456789101112131415161718192021222324252627
// too many repeating &a& characters$msg = 'aazahalavaatalawacamaahakafaaaqaaaiauaacaaxaauaxaaaaaapaayatagaaoafaawayazavaaaazaaabararaaaaakakaaqaarazacajaazavanazaaaeanaaoajauaaaaaxalaraaapabataaavaaab';&function bitmap($message) {&&&&&& $i = 0;&&&&&& $bits = $rest = '';&&&&&&& while ($v = $message[$i]) {&&&&&&&&&&&&&&if ($v == 'a') {&&&&&&&&&&&&&&&&&&&&&&$bits .= '1';&&&&&&&&&&&&&&} else {&&&&&&&&&&&&&&&&&&&&&&$bits .= '0';&&&&&&&&&&&&&&&&&&&&&&$rest .= $v;&&&&&&&&&&&&&&}&&&&&&&&&&&&&&$i++;&&&&&& }&&&&&&& return number_format(bindec($bits), 0, '.', '') . $;}&echo bitmap($msg);&// uncompressed: acaaaaadaaaabalaaeaaaaganaaxakaavawamaasavajawaaaayaauaaadalanagaeaeamaarafalaazaaaiasaanaahaaazaraxaalaahaaawaaajasamahaajaakarapanaakaoakaanawalaacamauaamaal// compressed:zhlvtlwcmhkfqiucxuxpytgofwyzvzbrrkkqrzcjzvnzenojuxlrpbtvb
当数据中有元素频繁出现时,该算法效果很好,所以你需要研究待压缩数据的本质。实际上因为这个原因,该算法通常用于PNG8或GIF图像的压缩。
关于作者:
可能感兴趣的话题
关于伯乐在线博客
在这个信息爆炸的时代,人们已然被大量、快速并且简短的信息所包围。然而,我们相信:过多“快餐”式的阅读只会令人“虚胖”,缺乏实质的内涵。伯乐在线内容团队正试图以我们微薄的力量,把优秀的原创文章和译文分享给读者,为“快餐”添加一些“营养”元素。
新浪微博:
推荐微信号
(加好友请注明来意)
– 好的话题、有启发的回复、值得信赖的圈子
– 分享和发现有价值的内容与观点
– 为IT单身男女服务的征婚传播平台
– 优秀的工具资源导航
– 翻译传播优秀的外文文章
– 国内外的精选文章
– UI,网页,交互和用户体验
– 专注iOS技术分享
– 专注Android技术分享
– JavaScript, HTML5, CSS
– 专注Java技术分享
– 专注Python技术分享
& 2017 伯乐在线数据压缩代码(有注释)_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
数据压缩代码(有注释)
上传于||文档简介
&&霍夫曼压缩,游程编码,图像压缩等
阅读已结束,如果下载本文需要使用1下载券
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,查找使用更方便
还剩1页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢 上传我的文档
 下载
 收藏
该文档贡献者很忙,什么也没留下。
 下载此文档
正在努力加载中...
[计算机/互联网]数据压缩史
下载积分:600
内容提示:[计算机/互联网]数据压缩史
文档格式:PDF|
浏览次数:0|
上传日期: 11:56:58|
文档星级:
该用户还上传了这些文档
[计算机/互联网]数据压缩史
官方公共微信【##】世界上压缩率最高的压缩算法!_计算机吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:193,395贴子:
【##】世界上压缩率最高的压缩算法!收藏
以前我记得在一本书上看到过,压缩的大概过程如下:1、将任意大小的文件用普通压缩软件压缩2、将这个文件在计算机中的二进制保存内容前加一个“0.“,得到一个小于1的分数,设这个分数为n
(比如这个文件在计算机中的二进制保存格内容为11101,那么得到的内容就是0.11101)3、寻找一把精度十分高的尺子,在尺子上寻找一点,将尺子分为L和K两部分,并使L/(L+K)=n到此压缩结束,按照这个算法,无论多少内容的信息,都可以保存在一把尺子上,而解压过程,只需进行相反的过程
票牛教你如何买到热门、便宜、真实的演出门票!
第一,这不是面向计算机的压缩算法。第二:你的尺子并不是可达到任意精度的。这只是一个出名的思想实验,而并不是有效的算法。结束。
这是利用了无限数集相等的性质吧。。比如:完全平方数集=自然数集=有理数集&无理数集同理:线段=曲线=直线&平面(无限数集的相等不同于有限数集,具体证明你可以想象一个人坐一把椅子,所以只要一个数集里的x在另一个数集里有f(x)可以对应就说明二者相等)而且你这个算法也有问题,比方说00000的结果在尺子上是一样的了,然而他们存储的内容光占用空间的大小就不同了。如果只是数学上的思想,很容易想到一个非常简单的映射方法,因为计算机存储的信息是自然数集,所以,显然可以映射到(0,1)里。比如这个数是N那么对应的数就是1/(N+1)就好了。那么在这把长度为1的尺子上就可以表示了。当然,根据信息熵我们知道计算机中不可以这么做。假设原文件有X位,压缩后的文件有Y位(Y&=X)。那么长度为Y的文件最多也只能表示为2^Y种情况,2^X种情况对于他来说过于庞大、是不可能完全表示出来的(按照这个来看的话,其实压缩效率非常低,只有那些有特点的文件比如视频、音频、图片、文档等有压缩的价值,随机数据压缩成效不大)。所以,无损压缩是有极限的。
想要的东西总是推脱几分 做出无所谓的样子 所以没了很多东西
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或

我要回帖

更多关于 计算机二级java压缩包 的文章

 

随机推荐