信息论 第5章(基于字典编码和算术编码)
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
P = (0.85)D = (0.11011001)B 3
故C3=(0.111)B C
算术具体译码
[译码]可以推出
P ≤ Ck < P +1 k k
即码字Ck必定落在消息Xk的区间内,这样Ck就可 以唯一代表消息Xk. 解码过程是一个比较判断过程,只要将码字Ck 和一系列的累积概率Pk进行比较,就可以确定 消息Xk. 因为C3=(0.111)B=0.875,(p0+p1+p2)=P3 , 译码为消息X3.
LZW编码算法的例子 LZW编码算法的例子
例1 设有一文件内容为 ABCABDABCAAAABBBABACBCA 用LZW算法,具体编码过程如下表.
步骤 0 1 2 3 4 5 6 7 8 9 10 11
当 前 单 词 前缀 尾字符 码字
读入 字符 A
查找 对象
源自文库
查找 结果
编码输出 内容 码字
字典扩充 位置 新单词
查找 对象 AA AAB BB BB BBA AB ABC ABCA AB ABC ABCA
查找 结果 107 无 无 109 无 100 105 无 100 105 10B
编码输出 内容 码字
字典扩充 位置 新单词
AA B
107 042
108 109
AAB BB
BB
109
10A
BBA
ABC
105
10B
p A = A
完成迭代计算后返回第二步; (4)读入的码元为1,则区间的起点右移Ap,区间 的宽度缩短为A(1-p),用公式 P = P + Ap 完成迭代计算后返回第二步;
A = A(1− p)
(5)根据最终区间宽度A,通过2-L≤A<2-(L-1)求得 码字长度L,然后将区间起点P截取小数点后的L 位,剩余部分如果不为零,则进位到小数点后的 第L位,便得到最终编码结果.
算术编码的例子
若二元独立信源中“0”的概率为0.25(二进 制0.01),“1”的概率为0.75(二进制0.11),对消 息 11011101 进行算术编码.
算术编码的过程
算术编码过程如下:
顺序 码元 0 1 2 3 4 5 6 7 8 1 1 0 1 1 1 0 1 区间起点P 区间起点P 0.0 0.01 0.0111 0.0111 0.01111001 0.0111111111 0.100001001101 0.100001001101 区间宽度A 区间宽度A 1.0 0.11 0.1001 0.001001 0.00011011 0.0001010001 0.000011110011 0.00000011110011 1 1 3 4 4 5 7 7 0.1 0.1 0.100 0.1000 0.1000 0.10001 0.1000011 0.1000011 码字 长度 码 字
LZW编码算法 LZW编码算法
LZW压缩编码算法如下: (1)字典初始化:将被压缩文件中所有使用到的 单字节字符放入字典中.为了压缩任何类型的文 件,可以将字典前256个位置分配给计算机文件 中出现的所有256个可能的单个字符. (2)动态数据初始化:初始化新单词存放位置 指针P,将它指向字典的第一个空位置;读入被 压缩文件的第一个字符cha,作为待处理单词W. 单词的前缀为空,即Q=4095,尾字符就是cha, 码字N也是cha.
通常序号的长度为12比特,即0到4095,而 “单词”的平均长度远大于12比特,从而达到压 缩的效果.从而达到压缩目的. 由于字典的容量有限,不可能包罗万象.故 在LZ压缩算法中,字典的内容直接由被压缩的 文件生成.一边编码,一边将新发现的“单词” 增加到字典中.在解码的过程中,同样是一边解 码,一边生成字典.故LZ编码算法在储存压缩文 件时不需要保存字典,是一种自适应算法. 1984年,Terry Welch对LZ算法进行改进, 使得所以的单词有同样的结构,推出LZW压缩编 码算法.
ABCA
ABCA
10B
LZW解码算法 LZW解码算法
(1)字典初始化:将字典的前256给位置分配给 256个单字节字符. (2)动态数据初始化:初始化新单词存放位置指 针P,将它指向字典的第一个空位置;读入压缩 文件的第一个码字,由于第一个码字必定是一 个单字符,可以从初始字典中查表得到,译码输 出,并记忆它的码字N. (3)如果压缩文件没有码字,则解码结束,否则 继续. (4)如果读入的码字是无效码字(FFF),则解码 结束,否则继续.
X0 (p0=0.20) P0=0 X1 (p1=0.30) P1=0.2 X2 (p2=0.35) X3 (p3=0.15) P4=1
P2=0.5
P3=0.85
算术具体编码
[编码]由条件p3=0.15,P3=0.85得: I = −Log2 (0.15) = 2.737 取L=3,将消息X3的起点P3=0.85用二进制表示为
(3)如果文件中再没字符,输出当前单词W的序号, 编码过程完备.如果文件中还有字符,把当前单 词W作为前缀,再从被压缩文件中读入一个字符 CH,把CH作为尾字符,得到一个单词W1. (4)在字典中查找,如果字典中已经有W1,则更新 当前单词,将W1看作当前单词W,返回第(3)步;如 果字典中没有W1,先将原单词W的序号输出,再将 新单词W1增加到字典中,然后把刚刚读入的字符 CH作为当前单词W,返回第(3)步.
信息论基础
The Basis of Information Theory
主题No5: 主题No5:基于字典编码和算术编码 No5
基于字典编码概论
哈夫曼编码和游程编码得到的结果是变长 码,而基于字典的编码方法得到的结果是定长 码,特别适合计算机文件的压缩和保存。此类 压缩编码方法是两位以色列研究人员在1977年 提出来的,由于他们的名字分别为Abraham Lempel和Jakob Ziv,所以基于字典的压缩编 码方法简称为LZ算法。
接着上面例1编码后的解码,在实际解码过 程中,每次读入三个字节,分解为两个码字. 假设有一个压缩文件,其内容为: 041 042 043 100 102 041 107 042 109 105 10B FFF
步
骤 0 1 2 3 4 5 6 7 8 9 10 11 12 13
读入码字 041 042 043 100 044 100 102 041 107 042 109 105 10B FFF
算术编码具体过程
设消息Xk的概率为pk,其对应区间为[Pk-1,Pk) 计算Xk的信息量I(Xk),取 I(Xk)≤L<I(Xk)+1 的整数L,再将Xk的起点Pk用二进制小数表示保 留小数点后L位,将后面的余数进位到小数点后 第L位,得到的小数C就是消息Xk的算术编码结果.
算术编码的例子
[例1]某个信源有四个消息X0,X1,X2,X3,其概率 分别为: p0=0.20,p1=0.30,p2=0.35,p3=0.15 用线段长度表示如下:
记忆码字 041 042 043 100 044 100 102 041 107 042 109 105
解码输出 A B C AB D AB CA A AA B BB ABC ABCA
字典位置 100 101 102 103 104 105 106 107 108 109 10A 10B
新单词 AB BC CA ABD DA ABC CAA AA AAB BB BBA ABCA
二元独立信源的算术编码原理
二元独立信源输出的消息是由0和1组成的 码流,其长度从1开始,逐步增加,直到全部 码元输出为止。 算术编码的过程和信源输出码元的过程同 步进行,一边读取码元,一边进行迭代计算。 迭代计算的内容为P(累积概率)和A(概率) 两个量,P就是当前消息区间的起点,A就是当 前消息区间的宽度。
算术编码的思想
假设某离散独立信源有n个消息:x1,…,xn, 且对应的概率分别为:p(x1),…,p(xn).如果将这 些概率用线段的长度来表示,则概率大的消息对 应长的线段,概率小的消息对应短的线段.再将 这些线段顺序连接起来,其总长度必然等于1.
x1 0 x2 … xn Pn-1=Pn-2+p(xn-1) Pn=1
0.1000010111000011 0.0000001011011001
从而码字为1000011
算术编码的译码原理
设码字为C,起点为P,宽度为A,译码过程如下: (1)初始化:区间起点P=0,区间宽度A=1; (2)计算分割点Q的位置; (3)判断码字与分割点的关系: 若C-Q≥0,表示码字落在分割点的右边,进入第 四步; 若C-Q<0,表示码字落在分割点的左边,进入第 五步;
(4)进入分割点右边的区间,若该区间宽度小于 码字最低位的值,则译码结束;否则译码输出码 元“1”,然后将分割点作为新的区间起点,使用 迭代公式A=A(1-p)进行计算后返回第二步; (5)进入分割点左边的区间,若该区间宽度小于 码字最低位的值,则译码结束;否则译码输出码 元“0”,然后维持区间起点不变,使用迭代公式 A=Ap进行计算后返回第二步.
(5)如果在字典有码字对应的单词,则采用递归 算法,输出该单词的内容.并将该单词的第一个 字符作为尾字符,将已经记忆的前一个码字作 为前缀,组成一个新的单词,写入字典,然后记 下当前码字,返回第(3)步;否则先在字典生成 新的单词,再输出这个单词,将新单词的码字记 忆下,再返回第(3)步.
LZW解码算法的例子 LZW解码算法的例子
当 前 单 词 前缀 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
读入 字符 A B B B A B C A B C A 无
P1=p(x1) P2=P1+p(x2)…
算术编码的基本原理
由于每个消息的起点位置等于前面各个消 息的概率累积,故将它定义为累积概率Pk. 反过来,也可以由累积概率来计算某个消 息的概率:pk=Pk-Pk-1 ,即两个相邻起点之间的 距离等于这个线段的长度.每个消息所对应的 线段从起点开始,到下一个线段的起点为此,但 不包含下一个线段的起点,即消息Xk的对应区 间为[Pk-1,Pk). 任意选择一个小数,它必然落在某个消息 对应的线段上这说明,可以用一个具有大小概 念的小数来表示某个消息,这就是算术编码的 基本出发点.
Lz算法基本原理 Lz算法基本原理
计算机文件是以字节为单位组成的,每个 字节的取值从0到255(28=256).把每个字节都 看成一个“字符”,我们再把连续的若干个 “字符”看成一个“单词”将全部“单词”组 合起来就成为“字典”. 只要知道某个“单词”在字典中的位置(即 序号),就可以知道这个“单词”的内容,“单词” 的序号和“单词”的内容存在一一对应的关系. 我们将计算机文件按“单词”进行分割,然后用 “单词”在字典中的序号取代“单词”的内容, 就可以得到全部由序号组成的编码结果.
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
B C A B D A B C A A A
AB BC CA AB ABD DA AB ABC CA CAA AA
二元独立信源的算术编码过程
设码元0的概率为p,则码元1的概率为1-p, 编码过程如下: (1)初始化:区间的起点P=0,区间的宽度A=1; (2)如果信源输出的码元已经全部处理,转到第 五步.否则从信源读入一个码元,如果读入的码 元为“0”,则转到第三步,如果读入的码元为 “1”,则转到第四步;
(3)读入的码元为0,则区间的起点P不变,区间 的宽度缩短为Ap.用公式 P = P
无 无 无 100 无 无 100 无 102 无 无
A B C
041 042 043
100 101 102
AB BC CA
AB D
100 044
103 104
ABD DA
AB
100
105
ABC
CA A
102 041
106 107
CAA AA
步骤 12 13 14 15 16 17 18 19 20 21 22 23
故C3=(0.111)B C
算术具体译码
[译码]可以推出
P ≤ Ck < P +1 k k
即码字Ck必定落在消息Xk的区间内,这样Ck就可 以唯一代表消息Xk. 解码过程是一个比较判断过程,只要将码字Ck 和一系列的累积概率Pk进行比较,就可以确定 消息Xk. 因为C3=(0.111)B=0.875,(p0+p1+p2)=P3 , 译码为消息X3.
LZW编码算法的例子 LZW编码算法的例子
例1 设有一文件内容为 ABCABDABCAAAABBBABACBCA 用LZW算法,具体编码过程如下表.
步骤 0 1 2 3 4 5 6 7 8 9 10 11
当 前 单 词 前缀 尾字符 码字
读入 字符 A
查找 对象
源自文库
查找 结果
编码输出 内容 码字
字典扩充 位置 新单词
查找 对象 AA AAB BB BB BBA AB ABC ABCA AB ABC ABCA
查找 结果 107 无 无 109 无 100 105 无 100 105 10B
编码输出 内容 码字
字典扩充 位置 新单词
AA B
107 042
108 109
AAB BB
BB
109
10A
BBA
ABC
105
10B
p A = A
完成迭代计算后返回第二步; (4)读入的码元为1,则区间的起点右移Ap,区间 的宽度缩短为A(1-p),用公式 P = P + Ap 完成迭代计算后返回第二步;
A = A(1− p)
(5)根据最终区间宽度A,通过2-L≤A<2-(L-1)求得 码字长度L,然后将区间起点P截取小数点后的L 位,剩余部分如果不为零,则进位到小数点后的 第L位,便得到最终编码结果.
算术编码的例子
若二元独立信源中“0”的概率为0.25(二进 制0.01),“1”的概率为0.75(二进制0.11),对消 息 11011101 进行算术编码.
算术编码的过程
算术编码过程如下:
顺序 码元 0 1 2 3 4 5 6 7 8 1 1 0 1 1 1 0 1 区间起点P 区间起点P 0.0 0.01 0.0111 0.0111 0.01111001 0.0111111111 0.100001001101 0.100001001101 区间宽度A 区间宽度A 1.0 0.11 0.1001 0.001001 0.00011011 0.0001010001 0.000011110011 0.00000011110011 1 1 3 4 4 5 7 7 0.1 0.1 0.100 0.1000 0.1000 0.10001 0.1000011 0.1000011 码字 长度 码 字
LZW编码算法 LZW编码算法
LZW压缩编码算法如下: (1)字典初始化:将被压缩文件中所有使用到的 单字节字符放入字典中.为了压缩任何类型的文 件,可以将字典前256个位置分配给计算机文件 中出现的所有256个可能的单个字符. (2)动态数据初始化:初始化新单词存放位置 指针P,将它指向字典的第一个空位置;读入被 压缩文件的第一个字符cha,作为待处理单词W. 单词的前缀为空,即Q=4095,尾字符就是cha, 码字N也是cha.
通常序号的长度为12比特,即0到4095,而 “单词”的平均长度远大于12比特,从而达到压 缩的效果.从而达到压缩目的. 由于字典的容量有限,不可能包罗万象.故 在LZ压缩算法中,字典的内容直接由被压缩的 文件生成.一边编码,一边将新发现的“单词” 增加到字典中.在解码的过程中,同样是一边解 码,一边生成字典.故LZ编码算法在储存压缩文 件时不需要保存字典,是一种自适应算法. 1984年,Terry Welch对LZ算法进行改进, 使得所以的单词有同样的结构,推出LZW压缩编 码算法.
ABCA
ABCA
10B
LZW解码算法 LZW解码算法
(1)字典初始化:将字典的前256给位置分配给 256个单字节字符. (2)动态数据初始化:初始化新单词存放位置指 针P,将它指向字典的第一个空位置;读入压缩 文件的第一个码字,由于第一个码字必定是一 个单字符,可以从初始字典中查表得到,译码输 出,并记忆它的码字N. (3)如果压缩文件没有码字,则解码结束,否则 继续. (4)如果读入的码字是无效码字(FFF),则解码 结束,否则继续.
X0 (p0=0.20) P0=0 X1 (p1=0.30) P1=0.2 X2 (p2=0.35) X3 (p3=0.15) P4=1
P2=0.5
P3=0.85
算术具体编码
[编码]由条件p3=0.15,P3=0.85得: I = −Log2 (0.15) = 2.737 取L=3,将消息X3的起点P3=0.85用二进制表示为
(3)如果文件中再没字符,输出当前单词W的序号, 编码过程完备.如果文件中还有字符,把当前单 词W作为前缀,再从被压缩文件中读入一个字符 CH,把CH作为尾字符,得到一个单词W1. (4)在字典中查找,如果字典中已经有W1,则更新 当前单词,将W1看作当前单词W,返回第(3)步;如 果字典中没有W1,先将原单词W的序号输出,再将 新单词W1增加到字典中,然后把刚刚读入的字符 CH作为当前单词W,返回第(3)步.
信息论基础
The Basis of Information Theory
主题No5: 主题No5:基于字典编码和算术编码 No5
基于字典编码概论
哈夫曼编码和游程编码得到的结果是变长 码,而基于字典的编码方法得到的结果是定长 码,特别适合计算机文件的压缩和保存。此类 压缩编码方法是两位以色列研究人员在1977年 提出来的,由于他们的名字分别为Abraham Lempel和Jakob Ziv,所以基于字典的压缩编 码方法简称为LZ算法。
接着上面例1编码后的解码,在实际解码过 程中,每次读入三个字节,分解为两个码字. 假设有一个压缩文件,其内容为: 041 042 043 100 102 041 107 042 109 105 10B FFF
步
骤 0 1 2 3 4 5 6 7 8 9 10 11 12 13
读入码字 041 042 043 100 044 100 102 041 107 042 109 105 10B FFF
算术编码具体过程
设消息Xk的概率为pk,其对应区间为[Pk-1,Pk) 计算Xk的信息量I(Xk),取 I(Xk)≤L<I(Xk)+1 的整数L,再将Xk的起点Pk用二进制小数表示保 留小数点后L位,将后面的余数进位到小数点后 第L位,得到的小数C就是消息Xk的算术编码结果.
算术编码的例子
[例1]某个信源有四个消息X0,X1,X2,X3,其概率 分别为: p0=0.20,p1=0.30,p2=0.35,p3=0.15 用线段长度表示如下:
记忆码字 041 042 043 100 044 100 102 041 107 042 109 105
解码输出 A B C AB D AB CA A AA B BB ABC ABCA
字典位置 100 101 102 103 104 105 106 107 108 109 10A 10B
新单词 AB BC CA ABD DA ABC CAA AA AAB BB BBA ABCA
二元独立信源的算术编码原理
二元独立信源输出的消息是由0和1组成的 码流,其长度从1开始,逐步增加,直到全部 码元输出为止。 算术编码的过程和信源输出码元的过程同 步进行,一边读取码元,一边进行迭代计算。 迭代计算的内容为P(累积概率)和A(概率) 两个量,P就是当前消息区间的起点,A就是当 前消息区间的宽度。
算术编码的思想
假设某离散独立信源有n个消息:x1,…,xn, 且对应的概率分别为:p(x1),…,p(xn).如果将这 些概率用线段的长度来表示,则概率大的消息对 应长的线段,概率小的消息对应短的线段.再将 这些线段顺序连接起来,其总长度必然等于1.
x1 0 x2 … xn Pn-1=Pn-2+p(xn-1) Pn=1
0.1000010111000011 0.0000001011011001
从而码字为1000011
算术编码的译码原理
设码字为C,起点为P,宽度为A,译码过程如下: (1)初始化:区间起点P=0,区间宽度A=1; (2)计算分割点Q的位置; (3)判断码字与分割点的关系: 若C-Q≥0,表示码字落在分割点的右边,进入第 四步; 若C-Q<0,表示码字落在分割点的左边,进入第 五步;
(4)进入分割点右边的区间,若该区间宽度小于 码字最低位的值,则译码结束;否则译码输出码 元“1”,然后将分割点作为新的区间起点,使用 迭代公式A=A(1-p)进行计算后返回第二步; (5)进入分割点左边的区间,若该区间宽度小于 码字最低位的值,则译码结束;否则译码输出码 元“0”,然后维持区间起点不变,使用迭代公式 A=Ap进行计算后返回第二步.
(5)如果在字典有码字对应的单词,则采用递归 算法,输出该单词的内容.并将该单词的第一个 字符作为尾字符,将已经记忆的前一个码字作 为前缀,组成一个新的单词,写入字典,然后记 下当前码字,返回第(3)步;否则先在字典生成 新的单词,再输出这个单词,将新单词的码字记 忆下,再返回第(3)步.
LZW解码算法的例子 LZW解码算法的例子
当 前 单 词 前缀 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
读入 字符 A B B B A B C A B C A 无
P1=p(x1) P2=P1+p(x2)…
算术编码的基本原理
由于每个消息的起点位置等于前面各个消 息的概率累积,故将它定义为累积概率Pk. 反过来,也可以由累积概率来计算某个消 息的概率:pk=Pk-Pk-1 ,即两个相邻起点之间的 距离等于这个线段的长度.每个消息所对应的 线段从起点开始,到下一个线段的起点为此,但 不包含下一个线段的起点,即消息Xk的对应区 间为[Pk-1,Pk). 任意选择一个小数,它必然落在某个消息 对应的线段上这说明,可以用一个具有大小概 念的小数来表示某个消息,这就是算术编码的 基本出发点.
Lz算法基本原理 Lz算法基本原理
计算机文件是以字节为单位组成的,每个 字节的取值从0到255(28=256).把每个字节都 看成一个“字符”,我们再把连续的若干个 “字符”看成一个“单词”将全部“单词”组 合起来就成为“字典”. 只要知道某个“单词”在字典中的位置(即 序号),就可以知道这个“单词”的内容,“单词” 的序号和“单词”的内容存在一一对应的关系. 我们将计算机文件按“单词”进行分割,然后用 “单词”在字典中的序号取代“单词”的内容, 就可以得到全部由序号组成的编码结果.
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
B C A B D A B C A A A
AB BC CA AB ABD DA AB ABC CA CAA AA
二元独立信源的算术编码过程
设码元0的概率为p,则码元1的概率为1-p, 编码过程如下: (1)初始化:区间的起点P=0,区间的宽度A=1; (2)如果信源输出的码元已经全部处理,转到第 五步.否则从信源读入一个码元,如果读入的码 元为“0”,则转到第三步,如果读入的码元为 “1”,则转到第四步;
(3)读入的码元为0,则区间的起点P不变,区间 的宽度缩短为Ap.用公式 P = P
无 无 无 100 无 无 100 无 102 无 无
A B C
041 042 043
100 101 102
AB BC CA
AB D
100 044
103 104
ABD DA
AB
100
105
ABC
CA A
102 041
106 107
CAA AA
步骤 12 13 14 15 16 17 18 19 20 21 22 23