跳转至

Chapter 6 : 不等长编码

约 586 个字 6 张图片 预计阅读时间 3 分钟

为什么需要不等长编码?

举一个例子:

假设一个无记忆信源 {a1,a2,a3},概率密度为{0.5,0.25,0.25}H(U)=1.5 bit

  • 如果用等长编码, 则 L 很大时才能达到最佳编码的效率
  • 如果用不等长编码,将 {a1,a2,a3} 分别编码成 {1,00,01},译码器在收到 1 时,译码成 a1,收到 00 时译码成 a2,01 时译码成 a3,比如:
  • 100011000011011,00,01,1,00,00,1,1,01=a1a2a3a1a2a2a1a1a3,平均码字长度为 n=k=1Kpknk=1.5 bit

DMS 的不等长编码

一个好的不等长编码应该满足以下条件:

  • 唯一可译性
  • 即时可译性

唯一可译性

  • 非奇异性:xixjC(xi)C(xj)
  • 码扩展:C(x1x2xn)=C(x1)C(x2)C(xn)

如果码的任意扩展都是非奇异的, 则称码是唯一可译的

Example

上面的码 A 和码 B 都不是唯一可译的,因为对于 A 来说如果收到 10,可以是 a4,也可以是 a3a2,也可以是 a3a1;对于 B 来说如果收到 11,可以是 a4 也可以是 a2a2

码 C 和码 D 是唯一可译的


Sardinas & Petterson 判据

判据:一个码是唯一可译码的充分必要条件是除 S0 外没有任何一个后缀分解集中包含码字

  • 如果 S1=ϕ 则该码是即时可译并且唯一可译的
  • 如果 Sn=ϕ,n1,则该码是唯一可译,且译码延时有限

Example

可以看到,上面的这个码的后缀分解集中包含码字,因此不是唯一可译的


异字头码

如果一个码中没有任何一个码字是其它码字的前缀, 则称该码是异字头码, 即 S1=ϕ

异字头码的树形表示:所有码字只出现在叶结点上


Kraft 不等式

存在长度为 n1,n2,,nK 的 D 元异字头码的充要条件为:k=1KDnk1

Proof

n1<n2<<nk,可将异字头码的所有码字放置在码树的叶节点上,每放置一个长为 nk 的码字,相当于砍掉其下生长的子树的共 DnKnk 个叶节点。为了保证放置过程可行,必须:

nk=1nKDnKnkDnKnk=1nKDnk1

可将所有码字依次放置在码树的叶节点上, 方法如下:

对长为 nk 的码字在第 nk 层任选一个可用的叶节点,砍掉其下生长的子树,相当于砍掉第 nK 叶节点的 1Dnk,如果 nk=1nKDnk1,则上述放置过程一直可以进行下去,即可以构成一个异字头码

  • 任意唯一可译码必然满足 Kraft 不等式,即唯一可译码 Kraft 不等式成立 存在一个同样长度的异字头码
Proof
(k=1KDnk)r=(k1=1KDnk1)(k2=1KDnk2)(kr=1KDnkr)=k1=1Kk2=1Kkr=1KDnk1nk2nkr=i=1rnmaxAiDi

由唯一可译性我们有 AiDi,那么:

k=1KDnk(i=1rnmax1)1r(rnmax)1r=21rlog2(rnmax)r1

不等长编码定理

任何一个唯一可译码的平均码字长度必须满足 nH(U)logD,同时一定存在一个 D 元唯一可译码, 其平均长度满足 nH(U)logD+1

Proof

(1)

H(U)nlogD=k=1K(pklogpk+pknklogD)=k=1KpklogDnkpkk=1Kpk(Dnkpk1)=k=1KDnk10

当且仅当 Dnk=pk 时,等式成立

(2)选择唯一的 nk,使得 DnkpkD(nk1)

对左边不等式两侧求和,得 k=1KDnkk=1Kpk=1

因此,存在长度为 nk 的异字头码

对右侧不等式取对数,并求期望值,得:

k=1Kpklogpk<k=1Kpk(nk1)logDH(U)>(n1)logD,n<H(U)logD+1

评论