⽤数学运算实现数据⽆损压缩的算法
⽤数学运算实现数据⽆损压缩的算法<?xml:namespace prefix = o ns = "urn:schemas-microsoft-
灰原哀出场的集数com:office:office" />
(An arithmetic On Lossless Data-Compress By Mathematical Operation)
王春海1 魏⽟冬2
(
摘 要 通常的⽆损压缩算法,⼤多最多只能达到 30 %左右的压缩率。本⽂提出的压缩算法思想,可以使数据的⽆损压缩率达到千万分之⼏,甚⾄更⾼。
关键词 :数学运算 数据压缩 ⽆损压缩 海量数据 压缩率 数学函数 数学表达式
1 数据的保存对数据压缩有迫切的需求
现在社会是信息社会,各类信息充斥于⽣活⼯作的各个⽅⾯,⼈们离不开信息的搜集、处理、保存与交流。历史遗留下来的信息数据,现时的信息数据,将来的信息数据,其数量之庞⼤令⼈难以想象。这些
海量的数据,没有任何⼀个单位或⼀个实体可以全部保留,只能是保存相应⽅⾯的部分数据,在需要时通过⽹络进⾏查和传输,以期达到数据的的共享与使⽤。但随着数据量的⽇益累积,⽹络访问量的激增,将会占⽤很多时间和⽹络带宽。为增加⽹络传输速度,减少访问时间,最直接的⽅法是增加⽹络带宽(从最早使⽤的拨号到 DDN 专线,带宽已达⼗兆、百兆、千兆…)。但是,⽹络带宽终有极限,数据也越积越多,如此下去终有⼀天,众多的数据将⽆法保存。怎么解决这⼀问题呢?采⽤⾼效的数据压缩是⼀种较好的选择 。
2 现有的压缩算法效率低下
⽬前,数据压缩主要分为两种,⼀种是有损压缩,主要⽤于⾳频、视频、图形、图像的压缩,其主要特征是,数据经压缩后,⼈们可以接受;另⼀种是⽆损压缩,适⽤于⽂本⽂件、数据库、程序等数据的压缩,其特点是,数据经压缩→解压缩后,可以完全与压缩前的数据⼀样。⼀般情况下,采⽤⽆损压缩,最⼤的压缩率只能达到 70 %左右(即压缩后的⽂件是原⽂件的 30 %)。 通常情况下 是 50 %- 60% (即压缩后的⽂件是原⽂件的40-50%) 。压缩率如此低的原因主要在于,⽬前的⽆损压缩算法,都是基于在⽂件中相同的、重复的序列进⾏压缩。即使 对⽂本⽂件、数据库⽂件等重复性⽐较⾼的数据进⾏压缩,其压缩率最⼤也只有70%;⽽ 如果对可执⾏程序(⽐如EXE ⽂件、 COM ⽂件等),其压缩率只能达到百分之⼏。因此,寻更好更有效的办法提⾼数据的压缩率,具有重⼤的现实意义。
3 ⽤数学运算实现数据压缩算法
在此,本⼈①提出⼀种新型的压缩算法,即利⽤数学运算实现数据的⾼压缩率。
计算机内的所有数据⽆论是⽂本⽂件、图形⽂件,还是可执⾏⽂件,都可编辑为 16 进制数据⽂件。下⾯就是⼀个⽂件的部分 16 进制数据:
D5 E2 CA C7 D2 BB B8 F6 CA DD EA 7F 92 23
适合农村的致富项目11 23 42 7F DE 9D C7 98 72 1D A2 6F 7F 8F
她的组词<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />
对于这种数据⽂件,基于简单的数学知识,我们有以下事实:
① 组成这些⽂件的数据均可视为⼀个有限位的整数序列,这是显然的,因为任意⼀个⽂件⽆论多长,总是有限的,于是其对应的数据⽂件也是有限的;
② 每个整数序列均可视为某个⽆理序列的⼀个⽚断,这也是显然的,做如此分析,意义主要在于随后的数据处理更易于实现;
③ 每个⽆理序列均可由某个函数在某点的函数值取得,这在理论上是⾏的通的,如 10 进位制数据 141421356…可认为是由⽆理数 =1.41421356…的若⼲位⽚段获得。
由此提出数学运算压缩算法的具体思想:
① 构造具备理想长度的⽆理数⽚段数据库,被压缩⽂件与之对应,;苏打水品牌
② 构造函数库,这个数据库由⾜够简单的、易于实现⾼精度数值计算的函数构成,并使⽆理数⽚段数据库中的每⼀数据均可由函数库中的某⼀函数的某⼀相对简单的数值的函数值取得,或若⼲函数值的代数和;
③ 任何⼀个⽂件在计算机上记录为⼀个数字序列,例如, ⼀张刻滿的CD或DVD光盘,如果将其做成⼀个光盘映射⽂件,这个⽂件⽤数字的⽅式保存在计算机的硬盘上,将会是⼀个数字的序列(因为计算机中最终保存的都是16进制数据)。如果这个⽂件的数据⽂件排序 与
⽆理数⽚段数据库中某个⽆理数⽚段的排序相同,则这个⽂件可由函数库中的某个函数的某⼀函数值计算获得。
④ 对任何⼀个⽂件,出与之对应的⽆理数⽚段,并随之得到产⽣此值的函数 f (x) 。 于是⽂件将以函数形式 f (x), 参数 1 ,参数 ,也即⽂件被压缩为简单的函数形式 f (x), 参数 1 ,参数 2 。打开压缩
⽂件时,只需简单运算即可得到原⽂件的数据⽂件。
此设想的现实意义:⾯对浩如瀚海的数据,只需要极⼩的存储就可以代表。在⽹络上需要下载东西时,也⽆需下载实际的数据,只要下载与其对应的数学表达式,当真正需要时,在本地运算就可以了。这样,占⽤⽹络带宽将极低,甚⾄不⽤下载。例如:⼀个⼏百兆或⼏千兆的镜像⽂件,如果⽤⼀个简单的数学表达式来代表,我们完全可以直接把这个数学表达式抄下来即可。
4 数学运算数据压缩法需考虑的问题
数学运算数据压缩法也有相当⼤的局限性和不⾜:
①现有的数据都是采⽤数字⽅法进⾏保存,数字⽅法有其优点,但也有其严重的缺点。⽤数学⽅法实现数据的⽆损压缩,是⽤“模拟”的⽅法来保存“数字”,数字数据永远只能、最⼤近似的“模拟”模拟数据,却不能完全真实的再现模拟数据。举例来说:e1,这可以看做⼀个模拟数据,e1的结果是⼀个数字信号。e1的结果永远是模拟e1,却不能代替e1这个数据。
②数学运算数据压缩法的数据库巨⼤且⽣成的代价较⼤。以长度为百位⽆理数⽚段为基本单元的数据库为例,即使按⼗进制算,数据库中也将有10100数据及相应的⽣成函数,这是⼀个天⽂数字。但这是值得的,因为这毕竟得到了百分之九⼗⼏的压缩率,⽽对解压⽆过⾼要求,只需通过简单运算即可。
如果建⽴的数据库⾜够⼤,将可以达到千万分甚⾄更⼤的压缩率。另外,我们可以通过⼀些⽅法,使数据库中的函数尽可能的少。这⼀⽅⾯可以参看下⾯第5部分的内容。
③虽然对任意的数据,我们都可以⽤⼀个相对简单的数学表达式来代替,但代价⽐较巨⼤,且不易实现。我们可以采⽤“分段”的⽅法实现,就是对于任意长度为p1的数字序列,按照p2的长度进⾏分段,p2序列的数据对应的简单的数学表达式已经事先存放在⼀个数据库中,如果p2序列的压缩率⾜够,整个数据就可以达到p2的压缩率。具体实现思路请见下⽂。
5 数学运算数据压缩算法的实现步骤
假设我们想达到千分之⼏的⽆损压缩率(压缩后的⽂件是原来的千分之⼏),那我们需要创建⼀个包括⼀个如下格式的数据库:
表1:数据库与数学代表式对应表
数学表达式数字序列
f((991个0) (0000)
f((991个0) (0001)
…………
f(xn)ffff……(991个f)……ffff
其中f(xn)是⼀个有限位的数学表达式,如e3、、1og3等。在⽣成数据库时,采⽤某个数学表达式,取其运算结果到1000位,并且此结果序列与上表中的数字序列进⾏查,与某⼀⾏相对应,就⽤此数学表达式代替这⼀⾏。张璇陈思诚
这样,⼀个任意长度的数据序列,将按照每1000位进⾏分段,并查上表1,每1000位⽤⼀个数学表达式相对应。在分段后,如果最后⼀个分段不⾜1000位,记下此段的长度,然后不⾜部分补0,然后再查表1。此时形成的压缩⽂件内容如下:
⽂件长度,压缩率,数学表达式1,数学表达式2,……,数学表达式n-1,最后⼀个数学表达式n
⽂件长度:压缩前⽂件的总长度
压缩率:分段⽅法,如按照1000位进⾏分段
数学表达式1:第1个1000位序列对应的数学表达式
数学表达式n:第n个1000位序列对应的数学表达式
在解压缩时,每⼀个数学表达式运算到“压缩率”对应的位数。
为了减少数据库中函数的数量,我们可以采⽤如下的⽅法来解决:
假设函数f(x1)的运算结果,前100位与某⼀个序列相对应,如果把f(x1)运算到101位,将运算结果的第1位去掉,剩下的100位也将与这个数据库中的某⼀个序列相对应。如果把f(x1)运算到100+n位,将运算结果的前n位去掉,也将与数据库中的某⼀个序列相对应。采⽤此种
⽅法,将会把数据库中函数的类型与数量降到最低。
对此,我们提出数学运⾏法的压缩算法:
任意的、⾜够多的数据,将其保存为⼀个⾜够⼤的、单⼀的数据⽂件,这将是⼀个有理数的序列。对于这个序列,我们按照表1中的“压缩率”进⾏分段,每⼀段由其相对应的数学表达式来表⽰。
压缩后,将是⼀个如下的序列:
f(x1,y1,z1),n11,n12,n13 ,f(x2,y2,z2),n21,n22,n23,……,f(xm,ym,zm),nm1,nm2,nm3
意义如下:
f(x,y,z) 代表⼀个数学表达式,f()可以是⼀个数学公式、数学函数或⼀个简单的算术表达式,x、y、z代表数学表达式的参数,n1,表⽰这个数学表达式运算结果的第某⼀位,n2指从n1位开始后的长度,代表数据的⼤⼩。如果n2过于⼤,n2也可以⽤⼀个数学表达式代替,此时数学表达式变为:
f(x,y,z),n1,(f2(x,y,z)),n3
在解压缩时,可以⽤多线程的⽅法,同时运⾏许多数学表达式,然后运算到指定位数进⾏“组合”。在运算到最后⼀个数学表达式时,运⾏到“⽂件长度”与“压缩率”的余数即可。
魏⽟冬2,男,汉,河北新乐。河北经贸⼤学数统学院,⾼级讲师。古曲
注:本⽂的整体思想、数学运算压缩算法思想由王春海提出,本⽂的数学表达实现由王春海和魏⽟冬提出。本⽂最早在2004年发表于于河北经贸⼤学学报上
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论