1. Kod Shannona
Kodem Shannona nazywamy kod prefiksowy spełniający zależność li=⌈log2pi1⌉
1.1. Uwaga
Jak dobry jest kod Shannona?
log2pi1≤li<log2pi1+1
i=1∑Npilog2pi1H≤≤pili∑L<i=1∑N(pilog2pi1+pi)<H+1
1.2. Przykład
Pokażemy, że takie kody istnieją!
Zrobimy kod Shannona.
p1=21p2=81p3=p4=⋯=p8=161
l1=log2(2)=1l2=log2(8)=3l3=⋯=l8=4
- P1=0=0.000002c(x1)=0
- P2=p1=21=0.10002c(x2)=100
- P3=p1+p2=21+81=0.101002c(x3)=1010
- P4=p1+p2+p3=21+81+161=0.1011002c(x4)=1011
- P5=21+41=0.110002c(x5)=1100
- P6=21+41+61=0.110102c(x6)=1101
- P7=21+41+81=0.111002c(x7)=1110
- P8=21+41+81+161=0.111100…2c(x8)=1111
2. Procedura dająca zawsze kod prefiksowy
Opisana w powyższym przykładzie zawsze daje kod prefiksowy o własności li=⌈logpi1⌉.
2.1. D-d
Pj=∑i=1j−1pizakładamy, z˙e p1≥p2≥⋯≥pN
Pj zapisujemy w systemie binarnym Pj=∑k=1∞2kbjk=(0.bj1bj2bj3…)2
c(xj)=bj1bj2…bjlj
Wówczas l1≤l2≤…lN.
lj=⌈logpj1⌉
- logpj1≤lj≤logpj1+1
- pj1≤2lj<pj2
- 2pj<2lj1≤pj
- Pj+1=Pj+pj≥Pj+2lj1 (∗)
(∗)⟹ Zatem c(xj) nie jest prefiksem c(xj+1)
w tych lj bitach mamy inne bity, dlatego mamy kod prefiksowy
dla j<kc(xj)<c(xk)↾lj
Dowód formalny przez indukcję względem k−j; dla k−j=1 zrobiliśmy.
■