当前位置:文档之家› 第5次课(基于字典编码和算术编码)

第5次课(基于字典编码和算术编码)


8 9
10 11 12 13
107 042
109 105 10B FFF
041 107
042 109 105
AA B
BB ABC ABCA
107 108
109 10A 10B
AA AAB
BB BBA ABCA
P1=p(x1) P2=P1+p(x2)…
Pn-1=Pn-2+p(xn-1) Pn=1
算术编码具体过程
(3)如果文件中再没字符,输出当前单词W的序号, 编码过程完备.如果文件中还有字符, 把当前单 词W作为前缀 ,再从被压缩文件中读入一个字符 CH,把CH作为尾字符,得到一个单词W1. (4)在字典中查找 ,如果字典中已经有W1,则更新 当前单词,将 W1看作当前单词W,返回第 (3)步 ;如 果字典中没有W1, 先将原单词W的序号输出, 再将 新单词 W1增加到字典中 ,然后把刚刚读入的字符 CH作为当前单词W,返回第(3)步.
记忆码字 041 042 043 100 044 100 102
解码输出 A B C AB D AB CA A
字典位置 100 101 102 103 104 105 106
新单词 AB BC CA ABD DA ABC CAA
算术编码的思想
假设某离散独立信源有n个消息:x1 ,…,xn, 且对应的概率分别为:p(x1), …,p(xn). 如果将这 些概率用线段的长度来表示 ,则概率大的消息对 应长的线段, 概率小的消息对应短的线段.再将 这些线段顺序连接起来 ,其总长度必然等于1.
(1)字典初始化: 将被压缩文件中所有使用到的 单字节字符放入字典中 .为了压缩任何类型的文 件,可以将字典前 256个位置分配给计算机文件 中出现的所有256 个可能的单个字符.
(2)动态数据初始化:初始化新单词存放位置 指针P, 将它指向字典的第一个空位置; 读入被 压缩文件的第一个字符 cha, 作为待处理单词 W. 单词的前缀为空, 即Q=4095, 尾字符就是cha, 码字N 也是cha.
LZW 解码算法的例子
(5)如果在字典有码字对应的单词 ,则采用递归 算法, 输出该单词的内容.并将该单词的第一个 字符作为尾字符, 将已经记忆的前一个码字作 为前缀 ,组成一个新的单词, 写入字典, 然后记 下当前码字, 返回第(3) 步; 否则先在字典生成 新的单词,再输出这个单词, 将新单词的码字记 忆下, 再返回第(3)步.
码字 长度 1 1
3 4 4 5 7 7


1 2
3 4 5 6 7 8
1 1
0 1 1 1 0 1
0.01 0.0111
0.0111 0.01111001 0.0111111111 0.100001001101 0.100001001101
0.11 0.1001
0.001001 0.00011011 0.0001010001 0.000011110011 0.00000011110011
从而码字为1000011
4
2017/1/11
算术编码的译码原理
设码字为C, 起点为P,宽度为 A,译码过程如下 :
(1)初始化: 区间起点P =0, 区间宽度A =1; (2)计算分割点Q 的位置 ; (4)进入分割点右边的区间, 若该区间宽度小于 码字最低位的值, 则译码结束;否则译码输出码 元“1”,然后将分割点作为新的区间起点,使用 迭代公式A=A(1-p)进行计算后返回第二步;
用线段长度表示如下:
X0 (p0=0.20) P0=0 X1 (p1=0.30) P1=0.2 X2 (p2=0.35) X3 (p3=0.15) P4=1
算术具体编码
[编码] 由条件p3=0.15 ,P3=0.85得: I Log 2 0.15 2.737 取L=3, 将消息X3的起点 P3=0.85用二进制表示为
2017/1/11
Lz算法基本原理
信息论基础
The Basis of Information Theory
基于字典编码概论
哈夫曼编码和游程编码得到的结果是变长 码,而基于字典的编码方法得到的结果是定长 码,特别适合计算机文件的压缩和保存。此类 压缩编码方法是两位以色列研究人员在1977 年 提出来的,由于他们的名字分别为Abraham Lempel 和Jakob Ziv,所以基于字典的压缩编 码方法简称为LZ 算法。
x1 0 x2 … xn
算术编码的基本原理
由于每个消息的起点位置等于前面各个消 息的概率累积,故将它定义为累积概率Pk. 反过来, 也可以由累积概率来计算某个消 息的概率:pk =Pk-Pk-1 , 即两个相邻起点之间的 距离等于这个线段的长度. 每个消息所对应的 线段从起点开始, 到下一个线段的起点为此, 但 不包含下一个线段的起点, 即消息 Xk的对应区 间为[Pk-1,Pk). 任意选择一个小数 ,它必然落在某个消息 对应的线段上这说明, 可以用一个具有大小概 念的小数来表示某个消息, 这就是算术编码的 基本出发点.
无 无 无 100 无 无 100 无 102 无 无
A B C
041 042 043
100 101 102
AB BC CA
13 14 15 16
AA B
107 042
108 109
AAB BB
ABCABDABCAAAABBBABACBCA
用LZW 算法,具体编码过程如下表 .
3 4 5 6 7 8 9 10 11
接着上面例1 编码后的解码, 在实际解码过 程中, 每次读入三个字节,分解为两个码字. 假设有一个压缩文件,其内容为: 041 042 043 100 102 041 107 042 109 105 10B FFF
2
2017/1/11

