1、用数学运算实现数据压缩算法在此,本人提出一种新型的压缩算法,即利用数学运算实现数据的高压缩率。计算机内的所有数据无论是文本文件、图形文件,还是可执行文件,都可编辑为 16 进制数据文件。下面就是一个文件的部分 16 进制数据:D5 E2 CA C7 D2 BB B8 F6 CA DD EA 7F 92 2311 23 42 7F DE 9D C7 98 72 1D A2 6F 7F 8F 对于这种数据文件,基于简单的数学知识,我们有以下事实:组成这些文件的数据均可视为一个有限位的整数序列,这是显然的,因为任意一个文件无论多长,总是有限的,于是其对应的数据文件也是有限的;每个整数序列均可视为某个
2、无理序列的一个片断,这也是显然的,做如此分析,意义主要在于随后的数据处理更易于实现;每个无理序列均可由某个函数在某点的函数值取得,这在理论上是行的通的,如 10 进位制数据 141421356可认为是由无理数 =1.41421356的若干位片段获得。由此提出数学运算压缩算法的具体思想:构造具备理想长度的无理数片段数据库,被压缩文件与之对应, ;构造函数库,这个数据库由足够简单的、易于实现高精度数值计算的函数构成,并使无理数片段数据库中的每一数据均可由函数库中的某一函数的某一相对简单的数值的函数值取得,或若干函数值的代数和;任何一个文件在计算机上记录为一个数字序列,例如,一张刻滿的 CD 或 D
3、VD 光盘,如果将其做成一个光盘映射文件,这个文件用数字的方式保存在计算机的硬盘上,将会是一个数字的序列(因为计算机中最终保存的都是 16 进制数据) 。如果这个文件的数据文件排序与无理数片段数据库中某个无理数片段的排序相同,则这个文件可由函数库中的某个函数的某一函数值计算获得。对任何一个文件,找出与之对应的无理数片段,并随之得到产生此值的函数 f (x) 。于是文件将以函数形式 f (x),参数 1,参数,也即文件被压缩为简单的函数形式 f (x),参数 1,参数 2。打开压缩文件时,只需简单运算即可得到原文件的数据文件。此设想的现实意义:面对浩如瀚海的数据,只需要极小的存储就可以代表。在网
4、络上需要下载东西时,也无需下载实际的数据,只要下载与其对应的数学表达式,当真正需要时,在本地运算就可以了。这样,占用网络带宽将极低,甚至不用下载。例如:一个几百兆或几千兆的镜像文件,如果用一个简单的数学表达式来代表,我们完全可以直接把这个数学表达式抄下来即可。4 数学运算数据压缩法需考虑的问题数学运算数据压缩法也有相当大的局限性和不足:现有的数据都是采用数字方法进行保存,数字方法有其优点,但也有其严重的缺点。用数学方法实现数据的无损压缩,是用“模拟”的方法来保存“数字” ,数字数据永远只能、最大近似的“模拟” 模拟数据,却不能完全真实的再现模拟数据。举例来说:e 1,这可以看做一个模拟数据,e
5、 1 的结果是一个数字信号。e 1 的结果永远是模拟 e1,却不能代替 e1 这个数据。数学运算数据压缩法的数据库巨大且生成的代价较大。以长度为百位无理数片段为基本单元的数据库为例,即使按十进制算,数据库中也将有 10100 数据及相应的生成函数,这是一个天文数字。但这是值得的,因为这毕竟得到了百分之九十几的压缩率,而对解压无过高要求,只需通过简单运算即可。如果建立的数据库足够大,将可以达到千万分甚至更大的压缩率。另外,我们可以通过一些方法,使数据库中的函数尽可能的少。这一方面可以参看下面第 5 部分的内容。虽然对任意的数据,我们都可以用一个相对简单的数学表达式来代替,但代价比较巨大,且不易实
6、现。我们可以采用“分段”的方法实现,就是对于任意长度为 p1 的数字序列,按照p2 的长度进行分段,p2 序列的数据对应的简单的数学表达式已经事先存放在一个数据库中,如果 p2 序列的压缩率足够,整个数据就可以达到 p2 的压缩率。具体实现思路请见下文。5 数学运算数据压缩算法的实现步骤假设我们想达到千分之几的无损压缩率(压缩后的文件是原来的千分之几) ,那我们需要创建一个包括一个如下格式的数据库:表 1:数据库与数学代表式对应表 数学表达式 数字序列 f(x1) 0000(991 个 0)0000 f(x2) 0000(991 个 0)0001 f(xn) ffff(991 个 f)ffff
7、 其中 f(xn)是一个有限位的数学表达式,如 e3、 、1og3 等。在生成数据库时,采用某个数学表达式,取其运算结果到 1000 位,并且此结果序列与上表中的数字序列进行查找,与某一行相对应,就用此数学表达式代替这一行。这样,一个任意长度的数据序列,将按照每 1000 位进行分段,并查找上表 1,每 1000 位用一个数学表达式相对应。在分段后,如果最后一个分段不足 1000 位,记下此段的长度,然后不足部分补0,然后再查找表 1。此时形成的压缩文件内容如下:文件长度,压缩率,数学表达式 1,数学表达式 2,数学表达式 n1,最后一个数学表达式 nn 文件长度:压缩前文件的总长度 n 压缩
8、率:分段方法,如按照 1000 位进行分段 n 数学表达式 1:第 1 个 1000 位序列对应的数学表达式 n 数学表达式 n:第 n 个 1000 位序列对应的数学表达式在解压缩时,每一个数学表达式运算到“压缩率”对应的位数。为了减少数据库中函数的数量,我们可以采用如下的方法来解决:假设函数 f(x1)的运算结果,前 100 位与某一个序列相对应,如果把 f(x1)运算到 101 位,将运算结果的第 1 位去掉,剩下的 100 位也将与这个数据库中的某一个序列相对应。如果把 f(x1)运算到 100n 位,将运算结果的前 n 位去掉,也将与数据库中的某一个序列相对应。采用此种方法,将会把数
9、据库中函数的类型与数量降到最低。对此,我们提出数学运行法的压缩算法:任意的、足够多的数据,将其保存为一个足够大的、单一的数据文件,这将是一个有理数的序列。对于这个序列,我们按照表 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,表示这个数学表达式运算结果的第某一位,n
10、2指从 n1 位开始后的长度,代表数据的大小。如果 n2 过于大,n2 也可以用一个数学表达式代替,此时数学表达式变为:f(x,y,z),n1,(f 2(x,y,z),n3 在解压缩时,可以用多线程的方法,同时运行许多数学表达式,然后运算到指定位数进行“组合”。在运算到最后一个数学表达式时,运行到“文件长度”与“压缩率”的余数即可。2. 二进制编码和二进制数据二进制编码是计算机内使用最多的码制,它只使用两个基本符号“0“和“1“,并且通过由这两个符号组成的符号串来表示各种信息。二进制的数值数据亦是如此,计算其所代表的数值的运算规则是:m-1N = D i * 2i (2.4) D i 的取值为
11、 0 或 1i = -k例如 (1101.0101) 2 = (13.3125) 10 。等号左右两边括号内的数字为两个不同进制的数字,括号右下脚的 2 和 10 分别指明左右两边的数字为二进制和十进制的数。按公式(2.4),计算二进制的 1101.0101 的实际值为:1*2 3+1*22+0*21+1*20+0*2-1+1*2-2+0*2-3+1*2-4=8+4+1+0.25+0.0625 = 13.3125从式中可以进一步看到,由于二进制只用 0 和 1 两个符号,在计算二进制位串所代表的实际值时, 只需把符号为 1 的那些位的位权相加即可, 则上式变为:2 3 + 22 + 20 +
12、2-2 + 2-4 = 13.3125熟悉地记清二进制数每位上的位权是有益的。当位序号为 0-12 时, 其各位上的位权分别为1、2、4、8、16、32、64、128、256、512、1024、2048 和 4096。第 1 页 S tandard 的 ECMA - 321 2001 年 6 月 规范信息和通信系统 电话:+41 22 849.60.00 - 传真:+41 22 849.60.01 - 网址:http:/www.ecma.ch - 互联网:helpdeskecma.ch 无损数据流 压缩算法- (SLDC) 第 2 页 。 第 3 页 S tandard 的 ECMA - 32
13、1 2001 年 6 月 规范信息和通信系统 电话:+41 22 849.60.00 - 传真:+41 22 849.60.01 - 网址:http:/www.ecma.ch - 互联网:helpdeskecma.ch P 的 ECMA - 321.doc 09-07-01 无损数据流 压缩算法- (SLDC) 第 4 页 。 第 5 页 简史 在过去的十年里,ECMA 的出版磁带和众多 ECMA 的标准磁带,磁 墨盒,以及光盘盒。 这些媒体最近发展有非常高的物理记录 密度。 为了使数据容量优化利用所产生的,无损压缩算法 设计,使用户减少数据的表示数位所需的。 这些压缩算法 ECMA 的登记,
14、国际注册管理局成立 国际标准组织/环境查核人。 登记数值在于分配给每个已注册的算法的标识符,将 记录介质,因此,它表明压缩算法(s)已被使用。 这 ECMA 标准是标准的压缩算法的第四 ECMA 的。 之前的三个标准是: 的 ECMA - 151 国际标准组织 /符合 IEC 11558 信息交换用数据压缩-嵌人字典的自适应编码与- DCLZ 算法(1991 年 6 月) 的 ECMA - 159 国际标准组织 /符合 IEC 12042 信息交换用数据压缩-二进制算术编码算法- (1991 年 12 月) 的 ECMA - 222 国际标准组织 /符合 IEC 15220 自适应无损数据压缩
15、算法- (1995 年 6 月) 这 ECMA 的标准 ECMA - SLDC 是基于的 ECMA - 222。 它已经扩展定义一个控制组 符号,标识: 在用户数据 记录的边界 数据重置 编码流地点,在这历史缓冲区 数据边界 编码流地点,在这片位插入到下一个 32 位 在数据的数据段包含的编码流压缩或解压缩 这种压缩算法压缩记录允许不同规模,而且随着文件标记,以 有效地编码成一个输出流,其中很少或根本没有额外的控制信息是需要解码后 用户数据 。 上面列出的所有 ECMA 标准已通过标准由 ISO / IEC 作为国际。 这 ECMA 标准 也将有助于通过 ISO / IEC 采纳为国际标准下的
16、快速程序。 这 ECMA 的标准已经通过 Ecma 会员大会 2001 年 6 月。 第 6 页 第 7 页 -我- 目录 一 范围 一 2 一致性 一 三 参考 一 4 定义 一 4.1 控制符号 一 4.2 拷贝的指针 一 4.3 数据字节 一 4.4 数据符号 一 4.5 位移场 一 4.6 数据流编码 一 4.7 编码记录 一 4.8 结束标记 一 4.9 记录结束符号(复议符号) 一 4.10 文件标记 一 4.11 文件标记符号 2 4.12 刷新符号 2 4.13 历史缓冲区 2 4.14 文学一 2 4.15 文字 2 2 4.16 匹配的字符串 2 4.17 比赛计数 2 4
17、.18 比赛场数 2 4.19 垫 2 4.20 记录 2 4.21 记录段 2 4.22 再入点 一 4.23 复位 X 符号 2 4.24 复位 1 符号 2 4.25 复位 2 符号 2 4.26 方案 1 2 4.27 计划 1 符号 2 4.28 方案 2 2 4.29 计划 2 符号 三 4.30 用户数据 三 5 公约和符号 三 5.1 表示数字 三 5.2 名称 三 6 缩略语 三 7 算法概述 三 7.1 计划 1 编码 三 第 8 页 -二- 7.2 计划 2 编码 三 7.3 历史缓冲区 4 8 编码规范 4 8.1 用户数据 4 8.2 历史缓冲区 4 8.3 数据流编
18、码 4 8.3.1 再入点 5 8.4 数据符号 5 8.4.1 1 数据符号文字 5 8.4.2 拷贝的指针数据符号 5 8.4.3 2 数据符号文字 7 8.5 控制符号 7 8.6 垫 8 第 9 页 一 范围 这 ECMA 的标准规定了无损压缩算法来减少所需的数量的 8 位字节 代表数据记录和文件标记。 该算法被称为无损数据压缩流 算法(SLDC)。 一个缓冲区大小(1 024 字节)指定。 对数字标识符根据 ISO /符合 IEC 11576 分配给这个算法是 6。 2 一致性 压缩算法应符合本 ECMA 的标准,如果它编码的数据流 符合 ECMA 标准的要求这一点。 三 参考 国际
19、标准组织/符合 IEC 11576:1993 信息技术-无损的登记程序的算法 压缩的数据。 4 定义 4.1 接入点 甲流的位置,在编码的数据时的数据可能被解码。 4.2 控制符号 一个控制符号可以改变的压缩方案,复位历史缓冲区,标记记录结束了, 表示文件标记,或指示流终止一个编码数据。 4.3 拷贝的指针 阿一部份计划的编码数据流输出,取代一个数据字节,字符串 规格匹配的字符串。 4.4 数据字节 一个数据元素的用户是进行编码。 4.5 数据符号 元素的一个字节一个编码记录,它代表一个或更多的数据。 4.6 位移场 一个指针字 段在复制,指定一个位置的第一个字节范围内的历史缓冲区 匹配的字符
20、串。 4.7 编码的数据流 用户编码后的数据输出流。 4.8 编码记录 用户数据 输出流的编码后一个记录。 4.9 结束标记 一个控制符号,它表示流的编码数据终止。 4.10 记录的结束符号(EOR 的符号) 一个控制符号,它表示数据流的末尾,一个记录中的编码。 4.11 文件标记 一个记录元素用来标记组织分界)在用户数据 (如目录。 第 10 页 - 2 - 4.12 文件标记符号 数据流控制符号的编码,它表示在用户数据 文件标记。 4.13 冲洗符号 一个控制符号,如果需要,其次是垫,使一个大小编码的数据流 32 位的整数倍。 4.14 历史缓冲区 其中一个数据结构来存储数据字节 1 的压
21、缩方案和供使用 减压。 文字 1 4.15 成部分的编码数据流方案,输出 1,表示未编码的一个数据字节 任何拷贝的指针。 4.16 文字 2 一个字节的一部分的编码数据流方案,输出 2,它代表一个单一的数据。 4.17 匹配的字符串 一个缓冲区序列的两个或多个字节的历史是与用户相同的字节序列 数据。 4.18 比赛计数 长度,在匹配字符串的字节,一个。 4.19 比赛场数 这部分的拷贝数指针,指定了比赛。 4.20 垫 甲流中的数据编码的位插入,这样的编码数据流的大小是一 32 位的整数倍。 4.21 记录 用户的数据元素,它包含至少一个数据字节。 4.22 记录段 A 记录第一个在给定的编码
22、方案。 4.23 复位 X 符号 一个通用的参考要么重设 1 符号或 RESET 2 符号。 4.24 复位 1 符号 一个控制符号,表示历史缓冲复位,并在随后的符号进行编码 计划 1。 4.25 复位 2 符号 一个控制符号,表示历史缓冲复位,并在随后的符号进行编码 计划 2。 方案 1 4.26 压缩方案,它使用一个历史缓冲区来实现数据压缩。 4.27 计划 1 符号 一个控制符号,表示以后的数据符号的方法是复制指针或立即 1 秒。 4.28 方案 2 方案的包装设计,编码,数据压缩的最小扩张。 第 11 页 - 3 - 4.29 计划 2 符号 一个控制符号,表示以后的数据符号进行编码计
23、划 2。 4.30 用户数据 资源的信息进行编码,按照这种压缩基地 gorithm。 5 公约和符号 5.1 数字表示法 下列公约和符号适用于本文档,除非另有说明。 - 这些位设置是指由零个或一个。 - 数位二进制符号和组合的零点和串数字代表 最重要的一点到左边。 - 信和括号中的数字表示十六进制数字表示法。 - 所有其他号码在小数形式 5.2 名称 基本的元素名称,例如特定领域,书写了一个大写首字母。 6 缩略语 提高采收率 记录完 LSB 的 最低有效位 最高位 最重要的位 7 算法概述 用户数据 将被压缩 ECMA 标准按照这个商标包括记录和文件。 记录包含了 8 位数据字节,可以是任何
24、非零的长度。 数据字节,可在任一编码方案 1 或方案 2。 7.1 计划 1 编码 内可能存在重复数据记录串两个或多个字节,这样的信息 长度和字符串中的位置可能被替换一个代替随后复制或相同的副本 字符串。 这种信息称为一个拷贝的指针。 这 ECMA 标准允许拷贝的指针 当两个字符串替换相应的字节为单位,抵消了 1 到 1 023 个字节的数据在用户 数据。 发生在哪里字符串匹配,数据压缩是可能的,并且数据数位的编码可以 将数据小于用户数位,数据压缩是可能的。 任何数据字节的一部分 一个重复的字符串可能被编码为一个拷贝的指针。 任何数据字节编码是不是指针作为副本 是零编码为一个 Literal
25、1,其中领先的是位设置添加到数据字节,从而表明 这是文字 1。 编码的地区,超过其副本指针和文字值定义为 根据被编码方案 1。 计划 1 编码为 222 相同,有着这样的 ECMA 的,除了 此外符号的控制。 这些数据都实现了的 Lempel - Ziv 1(类 LZ1) 压缩算法。 复位后一计划一符号或符号,所有字节的用户数据 ,应 编码根据计划 1。 7.2 2 编码方案 也有可能存在于用户的数据,该地区存在一些这样的重复字符串。 那里有没有 重复的字符串,需要在计划 1 编码的编码,每 9 位数据流立即 1value 数据字节。 用户数据 ,这导致一个编码的数据流更多的位比有 12.5。
26、 为了 避免这种数据扩展,计划 2 编码可以使用。 在方案 2 编码,数据字节复制到 输出位流。 为了使解码器,以区分数据字节设置控制的象征,到(法郎),从一 尾随零位的编码设置为以下每法郎)的数据字节(。 对于随机数据,这往往 第 12 页 - 4 - 产生的编码数据流的位比用户数据 约 0,05以上。 复位后 2 符号或计划 2 符号,所有的用户数据 字节的编码应根据计划 2。 7.3 历史缓冲区 找到匹配的字符串是在 1 024 字节的历史缓冲区。 在此之前复位 X 符号的编码 数据流,历史缓冲区是不确定的。 紧随复位 X 符号,在历史缓冲区 被定义为包含任何数据。 作为第一个 1 02
27、4 个字节的数据后,复位 X 符号的记录,每一个字节存储在随后 缓冲区的位置,在历史,从 0 到 1 023。 对于每个数据字节 N,比较得与各 数据字节在位置 0 到 n - 1 来测试匹配的字符串。 一旦历史缓冲区被填满,新的字节替换以前存储在位置 0 字节为 1 023。 该 包装储存位置从 1 023 到 0。 对于数据存储在字节 N 位置,可以作出比较 每个字节的数据,以匹配测试弦乐在其他地方比 N。 匹配字符串可能会换 历史的终结周围的缓冲区(如 1 022 偏移,长度 10)。 通过更新缓冲区解码期间相同的历史,解码器历史缓冲区应是相同的, 与编码器输出后,历史上的任何具体数据缓
28、冲区字节,编码后同样的数据字节。这是,因此,没有必要单独编码的数据内容包括历史内的信息 流。 这 ECMA 标准没有规定在何种情况下重置历史缓冲区,开关 方案一和方案之间 2,或刷新到 32 位边界。 8 编码规范 8.1 用户数据 用户数据 应包括记录和文件标记。 记录可能包含任何字节数的 8 位数据。 文件标记可以用来标记组织分界)的用户数据 (如目录。 8.2 历史缓冲区 历史缓冲应充满 1 024 字节的位置,编号为 0 到 1 023。 对于任何数据字节被 记录历史缓冲区可能包含 1 023 个字节的数据上。 历史内容的缓冲区 最初是不确定的。 紧随复位 X 符号,历史缓冲区中的数据
29、是说没有蕴藏。 由于每个字节的 N 第一个 1 024 个字节的记录,该字节存储到所在地氮,从 0 到 1 023,和历史缓冲区 位置 0 到 n - 1 可能进行检查,以查找匹配的数据字节。 经过 023 字节的数据记录在位置 1,下一个数据字节都被记录在位置 0,取代 第一个数据字节是储存在那里。 由于每个后续数据字节存储到的位置氮,所有历史缓冲区 所在地以外的地点进行检查,以 N 可以找到匹配的数据字节。 应记录的数据字节的缓冲区,不论顺序入历史记录的边界,文件 标志或编码方案。 X 符号的复位导致数据字节存储到旁边的位置 0, 位置无论在何种以往任何字节的存储。 8.3 编码的数据流
30、一个经过编码的数据流是一个片流数据符号,控制符号和。 这应是包装 进入连续字节,0 位开始的字节的最重要的。 图 1 显示了一个控制符号 其次是数据符号包装成字节。 第 13 页 - 5 - 控制符号 数据符号 . 编码 数据 符号 米 s b 升 s b 米 s b 升 s b 字节 0 字节 1 字节 2 编码 数据字节 米 s b 升 s b 米 s b 升 s b 米 s b 升 s b 图 1 -编码的数据流,包装成字节 注意 虽然一个编码的数据流是垫充满了 32 位边界,包装表示 8 位 字节。 这使得本已命令字节内使用较大的应用程序的话,任何被指定 压缩算法。 8.3.1 接入点
31、 接入点是一个流的位置,在编码的数据在该数据可能被解码,首先 无论是文件标记或第一字节的数据记录。 一个接入点必须满足以下三个 要求。 它应发生在 32 位边界。 (以前的数据将被填充)。 X 符号的复位前应首先数据符号下面接入点。 第一个数据符号后,接入点应能代表一个字节中的第一个数据记录。 8.4 数据符号 数据符号将用来表示数据字节的用户。 数据符号是文字一,复制指针, 或立即 2。 以下任一计划一符号或复位 1 符号,只有 1 和拷贝的指针文字符号应 用来表示数据字节(方案 1 编码)。 以下任一方案二符号或复位 2 符号,只有 2 个符号应立即用来代表 数据字节(方案 2 编码)。
32、8.4.1 1 数据符号文字 1 数据符号文字应当使用计划 1 编码来表示所有的数据字节不 编码为指针部分副本。 他们应是 9 位符号,包括零位设置为主导 和一个字节的数据复制,如图 2 所示。 8 7 6 5 4 三 2 一 0 零 数据字节 图 2 - 1 的数据符号文字 8.4.2 拷贝的指针数据符号 一个拷贝的指针数据符号可用于计划1 编码来表示数据的字节串 其中一个匹配的字符串存在于历史缓冲区。 一个拷贝的指针应包括位设置为一个领先 一,一个 M 位匹配计数字段和一个 10 位位移场,如图 3。 第 14 页 - 6 - 注意 这 ECMA 标准并不要求所有匹配的字符串是数据代表的拷
33、贝的指针 符号,也没有指定的优先,当出现多个匹配的字符串。 +10 M 9 至 10 9 8 7 6 5 4 三 2 一 0 一 比赛计数 场 位移场 图 3 -拷贝的指针数据符号 位移场应包含的数据字节的位置,在历史缓冲区第一次 匹配的字符串。 这场比赛场数应具有指定的长度和值 1 表,指示的长度 匹配字符串。 表 1 -赛事计数字段值 匹配字符串 长度(字节) 比赛场数 值 2 0 0 三 0 1 4 10 00 5 10 01 6 10 10 7 10 11 8 110 000 9 110 001 : : 15 110 111 16 1110 0000 17 1110 0001 : :
34、31 1110 1111 32 1111 00000000 33 1111 00000001 : : 270 1111 一千一百一万一千一百一 271 1111 11101111 保留和 控制符号 1111 11110000 : 1111 11111111 第 15 页 - 7 - 一个拷贝的指针只能取代单字节的记录数据,这样从一个符号的编码的提高采收率 恰恰表明了数据流的一个记录的结束。 一个拷贝的指针可以指向一个匹配的字符串,其中包括记录,数据字节从一个以上 跨度文件标记,或为 2 编码方案。 第二个字节的匹配串的可能不存在于历史缓冲区比赛开始时(如 该字符串的第一个字节被替换有可能成为第
35、二个字节的匹配串的)。 相反, 匹配的字符串的第一个字节的字符串可能会被覆盖的一个字节是一个取代 拷贝的指针,因为它们是按顺序输入到历史缓冲区。 因此,匹配的字符串和 被替换的字符串缓冲区共存不需要他们的全部历史中,在同一时间。 8.4.3 2 数据符号文字 2 数据符号文字应当使用计划 2 编码来表示所有的数据字节。 对于数据组字节 至(00)至(远东),应是 8 位符号,只包含字节数据的一个副本,如图 图 4。 对于数据字节设置为(法郎),应当是 9 位的符号,字节组成的数据副本 其次是在图 5 所示零,。 7 6 5 4 三 2 一 0 数据字节 图 4 - 1 的数据符号文字,数据字节
36、(00)至(远东) 8 7 6 5 4 三 2 一 0 数据字节 零 图 5 - 1 的数据符号文字,数据字节(法郎) 注意 新增加的零跟踪的数据字节(法郎)允许一个解码器区分文学 2 和 控制符号,因为所有的控制符号有九位设置到一个龙头。 8.5 控制符号 控制符号插入到编码的数据流,使解码器能够正确解码数据 符号。 表 1 列出了名称和符号价值的控制。 列指示标记垫 这是否符号是由一组垫后为全零或所有的。 如果列有一个标记垫 没有价值,那么就没有垫,和随后的符号是字节打包到正常。 第 16 页 - 8 - 表 1 -控制符号值 控制符号价值 垫 冲洗 1 1111 1111 0000 零点
37、 计划 1 1 1111 1111 0001 无 计划 2 1 1111 1111 0010 无 文件标记 1 1111 1111 0011 零点 提高采收率 1 1111 1111 0100 零点 复位 1 1 1111 1111 0101 无 复位 2 1 1111 1111 0110 无 结束标记 1 1111 1111 1111 的 一个刷新符号可能被用来进行流的大小是 32 位编码数据的整数倍。 一个计划 1 符号表示下列数据符号是 1 编码方案。 一个计划 2 符号表示下列数据符号是 2 编码方案。 文件标记符号代表一个在用户数据 文件标记。 一种提高采收率的象征,应当遵循数据符号
38、,编码一个或多个字节直至并包括最后 数据字节的记录,并先于第一个数据记录的符号下。 1 符号的复位表明以下数据符号进行编码方案 1,而历史 缓冲器复位。 一个复位 2 符号表明以下数据符号进行编码方案二,而历史 缓冲器复位。 一个结束标记应当用来标记流结束的编码数据,并应当只出现外 任何编码记录。 以下要求适用于符号序列的控制符号和数据: 一个刷新控制符号,垫其次,可插入一个编码数据流的任何位置。 文件标记和结束标记符号应首先在 32 位边界,不得进行编码位于 记录。 一个用户数据 空集应当有一个结束标志符号编码之前,任何其他符号。 继结束标记符号,在历史缓冲区应是不确定的编码开始在另一 数据
39、流。 一个复位 X 或 Schem X 符号外发生该记录应遵循的编码立即 无论是冲洗符号或数据符号。 8.6 垫 阿垫可能是从 0 到 31 位长度英寸 一垫的位应设置为全部零点或所有的,如 表 1 中指定。 注意 一个刷新符号,启动 32 位边界不到 13 位前需要到下一垫 32 位边界。 整个冲洗并垫,因此可以从 13 到 44 位。 第 17 页 第 18 页 第 19 页 免费印刷本可从网上订购: ECMA 的 杜街 114 罗纳 架 CH - 1204 年日内瓦 瑞士 传真: +41 22 849.60.01 电子邮箱:documentsecma.ch 标准文件本可以自由下载,从 E
40、CMA 的网站(www.ecma.ch)。 这个网站充分 ECMA 的信息,ECMA 的活动,ECMA 的标准和技术报告。 第 20 页 ECMA 的 杜街 114 罗纳 架 CH - 1204 日内瓦 瑞士 见封面内页副本取得进一步软或硬。 一个优化的混合 LZ77 游程编码数据压缩程序,又名 完善资源匮乏的压缩比减压 短路: Pucrunch 是一种混合 LZ77 和 RLE 的压缩机,使用长度为 LZ77 抵消混合伽玛守则和线性一埃利亚斯伽玛代码,RLE 的排名由同一伽玛字节码索引。 在减压不使用额外的内存。 程序 -源代码和可执行文件 简介 自从我开始写于 1989 年的 C64 型我
41、一直想编写一个压缩程序演示。 我有很多想法,但从来没有时间,催促或必要的知识或耐心创建一个。 回想起来,我的想法则大多是简单的假(“魔术函数理论”作为很好马克尼尔森所说的)。 但几年过去了,我终于收集到了更多的知识和不可抗拒的冲动终于实现我的梦想。关于延迟的好处是,我不需要写实际的压缩方案,对 C64 型运行了。 我可以写在便携式的 ANSI - C 程序代码,只是它创建压缩文件,将自己当在 C64 型运行。外运行的目标系统的压缩方案至少提供以下优点。 我可以使用便携式的 ANSI - C 代码。 压缩程序可以被编译成一个 Unix机器上运行,Amiga 系统,PC 等,我拥有所有的工具来调试
42、程序,并收集分析信息,看看它为什么这么慢:-) 该程序运行得更快比 C64 型。 如果它仍然缓慢,总有多重任务,让我做其他事,而我压缩的文件。 有足够的内存可用。 我可以使用所有的内存我可能需要和使用一切可能的伎俩,只要增加压缩比为减压仍然有可能和可行的 C64 型上。 大文件可以被压缩的文件一样容易缩短。 大多数 C64 型压缩机不能处理的文件比周围 52-54 千字节(210-220 磁盘块)放大。 交叉开发更容易,因为你没有转移到 C64 型压缩它只是一个文件。 现在可以使用同样的程序来处理 VIC20 和 C16 / 4 文件还。 它有没有可能在所有文件压缩 VIC20。 至少我不知道
43、任何其他 VIC20 压缩机左右。 内存刷新和压缩条款 统计压缩 采用源符号的概率分布不均,以缩短平均码长。 Huffman 编码和算术编码都属于这个组。 通过给一个简短的代码最经常出现的符号,数位需要加班,代表符号下降。 想想莫尔斯电码,例如:您需要更多的人物往往有较短的代码,它需要较少的时间来发送邮件。 字典压缩 替换重复陈述在较短的源字符串。 这可能是一个实际的指数字典(的Lempel - Ziv 78)或(的 Lempel - Ziv 77)前发生的指针。 只要花费较少的位来表示比字符串本身的引用,我们得到压缩。 LZ78 是喜欢的方式基本取代了很多关键字的标记:一个字节的标记打印扩大
44、到整个单词一样。 LZ77 代替重复使用字符串(长度,偏移)对,从而)字符串 VICIICI 可以作为编码维西(3,3 -多次出现的一个参考由 ICI 的是被替换的字符串。 运行长度编码 替换重复使用的符号单一发生和重复计数的符号。 例如编译器装配有一个。关键字或相当于零填补他们所有的源代码中的一个字节数为零,而无需名单。 可变长度代码 任何这样的代码的长度是已知的,但没有明确位值的变化对不同的代码。一个结束标记或长度的计数必须提供某种形式的代码,使一个前缀码(唯一可解码)。 对于 ASCII(或 Latin - 1)文字你知道你通过阅读从输入完整的字节的下一个字母。 一个可变长度的代码要求您
45、阅读部分的数据知道有多少位来读下。 通用代码 通用代码用于编码,而不需要知道最大价值的整数。 较小的整数值通常变短码。 不同的代码是最优普遍的价值观不同的分布。 通用代码包括埃利亚斯伽马和三角洲码,斐波纳契代码,Golomb 医师和水稻代码。 无损压缩 无损压缩算法能够准确地再现不同有损压缩,从而忽略细节并不重要,或由人体感觉系统感知的原始内容。 本文只谈论无损压缩。 我在 pucrunch 项目的目标是创建一个压缩解压缩系统中,将使用的(包括内存和处理能力),而且还有最好的压缩比最少的资源。 奖金将是一个不错的,如果它优于其他压缩程序都可用。 相反,这些善解人意的要求(最少的资源和良好的压缩
46、比)排除在国家的最先进的压缩算法,实际上只留下 RLE 和 LZ77 被认为最。 另一个目标是学习一些有关数据压缩,而且至少已经得到满足的目标。 我开始通过开发一个字节对齐的 LZ77 + RLE 的压缩/解压,然后添加一个霍夫曼后端到它。 哈夫曼树以 384 字节的代码解码成一树的内部表示需要 100 个字节。 我发现,虽然在我的 Huffman 编码得到 40 千字节的测试文件 8左右,降低后的增益会计额外的代码,哈夫曼树只有约 3。 然后,我开始了更详细的分析了 LZ77 偏移量和长度值和 RLE 的价值观,并认为我会得到通过使用可变长编码更好的压缩。 我用一个简单的可变长度代码和后端代
47、码抓伤,霍夫曼,因为它并没有增加压缩比了。 这个版本成为pucrunch。 Pucrunch 不使用字节对齐的数据,并且是位比对齐,因为这个字节版本慢,但速度远远超过了原来的版本与霍夫曼后端连接。 而 pucrunch 仍然非常好压缩明智的。 事实上,它确实非常好,在某些情况下甚至殴打拉木,邮编,和gzip。 但是让我们没有得到太多超越自我。 要获得改善的 LZ77 压缩比,我们只有一些选择离开。 我们可以改进的(未压缩字节)字面字节编码,我们可以减少我们需要编码,并缩短 RLE 和 LZ77 文字编码的字节数。 在这里提出的所有这些算法改进的地方都统称(一变化影响多个区)和一个一个解决。 1
48、. 通过使用可变长度代码,我们可以得到的甚至是 2 个字节的 LZ77 的比赛,而这反过来又减少了我们需要的字节数压缩编码文字。 大多数 LZ77 -变种需要 3 个字节的匹配得到任何压缩,因为它们使用这么多位来确定长度和偏移值,从而使代码的时间比原来的字节会已经采取了。 2. 通过使用新的文字标签制度,区分字节压缩和压缩数据,我们可以有效地减少需要作出这种区分(为文字编码的开销字节)的额外的比特数。 这对于文件不压缩小康社会的重要。 3. 通过使用除了游程可以缩短到 LZ77 为长期运行的字节序列的编码,并在同一时间设置一个方便的上限 LZ77 匹配的长度。 上限执行两个功能: o 我们只需
49、要在一定范围内进行编码整数 o 我们只需要搜索的字符串超过此限短(如果我们找到一个足够长的字符串,我们可以停在那里) 短字节运行压缩或者使用 RLE 或 LZ77,两者得到最好的结果。 4. 这样做统计上的游程编码压缩字节(更频繁的符号变短的表示)(在这种情况下符号排名),我们可以得到的甚至是 2 个字节的运行长度,从而减少了我们需要的字节数压缩编码文字。 5. 通过精心选择哪个字符串匹配和/或运行长度使用我们可以充分利用可变长码的优势。 这可能有利于压缩为两个短比赛,而不是一个长匹配和一堆字节的文字字符串,而且可以更好地压缩为文本字节,而不是两个较短长的匹配串匹配。 本文件由几部分组成,它们是: C64 型思考 -目标系统对有些词 转义代码 -一个新的文字标签系统字节 文件格式 -什么是基本单位输出 图搜索 -如何榨取了这种方法的字节 字符串匹配 -一个搜索演化如何加快 LZ77 一些结果对目标系统文件 结果在卡尔加里语料库测试套件 减压常规 - 6510 评论代码 程序 -源代码和一些可执行文件 航海日志 -我的进度报告和一些杂感 Commodore 64 的思考