信源编码1:零误差数据压缩

本文详细介绍了信源编码的基本概念,包括唯一可解信源编码的Kraft不等式,以及平均长度下界。重点探讨了Huffman编码的构造、最优性质及其平均长度上界。此外,还讨论了Shannon-Fano-Elias码的平均长度与冗余度,并定义了内部节点的冗余度。通过对内部节点冗余度的分析,展示了prefix码的总冗余度与内部节点冗余度的关系。
摘要由CSDN通过智能技术生成

1. 基本性质

1.1 考虑一个 D D D-ary的信源编码,它是由一个随机变量 X X X通过某种映射得到的集合 D ∗ D^{*} D,集合 D ∗ D^{*} D中包含的元素是码字,每个码字的符号是 D D D进制的。

例如,考虑一个 2 2 2-ary的信源编码,其对应的随机变量 X X X的字母表为 χ = { A , B , C , D } \chi=\{A,B,C,D\} χ={A,B,C,D}(先不关心每个字母对应的概率 p i ( x ) p_i(x) pi(x))。随机变量到码字的映射关系如下:
A → 0 B → 1 C → 01 D → 10. \begin{aligned} &A\rightarrow 0\\ &B\rightarrow 1\\ &C\rightarrow 01\\ &D\rightarrow 10. \end{aligned} A0B1C01D10.显然,这个信源编码的码字码长为 l 1 , l 2 , l 3 , l 4 = 1 , 1 , 2 , 2 l_1,l_2,l_3,l_4=1,1,2,2 l1,l2,l3,l4=1,1,2,2。码字的每个符号是2进制的比特。
■ \blacksquare

1.2. 唯一可解信源编码。
考虑**1.**中的编码,会发现当接收到某些码字组合时,无法译出原随机变量 X X X的值。比如接收端接收到码字组合010时,可能是 A B A ABA ABA,也可能是 A D AD AD。像这种存在无法唯一译码 X X X的情况的信源编码称为非唯一译码信源编码。反之,唯一译码(uniquely decodable)信源编码不存在上述情况。

例如,考虑一个 2 2 2-ary的信源编码,其对应的随机变量 X X X的字母表为 χ = { A , B , C , D } \chi=\{A,B,C,D\} χ={A,B,C,D}(先不关心每个字母对应的概率 p i ( x ) p_i(x) pi(x))。随机变量到码字的映射关系如下:
A → 00 B → 01 C → 10 D → 11. \begin{aligned} &A\rightarrow 00\\ &B\rightarrow 01\\ &C\rightarrow 10\\ &D\rightarrow 11. \end{aligned} A00B01C10D11.显然,这个信源编码的码字码长为 l 1 , l 2 , l 3 , l 4 = 2 , 2 , 2 , 2 l_1,l_2,l_3,l_4=2,2,2,2 l1,l2,l3,l4=2,2,2,2。码字的每个符号是2进制的比特。它是一个唯一可译码的信源编码。
■ \blacksquare

1.3. Kraft不等式:
对于一个 D D D-ary的唯一可解信源,其码字长度为 l i l_i li,则Kraft不等式为
∑ i D − l i ≤ 1. \sum_{i}D^{-l_i}\leq 1. iDli1.
证明
考虑一个正整数 N N N,于是
( ∑ i D − l i ) N = ( D − l 1 + D − l 1 + ⋯   ) N (\sum_{i}D^{-l_i})^N=(D^{-l_1}+D^{-l_1}+\cdots)^N (iDli)N=(Dl1+Dl1+)N利用乘法分配律将括号展开,可以得到
( ∑ i D − l i ) N = ∑ i = 1 N l m a x A i D − i . (\sum_{i}D^{-l_i})^N=\sum^{Nl_{max}}_{i=1}A_iD^{-i}. (iDli)N=i=1NlmaxAiDi.其中 l m a x = m a x { l i } l_{max}=max\{l_i\} lmax=max{li} A i A_i Ai是展开括号后 D − i D^{-i} Di的系数。

注意这里虽然求和项从 i = 1 i=1 i=1考虑到 N l m a x Nl_{max} Nlmax,但实际上有的值不一定能取到。例如对所有的 i i i都有 l i = 2 l_i=2 li=2的话,显然无法取到 D − 1 D^{-1} D1

再来看看展开括号这一步。对于某个特定的 D − i 0 D^{-i_0} Di0,需要从 N N N ∑ i D − l i \sum_{i}D^{-l_i} iDli中分别挑选一个因式,使得挑选出来的 N N N个因式的乘积等于 D − i 0 D^{-i_0} Di0。显然挑选方式很多,而 A i 0 A_{i_0} Ai0则等于所有挑选方法的总和。

从另一个角度看,上面展开括号的过程,类似于组成一个包含 N N N个码字的且长度为 i 0 i_0 i0码字序列。对于这个长度为 N N N个码字的码字序列,我们每次挑选一个码字,一共挑选 N N N次。这个长度为 N N N个码字的码字序列的组成方法有很多种,其总数等于 A i 0 A_{i_0} Ai0。此外,这 A i 0 A_{i_0} Ai0个码字序列都是不同的,这是因为这个信源是唯一可解的(假如有相同的就不是唯一可解了)。

另一个方面,如果我们一个符号一个符号地构造一个长度为 i 0 i_0 i0的码字,可以构造出 D i 0 D^{i_0} Di0个不同的码字。所以,我们有 A i 0 ≤ D i 0 A_{i_0}\leq D^{i_0} Ai0Di0。所以前面的式子满足
( ∑ i D − l i ) N = ∑ i = 1 N l m a x A i D − i ≤ N l m a x . (\sum_{i}D^{-l_i})^N=\sum^{Nl_{max}}_{i=1}A_iD^{-i}\leq Nl_{max}. (iDli)N=i=1NlmaxAiDiNlmax.
∑ i D l i ≤ ( N l m a x ) 1 / N \sum_{i}D^{l_i}\leq (Nl_{max})^{1/N} iDli(Nlmax)1/N