骤 0 1 2 3 4 5 6 7
读入码字 041 042 043 100 044 100 102 041
通常序号的长度为 12比特,即 0到4095, 而 “单词”的平均长度远大于 12比特,从而达到压 缩的效果.从而达到压缩目的.
LZW 编码算法
LZW压缩编码算法如下:
由于字典的容量有限, 不可能包罗万象. 故 在LZ压缩算法中, 字典的内容直接由被压缩的 文件生成.一边编码,一边将新发现的“单词” 增加到字典中.在解码的过程中, 同样是一边解 码,一边生成字典 .故LZ 编码算法在储存压缩文 件时不需要保存字典, 是一种自适应算法. 1984年,Terry Welch对 LZ算法进行改进 , 使得所以的单词有同样的结构,推出LZW压缩编 码算法 .
二元独立信源的算术编码过程
设码元0 的概率为p,则码元1 的概率为1 -p, 编码过程如下: (1)初始化: 区间的起点 P=0,区间的宽度A= 1;
Pk Ck Pk 1
即码字 Ck必定落在消息 Xk的区间内 ,这样Ck就可 以唯一代表消息Xk . 解码过程是一个比较判断过程,只要将码字C k 和一系列的累积概率Pk 进行比较, 就可以确定 消息Xk. 因为C3 =(0.111)B=0.875,(p0 +p1+p2 )=P3 , 译码为消息X 3.
0.1 0.1
0.100 0.1000 0.1000 0.10001 0.1000011 0.1000011
(5)根据最终区间宽度A,通过2-L≤A<2-(L-1)求得 码字长度L, 然后将区间起点 P截取小数点后的L 位,剩余部分如果不为零,则进位到小数点后的 第L位, 便得到最终编码结果 .
0.1000010111000011 0.0000001011011001
读入 字符 A B B B A B C A B C A 无
查找 对象 AA AAB BB BB BBA AB ABC ABCA AB ABC ABCA
查找 结果 107 无 无 109 无 100 105 无 ቤተ መጻሕፍቲ ባይዱ00 105 10B
编码输出
内容 码字
字典扩充
位置 新单词
AB BC CA AB ABD DA AB ABC CA CAA AA
读入 字符 A B C A B D A B C A A A
查找 对象
查找 结果
编码输出 内容 码字
字典扩充 位置 新单词 步骤 前缀 12 FFF 041 FFF FFF 042 FFF 041 100 FFF 041 100 105
当 前 单 词
尾字符 A A B B B A B C A B C A 码字 041 107 042 042 109 041 100 105 041 100 105 10B
主题 No5 :基于字典编码和算术编码
计算机文件是以字节为单位组成的,每个 字节的取值从0到 255(2 8=256). 把每个字节都 看成一个“字符”,我们再把连续的若干个 “字符”看成一个“单词”将全部“单词”组 合起来就成为“字典” . 只要知道某个“单词”在字典中的位置 (即 序号), 就可以知道这个“单词”的内容,“单词” 的序号和“单词”的内容存在一一对应的关系. 我们将计算机文件按“单词”进行分割,然后用 “单词”在字典中的序号取代“单词”的内容, 就可以得到全部由序号组成的编码结果.
1
2017/1/11
LZW 编码算法的例子
例1 设有一文件内容为
当 前 单 词 步骤 前缀 0 1 2 FFF FFF FFF FFF 041 FFF FFF 041 FFF 043 FFF A B C A B D A B C A A 041 042 043 041 100 044 041 100 043 102 041 尾字符 码字
P3 0.85D 0.11011001B
故C 3 =(0.111)B
P2=0.5
P3=0.85
3
2017/1/11
相关主题