Kod Shannona

by Jerry Sky

2020-10-15



1. Kod Shannona

Kodem Shannona nazywamy kod prefiksowy spełniający zależność li=⌈log⁡21pi⌉ l_i = \left\lceil \log_2 \frac{1}{p_i} \right\rceil

1.1. Uwaga

Jak dobry jest kod Shannona?

log⁡21pi≤li<log⁡21pi+1 \log_2\frac{1}{p_i} \le l_i < \log_2\frac{1}{p_i} + 1

∑i=1Npilog⁡21pi≤∑pili<∑i=1N(pilog⁡21pi+pi)H≤L<H+1 \begin{aligned} \sum_{i=1}^{N} p_i \log_2 \frac{1}{p_i} &\le& \sum_{p_i l_i} &< \sum_{i=1}{N} \left( p_i \log_2 \frac{1}{p_i} + p_i \right)\\ H &\le& L &< H+1 \end{aligned}


1.2. Przykład

Pokażemy, że takie kody istnieją!

Zrobimy kod Shannona.

p1=12p2=18p3=p4=⋯=p8=116p_1 = \frac{1}{2} \qquad p_2 = \frac{1}{8} \qquad p_3 = p_4 = \dots = p_8 = \frac{1}{16}

l1=log⁡2(2)=1l2=log⁡2(8)=3l3=⋯=l8=4l_1 = \log_2 (2) = 1 \qquad l_2 = \log_2 (8) = 3 \qquad l_3 = \dots = l_8 = 4

2. Procedura dająca zawsze kod prefiksowy

Opisana w powyższym przykładzie zawsze daje kod prefiksowy o własności li=⌈log⁡1pi⌉l_i = \left\lceil \log \frac{1}{p_i} \right\rceil.

2.1. D-d

(∗)  ⟹  (*) \implies Zatem c(xj)c(x_j) nie jest prefiksem c(xj+1)c(x_{j+1})

w tych ljl_j bitach mamy inne bity, dlatego mamy kod prefiksowy

dla j<kc(xj)<c(xk)↾ljj<k \qquad c(x_j) < c(x_k) \upharpoonright l_j

Dowód formalny przez indukcję względem k−jk-j; dla k−j=1k-j = 1 zrobiliśmy.

■\blacksquare