我们取一个无穷大的 N N N,于是
lim ⁡ N → ∞ ≤ ( N l m a x ) 1 / N = 1. \lim \limits_{N\rightarrow\infty} \leq (Nl_{max})^{1/N}=1. Nlim(Nlmax)1/N=1.进一步有
∑ i D l i ≤ 1. \sum_{i}D^{l_i}\leq 1. iDli1.
■ \blacksquare

1.4. Kraft不等式取等号的一个例子。
考虑一个唯一可解信源编码,其所有码字等长,均为 l l l。并且随机变量 X X X也是均匀分布的,其字母表大小为 ∣ χ ∣ = D l |\chi|=D^l χ=Dl。显然有 ∑ i D l i = D l D − l = 1 \sum_{i}D^{l_i}=D^{l}D^{-l}=1 iDli=DlDl=1

例如考虑 χ = { A , B , C , D } \chi=\{A,B,C,D\} χ={A,B,C,D} p ( X = A ) = p ( X = B ) = p X = c ) = p ( X = D ) = 1 / 4 p(X=A)=p(X=B)=pX=c)=p(X=D)=1/4 p(X=A)=p(X=B)=pX=c)=p(X=D)=1/4。随机变量到码字的映射为
A → 00 B → 01 C → 10 D → 11. \begin{aligned} &A\rightarrow 00\\ &B\rightarrow 01\\ &C\rightarrow 10\\ &D\rightarrow 11. \end{aligned} A00B01C10D11.显然, D = 2 D=2 D=2。Kraft不等式变为下列等式
2 − 2 + 2 − 2 + 2 − 2 + 2 − 2 = 1. 2^{-2}+2^{-2}+2^{-2}+2^{-2}=1. 22+22+22+22=1.
■ \blacksquare

1.5. 信源编码平均长度下界。

一个唯一可解的信源编码基于随机变量 X X X,对于 X = x i X=x_i X=xi映射的码字长度记为 l i l_i li,该信源编码的平均码字长度为 L = ∑ i p i ( x ) l i L=\sum_{i}p_i(x)l_i L=ipi(x)li。该信源编码的平均码字长度满足
L ≥ H D ( X ) . L\geq H_D(X). LHD(X).当且仅当对所有 i i i均有 p i = D − l i p_i=D^{-l_i} pi=Dli时取等号。
证明
L − H D ( X ) = ∑ i p i l i + ∑ i p i log ⁡ D p i = ∑ i p i log ⁡ D D l i + ∑ i p i log ⁡ D p i = ∑ i p i log ⁡ D p i D l i = ( ln ⁡ D ) − 1 ∑ i p i ln ⁡ p i D − l i ≥ ( ln ⁡ D ) − 1 ∑ i p i ( 1 − D − l i p i ) = ( ln ⁡ D ) − 1 ∑ i ( p i − D − l i ) = ( ln ⁡ D ) − 1 ( 1 − ∑ i D − l i ) ≥ 0 \begin{aligned} &L-H_D(X)\\ &=\sum_ip_il_i+\sum_ip_i\log_D p_i\\ &=\sum_ip_i\log_D D^{l_i}+\sum_ip_i\log_D p_i\\ &=\sum_ip_i\log_D p_iD^{l_i}\\ &= (\ln D)^{-1} \sum_ip_i \ln \frac{p_i}{D^{-l_i}}\\ &\geq (\ln D)^{-1} \sum_ip_i (1-\frac{D^{-l_i}}{p_i})\\ &=(\ln D)^{-1} \sum_i(p_i -D^{-l_i})\\ &=(\ln D)^{-1} (1-\sum_{i}D^{-l_i})\\ &\geq 0 \end{aligned} LHD(X)=ipili+ipilogDpi=ipilogDDli+ipilogDpi=ipilogDpiDli=(lnD)1ipilnDlipi(lnD)1ipi(1piDli)=(lnD)1i(piDli)=(lnD)1(1iDli)0
上式第一个不等式关系用到了fundamental不等式,第二个不等式关系用到了Kraft不等式。

当第一个不等式取等号时,有 p i = D − l i p_i=D^{-l_i} pi=Dli。在这个情况下,Kraft不等式也取等号,所以整个不等式取等号。
■ \blacksquare

1.6. 因为唯一可解信源编码的平均长度有下界,所以定义redundancy为
L − H D ( X ) . L-H_D(X). LHD(X).
显然当 p i = D − l i p_i=D^{-l_i} pi=Dli时redundancy为0。
■ \blacksquare

1.7. Prefix码。
如果一个信源编码的任意一个码字都不是另外某个码字的前缀,则称该码字为prefix-free码,简称prefix码。

显然prefix码是唯一可解码
■ \blacksquare

1.8.
存在一个信源编码是prefix码,当且仅当其满足Kraft不等式。

(显然,存在一个信源编码是唯一可解码,当且仅当其满足Kraft不等式)
证明
prefix码就是唯一可解码,满足Kraft不等式。

我们需要证的是如果一个信源编码满足Kraft不等式,则存在一个将之构造成prefix码的构造方法。

记这个信源编码是 D D D进制的,并且有 l 1 ≤ l 2 ≤ ⋯ ≤ l m l_1\leq l_2\leq \cdots \leq l_m l1l2lm。考虑一个 D D D-ary的满树,其深度为 l m l_m lm。显然,这个树的order为 l k l_k lk的叶子结点有 D l k D^{l_k} Dlk个,这意味着长度为 l k l_k lk的码字最多对应 D l k D^{l_k} Dlk个。

首先考虑第一个码字,长度为 l 1 l_1 l1。显然可以将这个码字对应到order为 l 1 l_1 l1的第一个叶子结点。下面利用归纳法。假设我们对于 l 1 , l 2 , ⋯   , l i l_1,l_2,\cdots,l_i l1,l2,,li均可以按照从左往右的顺序将他们对应的码字对应到相应order的叶子结点,并且这些对应的叶子节点里面,不存在父子节点的关系,即这些码字是prefix码。下面证明仍然可以将长度为 l i + 1 l_{i+1} li+1的码字对应到一个还没有被用过的order为 l i + 1 l_{i+1} li+1的叶子结点,并且该节点不是已用过节点的子节点。

