2010全国计算机网络与通信学术会议 基于F i bonacc i编码的英文文本压缩算法 邹建成石志鑫 (北方工业大学信息工程学院,北京市,100144) 摘要:本文在Fibonacci数列的基础上引入了2阶Fibonacci编码,并成功的将其 应用到英文文本压缩。利用这种变长的Fibonacci编码可以用较少的位数来表示出 现频率高的字符,从而达到数据压缩的目的。实验表明,基于Fibonacci编码的英 文文本压缩算法具有较好的压缩率,并且,文本越长,字符出现频率越高,压缩率 也越高。 中图分类号: 文献标识码:A 文章编号: English Text Compression Algorithm Based on Fibonacci Codes ZOU Jian--cheng SHI Zhi-・xin (Institute ofImage Processing&Pattern Recognition ofNorth China University ofTechnology, Beijing 1 00144,China.ZOU Jian-cheng,zjc@ncut.edu.cn) Abstract:Based on representing the integers in a binary Fibonacci numeration system, we introduced Fibonacci Codes of order 2,and applied it in English text compression. The variable—length Fibonacci codes can represent the high frequency words with less bits,that means the text was compressed.The results indicated that,the English text compression algorithm based on Fibonacci codes have better compression rate.What’S more,the longer the text,the higher frequency the words,and the better compression rate. Key words:Fibonacci codes;Text compression 1引言 文本压缩是数据压缩的一个分支,属于无损压缩。它的目标是通过对数据施加某种操作 或变换使之长度变短的同时,还必须保证原始数据能够从压缩产生的压缩码中得以精确的 还原。在50年代初提出的以具有前缀性质的变长码为特征的Huffman编码是数据压缩领域 的一个重要里程碑,曾经统治数据压缩领域达30年之久,至今研究它的文章仍旧源源不 断。这种编码技术长期以来一直被许多工程技术人员视为最佳的编码方法。 本文基于Fibonacci对整数的编码体制,结合Huffman编码体系,研究了一种新的文本 压缩算法。论文简单的介绍了Fibonacci数列以及整数的Fibonacci表示,并且详细说明了 基于Fibonacci编码的文本压缩和解压的算法。最后,通过实验对本算法进行了分析和验证。 2 Fibonacci数列简介 2.1 Fibonacci数列 意大利数学家列昂纳多・斐波那契(Leonardo Fibonacci,1170—1240)1202年撰写《算 143 2010全国计算机网络与通信学术会议 经》(Liber Abaci)一书,以兔子繁殖为例子而引入了著名的Fibonacci数列,故Fibonacci 数列又称为“兔子数列”。 在数学上,Fibonacci数列是以递推关系来定义的,满足: {f F=0'O-= 【 = 一 + 一2 (n=2,3…) 的数列{ )为Fibonacci数列,其中任意一个数 称为Fibonacci数。法国数学家比内特 (Binet)证明了其通项公式可表示为: =去f Fibonacci数列是一个二阶线性递归数列。它是由0和1开始,之后的Fibonacci数就 由前的两数相加。首几个Fibonacci数是0,1,l,2,3,5,8,13,21,34,55,89,144…… 这个数列我们要注意的是:O不是数列的第一项,而是第零项。 Fibonacci数列有很多有用的性质。其中最奇妙的是苏格兰人Robert Simson证明了当 项数趋于无穷时,Fibonacci数列的后项与前项之比趋近黄金分割,也就是 1.61803398875…。这也许说明了Fibonacci数列与黄金分割有天然的联系。自然界中的 Fibonacci数列最典型的例子就是以Fibonacci螺旋方式排列的花序或树叶,如树叶沿枝条 排列的形状、向曰葵籽盘上相互交叉的奇特螺线、花瓣的数目等。每层树枝的数目也往往构 成Fibonacci数列。其他有关Fibonacci数列的性质可以参考文献[1]《斐波那契》一文中 给出的Fibonacci数列的几个性质。 2。2整数的Fibonacci表示 基于Fibonacci数,文献[2]中介绍了m阶Fibonacci数的表示方法: = + +…+ ,n=2,3… 其中: l= 2=…= ’=0, =Fo' =1。在这里,2阶Fibonacci数就是通常 我们所说的Fibonacci数列:1,2,3,5,8…。在文中还说明了任何一个非负的整数N能够被唯 一的表示成二进制形式 …dk一 dk,di∈{o,1}与之对应,即 k Ⅳ=∑ ,(di∈{o,1},o f 尼) i=0 当且仅当dfl2…da_ld 中不包含m个连续的1[3]。表1列出了一些整数N的Fibonacci表示: 144 2010全国计算机网络与通信学术会议 表1:整数N的Fibonacci表示 /,1- l 2 3 1 0 1 0 0 1 4 5 6 1 0 l 0 0 0 1 1 O 0 1 7 8 0 1 0 1 0 0 0 0 l 16 0 0 1 0 0 1 32 0 0 1 0 1 0 1 1 2 3 5 8 l3 21 在这个基础上,Apostolico and Fraenkel于1985年定义了一种Fibonacci编码方 案[4]。即,在整数的Fibonacci表示的基础上,每个整数多加一位1,这样,就构成了整 数的2阶Fibonacci编码,表一中的整数可以分别编码为如下: 表2:整数N的2阶Fibonacci编码 Ⅳ 1 2 3 l 0 0 1 1 0 l 1 1 4 5 6 1 0 1 0 0 O 0 1 0 1 O 0 0 0 1 1 1 1 0 l l 1 l 1 8 0 l6 32 0 0 0 0 1 1 0 0 0 1 1 0 l 1 1 }) l 2 3 5 8 13 21 34 2阶Fibonacci编码中每个数N的编码连续出现1的个数不超过2个。用同样的方法, 我们可以得到m阶Fibonacci编码,其中,每个数N的编码连续出现1的个数不超过Il1个。 显然通过这种方式构成的Fibonacci编码是一种变长编码,它便于字符的异步传输,并且能 提高字符传输的正确率。更重要的是,相对于二进制的整数编码方案,Fibonacci编码可以 用比较少的位来表示前面几个数,用更多的位来表示大于34的数,因为34的Fibonacci 编码为000000011,共9位。在用较少的Fibonacci编码位来表示前面几个数的这个性质, 我们尝试了把Fibonacci编码应用到文本压缩上; 3 F i bonacc i的文本压缩 Fibonacci编码可以用比较少的位来表示前面几个数,所以,Fibonacci编码可以应用 到文本压缩当中,这里我们已经成功的把Fibonacci应用于英文文本压缩的编码算法,下面 介绍压缩解压算法的主要过程。 3.1压缩算法 l、打开需要压缩的英文文本文件code.txt,统计文件中不同字符出现的个数,设为N: 2、对于每个字符4 0< <N,统计其在文件中出现的频率 f1,0< <N; 3、排序频率数组 使得 1]> 2】>…> Ⅳ】,对应的字符为41]> 2】>…>4Ⅳ】; 4、分别对排序后的字符序号 进行Fibonacci编码,即文本中每一个字符 145 2010全国计算机网络与通信学术会议 4f1=(f),,0<f<Ⅳ,其中(f),表示f的Fibonacci编码,这样构成了…个字符的 Fibonacci编码表F。根据Fibonacci编码的性质,频率越大的字符,编码后的位数越少, 压缩率越高;反之,频率越大的字符,编码后的位数就越多,压缩率越低; 5、首先写入字符的个数N,每个排序后的字符4 然后重新扫描整个文本,对于每个 字符,查找字符的Fibonacci编码表F,写入字符的Fibonacci编码,即形成压缩文件 decode.fib。 3.2解压缩算法 解码的过程与编码正好相反: 1、打开压缩文件decode.fib; 2、读取文件开始的字符个数N; 3、通过N,读取N个字符,利用其先后顺序建立字符频率索引表建立字符的Fibonacci 编码表F; 4、读取文件中的Fibonacci编码,并转化为整数表示,这个整数即为字符的频率序号; 5、利用频率序号的Fibonacci编码表F,解码出其所对应的字符; 6、循环4、5,直到文件读取结束,即可以解码出文件code.txt。 4实验分析 我们通过在Windows平台下,用re++6.0进行实验表明,Fibonacci应用于英文文本压 缩是完全可行的,下图1中的实验文本压缩了20%多,因为文件比较小,所以压缩率相对低, 如果文件越大,则字母出现的频率越高,压缩率就会越大,并且,这种压缩是完全的无损压 缩方法。图2中也表明了压缩的过程为无损压缩。在图3中我们截取了文本经过Fibonacci 编码后的部分O1码,也就是压缩后的编码内容。 l;曼旦 量 璺l l硼一 — 一~ 量l— 一~一~一——~—————一 一一__——一 l_一__二 __ — 二二__ ~ 二 一一一一 — :曼善 ・lu_一一一一 一一二 一 _- 一 童 l -一 Fib}lil(缩衍的文髂 行为:F:\Fibonacci code\FibTextEl1eo(Ie\Fibcode.Fib i缩阿文件犬小为:1693个7节 胍缩衍文件火小为:1346个 节 缩比为:0.795038 图1 Fibonacci编码应用于文本压缩 麟翻融嘲霭强戤圈疆蟹璺 荽鲞蛹墨啊—啊圈嘲嘲圈啊_嘲一■■疆iIl- this is the beqinninq oF the Fibonacci sequence,an inFinite strinq oF numbers : named aFter.but not invented bQ.the Itallan mathematician Fibonacci.it maQ seem 1ike a pIiece of mathenatical arcania.but the Fibonacci sequence is Found to appear。time and time again。among the structures of the natural world and even in: the Products OF human cUIture.fron the Parthenon to pine cones.from the petals 一 _ …一r1_-.一一l一… 一{一‘:一一一 -r●一…一. J- ●●j一.j L— f L-一-.- 一一一..…一 一一_一一 this is the beginning of the Fibonacct se口uence。an inFtnite string of numbers named aFter,but not inuented bQ,the italian mathe ̄tician Fibonacci.it maU seem like a piece of mathematica1 arcania。but the Fibonacci sequence is Found to appear。time and time again。amonq the structures oF the natural world and even in the products Of human culture.From the parthenon to pine cones。From the petals on a sunflower t0 the paintinqs of leonardo da uinci。the Fibonacci sequence seems 图2 Fjbonacci的无损文本压缩 146 2010全国计算机网络与通信学术会议 0011 00B1 011日1 00111 01 01111 61 00011 601 00111 O00 111日1161000011100000110Ⅱ10111000011000411日B 111 01 0011 001 000"11 O00011 01 011 011 0000011 00000 011 61 01 0111 61 000111 001 041 0004 00111 001 0011 01 01 0011 00001 011 6111 000111 011 61 0111 001 00111 01 1 01 B111 004 0011 0111 00011111 001 0011 0061 01111 0 01 00111 011 00011 000111 611 60041 004 00111 001 004 11 0011 61 000111 001 0011 B111 00011111 001 0011口1口 00411口11口0们01110041口口叭1B011日1001161001110 1110010011盯01111目口1日nD110目08重rt11100011010日 1111B101004110040011日n1160n111 004001110110n 011口1000111日1190011104101111100100410101104 16000411011000110040011100100111001101B0q11 1 001 0n11 00911 00060111日0日n11 0004 4111 0000041 0 1 0111 001 0041 00011 00411 000011111 01 0111 001 004 1 001101000110111100001101010041100100110001 口110000011口11100100110004110041041100100411 011 00011 0006001111 00011 011111 n1 0111 001 0041 0 0016111004日11日1n10n1110010011011100n111110日 10n11n1110a0111001001101001111 000416110O00O 11 0000111 001 0111 001 00111 011 611 0011 001 0111 01 1 0011 000111 004 00111 000011 0011 0111 00011111 0n 图3编码后的部分Fibonacci编码数据 5结论 Fibonacci编码是一种变长编码,它便于字符的异步传输,并且能提高字符传输的正确 率。更重要的是,本算法提出的基于Fibonacci编码的英文文本压缩,是一种完全无损的压 缩方式,有比较好的压缩率。但是,本算法还只是应用于英文文本的压缩上,以后的工作是 进一步提高压缩率并提出基于Fibonacci编码的中文文本压缩算法。 参考文献(References [1]吴文俊.世界著名数学家传记(上集)[M].北京:科学出版社,1997:298-306. [2]A.S.Fraenke1.“Svstems ofnumeration.”Amer.Math.Monthiv.vo1.92,PP.105.1 14,1985. E33 E.Zeckendorf,Reprsentation des nombres naturels par une somme des nombres de Fibonacci ou de nombres de Lucas.Bul1.Soc.Roy.Sci.Lige41,179—182,1972. 14J A.Apostolico and A.Fraenke1.Robust transmission of unbounded strings using Fibonacci representations. IEEE Trans.on Information Theory 33,238.245,1 987. 作者简介: 邹建成男(1966年生),教授,主要研究方向:数字图象信息安全理论中的信息隐藏和数字水印、计算机 图形学、微分拓扑学中的奇点理论、分歧理论等。 石志鑫男(1986年生),硕上研究生,研究方向:信息安全。 147