在这个深度为 l m l_m lm D D D-ary满树中,order为 l i + 1 l_{i+1} li+1的节点的总数为 D l i + 1 D^{l_{i+1}} Dli+1。在前面 l 1 , ⋯   , l i l_1,\cdots,l_i l1,,li的使用过程中,使用了一些节点。对于 1 ≤ k ≤ i 1\leq k\leq i 1ki,考虑其中某个order为 k k k的节点。这个节点会生成 D l i + 1 − l k D^{l_{i+1}-l_k} Dli+1lk个order为 l i + 1 l_{i+1} li+1的子节点,这些子节点是不能再用于当前长度为 l i + 1 l_{i+1} li+1的码字的(否则就违反了prefix码的定义)。因此,在前面的生成中,order为 l i + 1 l_{i+1} li+1的叶子节点被使用了
D l i + 1 − l 1 + D l i + 1 − l 2 + ⋯ + D l i + 1 − l i D^{l_{i+1}-l_1}+D^{l_{i+1}-l_2}+\cdots+D^{l_{i+1}-l_i} Dli+1l1+Dli+1l2++Dli+1li个。那么剩下的order为 l i + 1 l_{i+1} li+1的叶子节点数目为
D l i + 1 − ( D l i + 1 − l 1 + D l i + 1 − l 2 + ⋯ + D l i + 1 − l i ) = D l i + 1 ( 1 − ∑ k = 1 i D − l k ) ≥ D l i + 1 ∑ k = i + 1 m D − l k ≥ D l i + 1 D − l i + 1 = 1. \begin{aligned} &D^{l_{i+1}}-(D^{l_{i+1}-l_1}+D^{l_{i+1}-l_2}+\cdots+D^{l_{i+1}-l_i})\\ =&D^{l_{i+1}}(1-\sum^{i}_{k=1}D^{-l_k})\\ \geq & D^{l_{i+1}}\sum^{m}_{k=i+1}D^{-l_k}\\ \geq & D^{l_{i+1}}D^{-l_{i+1}}\\ =&1. \end{aligned} ==Dli+1(Dli+1l1+Dli+1l2++Dli+1li)Dli+1(1k=1iDlk)Dli+1k=i+1mDlkDli+1Dli+11.以上证明过程用到了Kraft不等式。剩下的order为 l i + 1 l_{i+1} li+1的叶子节点数目大于等于1,说明当前 i i i个码字以对应好了之后,总是能将第 i + 1 i+1 i+1个码字对应好,并且这前 i + 1 i+1 i+1个码字不违反prefix码的规则。以此类推,一直到 l m l_m lm,构造成一个prefix码。
■ \blacksquare

前面关于平均长度下界的讨论给出,当对于所有 i i i都有 p i = D − l i p_i=D^{-l_i} pi=Dli时( l i = − log ⁡ D p i l_i=-\log_{D} p_i li=logDpi),平均长度取下界 H D ( X ) H_D(X) HD(X)。关于这个entropy bound,我们可以定义一个D-adic分部。
1.9. 如果一个概率分布 { p i } \{p_i\} {pi}满足 p i = D − t i p_i=D^{-t_i} pi=Dti,其中 t i t_i ti是一个正整数我们称该概率分布满足 D D D-adic。当 D = 2 D=2 D=2,称之为dyadic分布。
■ \blacksquare

以上 D D D-adic分布的定义是为了引出关于平均长度达到entropy bound 的情况。
1.10. 存在一个达到entropy bound的prefix code(即 L = H D ( X ) L=H_D(X) L=HD(X)),当且仅当概率分布是 D D D-adic的。
证明
必要条件很好证明,如果存在一个达到entropy bound 的prefix code,显然有 p i = D − l i p_i=D^{-l_i} pi=Dli,令 t i = l I t_i=l_I ti=lI,即可证明该概率分布是 D D D-adic的。

现在证明充分条件。假设 X X X的概率分布是 D D D-adic的,则有 p i = D − t i p_i=D^{-t_i} pi=Dti。那么
1 = ∑ i p i = ∑ i D − t i . 1=\sum_{i}p_i=\sum_{i}D^{-t_i}. 1=ipi=iDti.如果我们令 l i = t i l_i=t_i li=ti,显然entropy bound取到了等号。此外,Kraft不等式也满足,因此总是能构造出一个prefix code。综上,存在一个prefix code,并且该code达到entropy bound。
■ \blacksquare

2. Huffman码

2.1. Huffman code的构造
考虑 D D D-ary的Huffman code,用 D D D-ary树来构造Huffman code。每次选取概率最小的两个节点进行合并,合并后的节点概率为这两个子节点的概率和。重复该合并过程直到仅剩下 D D D个节点以上过程得到一颗 D D D-ary的树,从根节点出发,每个叶子结点的深度就是对应的codeword的长度。

对于 D = 2 D=2 D=2的随机变量,总是能直接构造出一个Huffman code。而对于 D > 2 D>2 D>2的情况,我们每次合并 D D D个节点,再生成1个合并后的节点,因此每次操作相当于在总的节点数上减去 D − 1 D-1 D1。假设一共有 k + 1 k+1 k+1次合并操作,于是经过前 k k k次合并,总的节点数减少了 k ( D − 1 ) k(D-1) k(D1)。此时,我们需要剩下的节点数为 D D D,因此,原始的总节点数需要为 D + k ( D − 1 ) D+k(D-1) D+k(D1) D > 2 D>2 D>2时的Huffman编码与 D = 2 D=2 D=2的编码本质区别在这儿,我们需要在原始总结点数不满足 D + k ( D − 1 ) D+k(D-1) D+k(D1)时,补一些概率为0的节点,来满足这个要求。
■ \blacksquare

在提出了Huffman码的构造方式之后,我们需要证明他是一种最优(optimal)编码。在给出证明之前,我们先给出两个关于最优码的引理。

2.2. 在一个最优码中,概率小的码字的长度大于等于概率大的码字长度。即,如果 p i < p j p_i<p_j pi<pj,则 l i ≥ l j l_i\geq l_j lilj
证明
反正,我们假设对于一个最优码,如果 p i < p j p_i<p_j pi<pj,有 l i < l j l_i<l_j li<lj。显然,我们可以交换这两个码字的码长,交换后的平均码长与交换前的平均码长的差为
( p i l j + p j l i ) − ( p i l i + p j l j ) = ( p i − p j ) ( l j − l i ) < 0. (p_il_j+p_jl_i)-(p_il_i+p_jl_j)=(p_i-p_j)(l_j-l_i)<0. (pilj+pjli)(pili+pjlj)=(pipj)(ljli)<0.这说明交换长度后平均码长变小了,这说明交换前并不是最优码。因此我们的假设矛盾,必然有 l i ≥ l j l_i\geq l_j lilj
■ \blacksquare

2.3. 存在一个最优码,他的概率最小的两个码字只有最后一个符号不同,前面的符号完全相同。用树的概念来讲就是,一定存在一个最优码,他的概率最小的两个码字对应的叶子结点是相邻的姊妹节点。
证明
我们从构造性的角度来证明。假设概率最小的一个码字对应的叶子结点没有姊妹节点,那么该节点完全可以被其父节点替代,因为被父节点替代后,仍然是prefix code,且平均长度减小了。平均长度可以进一步减小,说明此码不是最优码,矛盾。

假设概率最小的一个码字对应的叶子结点有姊妹节点。假如这个姊妹节点不是概率第二小的码字对应的姊妹节点,而是概率为 p i p_i pi的码字对应的叶子结点。我们记最小和第二小的概率为 p m i n 1 p_{min1} pmin1 p m i n 2 p_{min2} pmin2。根据12.,显然有 l m i n 1 ≥ l m i n 2 l_{min1}\geq l_{min2} lmin1lmin2。又因为 p i > p m i n 2 p_i>p_{min2} pi>pmin2,又有 l i ≤ l m i n 2 l_i\leq l_{min2} lilmin2。因为 i i i m i n 1 min1 min1是姊妹节点,于是 l i = l m i n 1 l_i=l_{min1} li=lmin1,那么我们有
l m i n 1 ≥ l m i n 2 l m i n 1 ≤ l m i n 2 \begin{aligned} & l_{min1}\geq l_{min2}\\ & l_{min1}\leq l_{min2} \end{aligned} lmin1lmin2lmin1lmin2于是 l m i n 1 = l m i n 2 = l i l_{min1}=l_{min2}=l_i lmin1=lmin2=li,意味着我们交换 i i i m i n 2 min2 min2的位置并不影响平均长度,即交换他们的位置仍然是一个最优码。
■ \blacksquare

2.4. 证明Huffman code是一个最优码
考虑两个姊妹叶子节点,其对应的概率分别为 p i p_i pi p j p_j pj。假设我们将这两个叶子结点合并,只考虑其父节点,那这个新的树构成了一个新的码,新码贺旧码的平均长度分别记为 L ′ L^{'} L L L L,于是
L − L ′ = ( p i + p j ) l − ( p i + p j ) ( l − 1 ) = p i + p j . L-L^{'}=(p_i+p_j)l-(p_i+p_j)(l-1)=p_i+p_j. LL=(pi+pj)l(pi+pj)(l1)=pi+pj.这意味着如果旧码是最优码,新码也是最优码。很容易反证,如果新码不是最优码,那么找一个最优的新码,将概率为 p i + p j p_i+p_j pi+pj的这个父节点分裂成概率分别为 p i p_i pi p j p_j pj的两个叶子结点,则生成的旧码的平均码长要比我们的 L L L要小,与我们的旧码是最优码的假设矛盾。

实际上,有了以上的新旧码之间平均码长的关系,我们得到:如果旧码是一个最优码,当且仅当新码也是一个最优码。

有了这个规律,Huffman的证明就很简单,只要从根节点往下,一直遵循码的分裂,就可以证明到分裂后的码一定是最优码。
■ \blacksquare

2.5. Huffman code的上下界。
对于一个Huffman码,他的平均长度满足
H D ( X ) ≤ L ≤ H D ( X ) + 1. H_D(X)\leq L\leq H_D(X)+1. HD(X)LHD(X)+1.
证明
前面我们已经证明过Huffman码是最优码,这意味着无论我们构造一个什么码,他的平均长度都是大于等于Huffman码的平均长度的。于是,证明思路是,先证明我们可以构造一个prefix码,他的平均长度小于 H D ( X ) + 1 H_D(X)+1 HD(X)+1。于是因为Huffman码是最优码,Huffman码的平均长度小于等于我们构造的这个码,因此也小于 H D ( X ) + 1 H_D(X)+1 HD(X)+1。至于下界本来就是entropy bound,无需再证明。

下面这种构造的平均长度小于 H D ( X ) + 1 H_D(X)+1 HD(X)+1的码也称为Shannon code。首先,我们之前的entropy bound告诉我们,当我们对所有 i i i都有 l i = − log ⁡ D ( p i ) l_i=-\log_D(p_i) li=logD(pi)时, L = H D ( X ) L=H_D(X) L=HD(X)。于是考虑将 l i l_i li设置为下列整数
l i = ⌈ − log ⁡ D ( p i ) ⌉ . l_i=\lceil -\log_D(p_i) \rceil. li=logD(pi).这样取整的方法导致了下列不等式
− log ⁡ D ( p i ) ≤ l i < − log ⁡ D ( p i ) + 1. -\log_D(p_i)\leq l_i< -\log_D(p_i)+1. logD(pi)li<logD(pi)+1.

左边的部分进行变换得到
p i ≥ D − l i . p_i\geq D^{-l_i}. piDli.于是求和有
∑ i D − l i ≤ ∑ i p i = 1. \sum_{i}D^{-l_i}\leq \sum_{i}p_i=1. iDliipi=1.显然,这个不等式说明我们的构造方法满足Kraft不等式,因此我们一定能按照这样的长度分配构造出一个prefix码。

另一方面,我们利用右边部分,得到
L = ∑ i p i l i < ∑ i ( − p i log ⁡ D ( p i ) + 1 ) = H D ( X ) + 1. \begin{aligned} L&=\sum_ip_il_i\\ &<\sum_i(-p_i\log_D(p_i)+1)\\ &=H_D(X)+1. \end{aligned} L=ipili<i(pilogD(pi)+1)=HD(X)+1.至此,我们证明到Huffman码的上界是 H D ( X ) + 1 H_D(X)+1 HD(X)+1

实际上,Huffman的这个上界是紧的(tight),即这个上界在某些情况下是可以达到的(无限接近)。因此,下面我们给出一个例子,使得Huffman码的平均码长在这个例子中无限接近上界 H D ( X ) + 1 H_D(X)+1 HD(X)+1

考虑一个 D D D-ary的编码,假设概率分布为
P k = { 1 − D − 1 k , 1 k , ⋯   , 1 k ⏟ D − 1 } . P_k=\{1-\frac{D-1}{k},\underbrace{\frac{1}{k},\cdots,\frac{1}{k}}_{D-1}\}. Pk={1kD1,D1 k1,,k1}.显然对这个概率分布使用Huffman编码,一步就足够,所有码字长度为1,平均码长也为1。其熵计算为
H D ( X ) = − ∑ i p i log ⁡ D p i = − ( 1 − D − 1 k ) log ⁡ D ( 1 − D − 1 k ) − D − 1 k log ⁡ D ( 1 k ) \begin{aligned} H_D(X)&=-\sum_ip_i\log_D p_i\\ &=-(1-\frac{D-1}{k})\log_D (1-\frac{D-1}{k})-\frac{D-1}{k}\log_D(\frac{1}{k}) \end{aligned} HD(X)=ipilogDpi=(1kD1)logD(1kD1)kD1logD(k1) k → ∞ k\rightarrow \infty k时,有 H D ( X ) → 0 H_D(X)\rightarrow 0 HD(X)0,于是当 k → ∞ k\rightarrow \infty k时,有 L → H D ( X ) + 1 L\rightarrow H_D(X)+1 LHD(X)+1
■ \blacksquare

2.6. 多个连续随机变量的Huffman编码。
前面的讨论可以看出,Huffman编码虽然是最优码,但还是不能保证编码后的平均码长一定取到下界entropy,事实上,如果我们对多个连续的随机变量一起使用H付付满编码,则能无限接近下界entropy。

考虑 n n n个独立同分布的随机变量
{ X 1 , X 2 , ⋯   , X n } . \{X_1,X_2,\cdots,X_n\}. {X1,X2,,Xn}.记他们均满足 X X X的分布。
将这 n n n个变量进行Huffman编码,得到的码字的平均长度满足
n H D ( X ) ≤ L ≤ n H D ( X ) + 1. nH_D(X)\leq L\leq nH_D(X)+1. nHD(X)LnHD(X)+1.这里entropy前面取 n n n倍是因为熵的定义使得这 n n n个随机变量的熵可以累加。

这里的长度针对 n n n个随机变量,假如取平均长度,那么每个随机变量的平均码长为 L / n L/n L/n,满足
H D ( X ) ≤ L / n ≤ H D ( X ) + 1 / n . H_D(X)\leq L/n \leq H_D(X)+1/n. HD(X)L/nHD(X)+1/n. n → ∞ n\rightarrow \infty n时,上式右边趋近于 H D ( X ) H_D(X) HD(X).

■ \blacksquare

3. Shannon-Fano-Elias码

3.1. Shannon-Fano-Elias码的构造
考虑概率分布 { p i } \{p_i\} {pi},考虑其累积分布函数(cumulative distribution function) F i F_i Fi
F i = ∑ j = 1 i p j . F_i=\sum^{i}_{j=1}p_j. Fi=j=1ipj.我们定义一个新的类似于累积分布函数的函数 F ˉ i \bar{F}_i Fˉi
F ˉ i = ∑ j = 1 i − 1 p j + 1 2 p i . \bar{F}_i=\sum^{i-1}_{j=1}p_j+\frac{1}{2}p_i. Fˉi=j=1i1pj+21pi.注意以上的定义都基于概率分部 p i p_i pi的下标已经排好序的基础上。

对于每个概率 p i p_i pi,取码字长度为 l i = ⌈ − log ⁡ D ( p i ) ⌉ + 1 l_i=\lceil -\log_D(p_i)\rceil+1 li=logD(pi)+1。对 F ˉ i \bar{F}_i Fˉi的前 l i l_i li位取四舍五入,得到长度为 l i l_i li的码字。
■ \blacksquare

3.2. 构造举例。
假设概率分布为
[ p 1 , p 2 , p 3 , p 4 ] = [ 1 4 , 1 2 , 1 8 , 1 8 ] . [p_1,p_2,p_3,p_4]=[\frac{1}{4},\frac{1}{2},\frac{1}{8},\frac{1}{8}]. [p1,p2,p3,p4]=[41,21,81,81].我们得到修改的累积概率分布函数为
[ F ˉ 1 , F ˉ 2 , F ˉ 3 , F ˉ 4 ] = [ 1 8 , 1 2 , 13 16 , 15 16 ] = [ 0.125 , 0.5 , 0.8125 , 0.9375 ] . \begin{aligned} [\bar{F}_1,\bar{F}_2,\bar{F}_3,\bar{F}_4]&=[\frac{1}{8},\frac{1}{2},\frac{13}{16},\frac{15}{16}]\\ &=[0.125,0.5,0.8125,0.9375]. \end{aligned} [Fˉ1,Fˉ2,Fˉ3,Fˉ4]=[81,21,1613,1615]=[0.125,0.5,0.8125,0.9375].采用二进制表示为
[ F ˉ 1 , F ˉ 2 , F ˉ 3 , F ˉ 4 ] = [ 0.001 , 0.1 , 0.1101 , 0.1111 ] . [\bar{F}_1,\bar{F}_2,\bar{F}_3,\bar{F}_4]=[0.001,0.1,0.1101,0.1111]. [Fˉ1,Fˉ2,Fˉ3,Fˉ4]=[0.001,0.1,0.1101,0.1111].
我们对这4个概率选取码字长度为
[ l 1 , l 2 , l 3 , l 4 ] = [ ⌈ − log ⁡ 2 1 4 ⌉ + 1 , ⌈ − log ⁡ 2 1 2 ⌉ + 1 , ⌈ − log ⁡ 2 1 8 ⌉ + 1 , ⌈ − log ⁡ 2 1 8 ⌉ + 1 ] = [ 3 , 2 , 4 , 4 ] . \begin{aligned} [l_1,l_2,l_3,l_4]&=[\lceil-\log_2 \frac{1}{4}\rceil +1,\lceil-\log_2 \frac{1}{2}\rceil +1,\lceil-\log_2 \frac{1}{8}\rceil +1,\lceil-\log_2 \frac{1}{8}\rceil +1]\\ &=[3,2,4,4]. \end{aligned} [l1,l2,l3,l4]=[log241+1,log221+1,log281+1,log281+1]=[3,2,4,4].于是我们对 [ F ˉ 1 , F ˉ 2 , F ˉ 3 , F ˉ 4 ] [\bar{F}_1,\bar{F}_2,\bar{F}_3,\bar{F}_4] [Fˉ1,Fˉ2,Fˉ3,Fˉ4]的二进制分别取前 [ 3 , 2 , 4 , 4 ] [3,2,4,4] [3,2,4,4]位,得到编码后的码字
[ 0.001 , 0.10 , 0.1101 , 0.1111 ] . [0.001,0.10,0.1101,0.1111]. [0.001,0.10,0.1101,0.1111].
■ \blacksquare

3.3. 为什么Shannon-Fano-Elias码是一个唯一可解码?
根据前面所述编码方法,假如我们采用浮点数表示,则每个码字直接由对应的修改后的累计概率分布函数表示,因为累积概率分布函数是独一无二的,因此这样的浮点数可以唯一译码。下面需要证明的是,即使我们采用有限长度精度去表示这个浮点数,仍然是可以唯一译码的。

有限长度近似会导致数值相较于原浮点数增加或者减小。我们记取 l i l_i li长度的 F ˉ i \bar{F}_i Fˉi F ˉ i ′ \bar{F}^{'}_i Fˉi。我们有
F ˉ i − F ˉ i ′ < 2 − l i . \bar{F}_i-\bar{F}^{'}_i<2^{-l_i}. FˉiFˉi<2li.因为 l i = ⌈ − log ⁡ D p i ⌉ + 1 l_i=\lceil -\log_Dp_i \rceil +1 li=logDpi+1,所以有
− log ⁡ D p i + 1 ≤ l i ≤ log ⁡ D p i + 2. -\log_Dp_i+1\leq l_i\leq \log_Dp_i+2. logDpi+1lilogDpi+2.进一步
p i / 4 ≤ 2 − l i ≤ p i / 2. p_i/4\leq 2^{-l_i}\leq p_i/2. pi/42lipi/2.其中我们需要用到等式右边的上界,有
F ˉ i − F ˉ i ′ < 2 − l i ≤ p i / 2. \bar{F}_i-\bar{F}^{'}_i< 2^{-l_i}\leq p_i/2. FˉiFˉi<2lipi/2.

可见,有限长度量化引入的误差小于等于 p i / 2 p_i/2 pi/2,这个误差如果使得量化后的 F ˉ i ′ \bar{F}^{'}_i Fˉi的值变小到 F ˉ i − 1 ′ \bar{F}^{'}_{i-1} Fˉi1,则导致量化后的码不能唯一译码。比如 F ˉ i \bar{F}_i Fˉi经过量化后变小为 F ˉ i ′ = x \bar{F}^{'}_i=x Fˉi=x F ˉ i − 1 \bar{F}_{i-1} Fˉi1经过量化后变小为 F ˉ i − 1 ′ = x \bar{F}^{'}_{i-1}=x Fˉi1=x,此时 F ˉ i ′ = F ˉ i − 1 ′ \bar{F}^{'}_i=\bar{F}^{'}_{i-1} Fˉi=Fˉi1,两个码字用同一个值编码,不能唯一译码。

现在关注 F ˉ i \bar{F}_{i} Fˉi F ˉ i − 1 \bar{F}_{i-1} Fˉi1之间的差。
F ˉ i − F ˉ i − 1 = p i / 2 + p i − 1 / 2 \bar{F}_{i}-\bar{F}_{i-1}=p_{i}/2+p_{i-1}/2 FˉiFˉi1=pi/2+pi1/2有了上面的式子,我们知道,量化最多将 F ˉ i \bar{F}_i Fˉi变小不到 2 − l i 2^{-l_i} 2li,而 F ˉ i \bar{F}_{i} Fˉi F ˉ i − 1 \bar{F}_{i-1} Fˉi1之间的差大于这个量,所以 F ˉ i ′ \bar{F}^{'}_i Fˉi不可能等于 F ˉ i − 1 \bar{F}_{i-1} Fˉi1,自然更不可能等于 F ˉ i − 1 ′ \bar{F}^{'}_{i-1} Fˉi1
■ \blacksquare

3.4. Shannon-Fano-Elias码的平均码长上界为
L ≤ H D ( X ) + 2. L\leq H_D(X)+2. LHD(X)+2.
证明
前面Shannon码的构造是令 l i = ⌈ − log ⁡ D p i ⌉ l_i=\lceil-\log_Dp_i\rceil li=logDpi,其上界是 H D ( X ) + 1 H_D(X)+1 HD(X)+1。Shannon-Fano-Elias码的构造是令 l i = ⌈ − log ⁡ D p i ⌉ + 1 l_i=\lceil-\log_Dp_i\rceil+1 li=logDpi+1,其上界是 H D ( X ) + 2 H_D(X)+2 HD(X)+2。这样很好记忆。证明如下。由 l i = ⌈ − log ⁡ D p i ⌉ + 1 l_i=\lceil-\log_Dp_i\rceil+1 li=logDpi+1
l i ≤ − log ⁡ D p i + 2 \begin{aligned} l_i\leq -\log_Dp_i+2 \end{aligned} lilogDpi+2于是
L = ∑ i p i l i ≤ ∑ i p i ( − log ⁡ D p i + 2 ) ≤ H D ( X ) + 2. \begin{aligned} L&=\sum_{i}p_il_i\\ &\leq \sum_{i}p_i(-\log_Dp_i+2)\\ &\leq H_D(X)+2. \end{aligned} L=ipiliipi(logDpi+2)HD(X)+2.

■ \blacksquare

4. 其他信源编码方法

Arithmetic code、Lempel-Ziv code和run-length参考参考文献[2]。注意Lampel-Ziv code的理解。

5. prefix码的redundancy

5.1. 到达概率、分支概率、节点条件熵的定义。
对于一个 D D D-ary的prefix码,我们可以用一个 D D D-ary的树来表示,这个树的每个叶子结点对应一个码字,每个叶子结点的深度就是这个码字的长度。
到达概率定义为一个节点的概率,叶子结点的概率就是对应的随机变量 X X X的概率 p i p_i pi
分支概率定义为一个节点传向其父节点的概率。

显然一个节点 k k k,其到达概率 q k q_k qk等于其所有子节点 j j j的分支概率的和:
q k = ∑ j = 1 D p k , j . q_k=\sum^{D}_{j=1}p_{k,j}. qk=j=1Dpk,j.

节点条件熵定义为 h k = H D ( { p k , 1 q k , p k , 2 q k , ⋯   , p k , D q k } ) h_k=H_D(\{\frac{p_{k,1}}{q_k},\frac{p_{k,2}}{q_k},\cdots,\frac{p_{k,D}}{q_k}\}) hk=HD({qkpk,1,qkpk,2,,qkpk,D})
■ \blacksquare

5.2. 一个prefix码的熵等于所有内部节点(非叶子结点)的条件熵的加权和。
H D ( X ) = ∑ k q k h k H_D(X)=\sum_{k}q_kh_k HD(X)=kqkhk
证明
对于每个节点,我们引入一个辅助变量 a k a_k ak
a k = − q k log ⁡ D q k . a_k=-q_k\log_D q_k. ak=qklogDqk.不难发现
q k h k = − q k ∑ j = 1 D p k , j q k log ⁡ D p k , j q k = − ∑ j = 1 D p k , j log ⁡ D p k , j q k = ∑ k ′ a k ′ − a k \begin{aligned} q_kh_k&=-q_k\sum^{D}_{j=1}\frac{p_{k,j}}{q_k}\log_D \frac{p_{k,j}}{q_k}\\ &=-\sum^{D}_{j=1}p_{k,j}\log_D \frac{p_{k,j}}{q_k}\\ &=\sum_{k^{'}}a_{k^{'}}-a_k \end{aligned} qkhk=qkj=1Dqkpk,jlogDqkpk,j=j=1Dpk,jlogDqkpk,j=kakak其中 a k ′ a_{k^{'}} ak是节点 k k k的子节点的辅助变量。于是,每个内部节点的 q k h k q_kh_k qkhk均可以表示成他的所有子节点的辅助变量的和减去自己的辅助变量。因此,对所有内部节点的 q k h k q_kh_k qkhk求和得到
∑ k q k h k = H D ( X ) − a 0 , \sum_{k}q_kh_k=H_D(X)-a_0, kqkhk=HD(X)a0,其中 a 0 a_0 a0是根节点的辅助变量,显根节点有 q 0 = 0 q_0=0 q0=0,因此 a 0 = 0 a_0=0 a0=0,于是我们得到
H D ( X ) = ∑ k q k h k . H_D(X)=\sum_{k}q_kh_k. HD(X)=kqkhk.
■ \blacksquare

上可以根据内部节点求和得到,平均长度也可以。
**5.3.**一个prefix码的平均长度满足
L = ∑ k q k . L=\sum_k q_k. L=kqk.
证明
引入一个辅助变量 a k , i a_{k,i} ak,i,如果内部节点 k k k是叶子结点 i i i的前驱,则 a k , i = 1 a_{k,i}=1 ak,i=1,否则 a k , i = 0 a_{k,i}=0 ak,i=0。于是
l i = ∑ k a k , i . l_i=\sum_k a_{k,i}. li=kak,i.进一步
L = ∑ i p i l i = ∑ i p i ∑ k a k , i = ∑ k ∑ i p i a k , i = ∑ k q k . \begin{aligned} L&=\sum_i p_il_i\\ &=\sum_i p_i \sum_k a_{k,i}\\ &=\sum_k \sum_i p_ia_{k,i}\\ &=\sum_k q_k. \end{aligned} L=ipili=ipikak,i=kipiak,i=kqk.
■ \blacksquare

5.4. 内部节点的redundancy的定义。对于内部节点 k k k,他的redundancy定义为
r k = q k ( 1 − h k ) . r_k=q_k(1-h_k). rk=qk(1hk).

前面的熵的上界告诉我们 h k ≤ 1 h_k\leq 1 hk1,当且仅当 q k , 1 = q k , 2 = ⋯ = q k , D = 1 / D q_{k,1}=q_{k,2}=\cdots=q_{k,D}=1/D qk,1=qk,2==qk,D=1/D时取等号,此时 r k = 0 r_k=0 rk=0。换句话说,只有当当前节点是balanced的时候,他的redundancy为0。
■ \blacksquare

5.5. prefix码的总redundancy可以表示成所有内部节点的redundancy之和:
R = ∑ k r k . R=\sum_k r_k. R=krk.
证明
R = L − H D ( X ) = ∑ k q k − ∑ k q k h k = ∑ k q k ( 1 − h k ) = ∑ k r k . \begin{aligned} R&=L-H_D(X)\\ &=\sum_k q_k-\sum_kq_kh_k\\ &=\sum_kq_k(1-h_k)\\ &=\sum_kr_k. \end{aligned} R=LHD(X)=kqkkqkhk=kqk(1hk)=krk.
■ \blacksquare

参考文献

[1] Raymond W. Yeung,Information Theory and Network Coding,2008。
[2] Ranjan Bose,Information Theory, Coding and Cryptography,2008。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【优秀课程设计】主要针对计算机相关专业的正在做毕设的学生和需要项目实战练习的学习者,也可作为课程设计、期末大作业。 包含全部项目源码、该项目可以直接作为毕设使用。项目都经过严格调试,确保可以运行! 【优秀课程设计】主要针对计算机相关专业的正在做毕设的学生和需要项目实战练习的学习者,也可作为课程设计、期末大作业。 包含全部项目源码、该项目可以直接作为毕设使用。项目都经过严格调试,确保可以运行! 【优秀课程设计】主要针对计算机相关专业的正在做毕设的学生和需要项目实战练习的学习者,也可作为课程设计、期末大作业。 包含全部项目源码、该项目可以直接作为毕设使用。项目都经过严格调试,确保可以运行! 【优秀课程设计】主要针对计算机相关专业的正在做毕设的学生和需要项目实战练习的学习者,也可作为课程设计、期末大作业。 包含全部项目源码、该项目可以直接作为毕设使用。项目都经过严格调试,确保可以运行! 【优秀课程设计】主要针对计算机相关专业的正在做毕设的学生和需要项目实战练习的学习者,也可作为课程设计、期末大作业。 包含全部项目源码、该项目可以直接作为毕设使用。项目都经过严格调试,确保可以运行! 【优秀课程设计】主要针对计算机相关专业的正在做毕设的学生和需要项目实战练习的学习者,也可作为课程设计、期末大作业。 包含全部项目源码、该项目可以直接作为毕设使用。项目都经过严格调试,确保可以运行! 【优秀课程设计】主要针对计算机相关专业的正在做毕设的学生和需要项目实战练习的学习者,也可作为课程设计、期末大作业。 包含全部项目源码、该项目可以直接作为毕设使用。项目都经过严格调试,确保可以运行! 【优秀课程设计】主要针对计算机相关专业的正在做毕设的学生和需要项目实战练习的学习者,也可作为课程设计、期末大作业。 包含全部项目源码、该项目可以直接作为毕设使用。项目都经过严格调试,确保可以运行! 【优秀课程设计】主要针对计算机相关专业的正在做毕设的学生和需要项目实战练习的学习者,也可作为课程设计、期末大作业。 包含全部项目源码、该项目可以直接作为毕设使用。项目都经过严格调试,确保可以运行! 【优秀课程设计】主要针对计算机相关专业的正在做毕设的学生和需要项目实战练习的学习者,也可作为课程设计、期末大作业。 包含全部项目源码、该项目可以直接作为毕设使用。项目都经过严格调试,确保可以运行! 【优秀课程设计】主要针对计算机相关专业的正在做毕设的学生和需要项目实战练习的学习者,也可作为课程设计、期末大作业。 包含全部项目源码、该项目可以直接作为毕设使用。项目都经过严格调试,确保可以运行! 【优秀课程设计】主要针对计算机相关专业的正在做毕设的学生和需要项目实战练习的学习者,也可作为课程设计、期末大作业。 包含全部项目源码、该项目可以直接作为毕设使用。项目都经过严格调试,确保可以运行! 【优秀课程设计】主要针对计算机相关专业的正在做毕设的学生和需要项目实战练习的学习者,也可作为课程设计、期末大作业。 包含全部项目源码、该项目可以直接作为毕设使用。项目都经过严格调试,确保可以运行! 【优秀课程设计】主要针对计算机相关专业的正在做毕设的学生和需要项目实战练习的学习者,也可作为课程设计、期末大作业。 包含全部项目源码、该项目可以直接作为毕设使用。项目都经过严格调试,确保可以运行! 【优秀课程设计】主要针对计算机相关专业的正在做毕设的学生和需要项目实战练习的学习者,也可作为课程设计、期末大作业。 包含全部项目源码、该项目可以直接作为毕设使用。项目都经过严格调试,确保可以运行! 【优秀课程设计】主要针对计算机相关专业的正在做毕设的学生和需要项目实战练习的学习者,也可作为课程设计、期末大作业。 包含全部项目源码、该项目可以直接作为毕设使用。项目都经过严格调试,确保可以运行! 【优秀课程设计】主要针对计算机相关专业的正在做毕设的学生和需要项目实战练习的学习者,也可作为课程设计、期末大作业。 包含全部项目源码、该项目可以直接作为毕设使用。项目都经过严格调试,确保可以运行! 【优秀课程设计】主要针对计算机相关专业的正在做毕设的学生和需要项目实战练习的学习者,也可作为课程设计、期末大作业。 包含全部项目源码、该项目可以直接作为毕设使用。项目都经过严格调试,确保可以运行! 【优秀课程设计】主要针对计算机相关专业的正在做毕设的学生和需要项目实战练习的学习者,也可作为课程设计、期末大作业。 包含全部项目源码、该项目可以直接作为毕设使用。项目都经过严格调试,确保可以运行! 【优秀课程设计】主要针对计算机相关专业的正在做毕设的学生和需要项目实战练习的学习者,也可作为课程设计、期末大作业。 包含全部项目源码、该项目可以直接作为毕设使用。项目都经过严格调试,确保可以运行! 【优秀课程设计】主要针对计算机相
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值