Kraftova nerovnost

Z testwiki
Skočit na navigaci Skočit na vyhledávání

Kraftova nerovnost je věta užívaná v teorii kódování. Udává omezení na délky kódových slov, které musí splňovat daný kód, aby mohl být kódem prefixovým. Zobecnění Kraftovy nerovnosti pro libovolný jednoznačně dekódovatelný kód se pak nazývá McMillanova věta.

Kraftova nerovnost

Matematicky lze Kraftovu nerovnost formulovat takto: Uvažujme D-znakový prefixový kód kódující r různých zpráv pomocí kódových slov délek l1,l2,,lr. Pak musí být splněna nerovnost

i=1rDli1.

Naopak, pokud přirozená čísla l1,l2,,lr splňují výše uvedenou nerovnost, tak existuje prefixový kód s D znaky a délkami kódových slov l1,l2,,lr.

Pozn: Číslo D tedy představuje počet znaků, pomocí nichž kódujeme zprávy přicházející ze zdroje, pro binární kód je D=2, což odpovídá znakům 0 a 1. Po zakódování takovýmto kódem tedy z dané zprávy dostaneme posloupnost nul a jedniček. Pro ternární kódy máme D=3 (tj. znaky 0, 1, 2) atd. Hodnota r udává, kolik různých zpráv chceme být schopni pomocí našeho kódu zakódovat. Čísla l1,l2,,lr pak označují délky jednotlivých kódových slov, tzn. máme-li danou i-tou zprávu, tak li udává počet znaků v posloupnosti použité pro zakódování této zprávy, např. pro i-tou zprávu, jejíž kódové slovo je 00101 je li=5.

Příklad

Uvažujme binární prefixový kód pro kódování cifer 0,1,2,…,9 vhodný pro zprávy, kde se často vyskytují znaky 0, 1 a řídce znaky 8, 9. (Máme tedy D=2 a r=10.) Nápad: pro 0 a 1 zvolíme kódové slovo délky 2, pro číslice 2 až 7 zvolíme kódové slovo délky 3 pro 8 a 9 zvolíme kódové slovo délky 4. Potom by převodní tabulka vypadala takto:

0   00
1 01
2 1xx
3 1xx
4 1xx
5 1xx
6 1xx
7 1xx
8 xxxx
9 xxxx

Kombinace 1xx musí začínat jedničkou, aby byl kód prefixový, ale neposkytuje dost kombinací pro šest čísel. Kraftova nerovnost to předem říká ve výpočtu:

222+623+224=2216>1.

Naproti tomu kód

0   00
1 01
2 100
3 1010
4 1011
5 1100
6 1101
7 1110
8 11110
9 11111

prefixový je neboť:

222+123+524+225=16+4+10+232=1.

Důkaz

Zde uvedený důkaz byl převzat ze skript I. Vajdy [1]. Nejprve bez újmy na obecnosti předpokládejme, že l1l2lr a uvažujme D-ární stromový graf, tj. z každého vrcholu grafu vychází krom vstupního právě D dalších vrcholů-potomků. Na počátku tedy máme kořenový vrchol, z něhož vychází D větví, z nichž se pak každá dělí na dalších D větví, tj. celkem na D2 větví. Z tohoto je vidět, že na i-té úrovni stromu se nachází Di vrcholů, kde kořenu odpovídá nultá úroveň. Pokud má tedy strom celkem r úrovní, tak na této poslední úrovni se nachází Dr vrcholů.

Tento stromový graf popisuje všechny možné kombinace znaků našeho kódu délky r. Tj. pokud bychom měli binární kód kódující tři zprávy, tak by mu odpovídal binární strom o třech úrovních. Pokud by v binárním stromě vrchol pro nulu ležel nalevo od předchůdce a jednička napravo od něj, tak zprávu 001 bychom mohli vyjádřit jako cestu stromem z kořene do levého vrcholu (první nula), z něj do dalšího levého vrcholu (druhá nula) a z něj nakonec do pravého vrcholu (jednička na konci).

Uvažujme nyní konkrétní vrchol na i0-té úrovni, kde i0 je pevně zvolené číslo mezi nulou a r. Když budeme chápat tento vrchol jako kořen nového D-árního stromu (tj. podstromu původně uvažovaného stromu o celkem r úrovních), tak tento strom bude mít celkem ri0 úrovní a na své poslední úrovni bude mít Dri0 vrcholů.

Nejprve dokážeme implikaci zleva, tj. máme prefixový kód a chceme ukázat, že musí platit Kraftova nerovnost.

Mějme tedy D-ární strom o r úrovních a podívejme se na l1-tou úroveň. Zde vezměme jeden vrchol a odřízněme větve z něj vycházející. Podíváme-li se nyní na poslední, tj. r-tou úroveň, stromu, tak tam ubylo Drl1 vrcholů spojených s výše vybraným vrcholem. Na úrovni l1 nám teď zbývá Dl11 vrcholů, z nichž vedou větve. Vyjděme z některého z nich, dojděme na úroveň l2 a aplikujme postup obdobný tomu výše. Takto pokračujme až na r-tou úroveň. Zde by se mohlo namítnout, že odřezáváním nemáme zajištěno, že nějaký vrchol na této úrovni vůbec zůstane. Jenomže my jsme uvažovali prefixový kód, tzn. pokud mám na li-té úrovni vrchol, tj. mám kódové slovo délky li, tak už neexistují kódová slova, která by měla toto slovo jako prefix. Neboli mám-li na úrovni li vrchol odpovídající danému kódovému slovu a odříznu všechny z něj vycházející vrcholy, tak žádný z těchto odříznutých vrcholů neodpovídá kódovému slovu. Protože nyní předpokládáme, že existuje kódové slovo délky lr, tak nutně musí existovat vrchol stromu na úrovni lr.

Zapišme nyní, co odřezávání znamená pro počet vrcholů na poslední, tj. r-té, úrovni stromového grafu. Pro každé i{1,,r} jsme odřezáním přišli o Drli vrcholů ležících na r-té úrovni. Protože odřezaných vrcholů na této úrovni nemůže být víc než celkový počet vrcholů na této úrovni, který je roven Dr, dostáváme nerovnost

i=1rDrliDr.

Když tuto nerovnost vydělíme její pravou stranou obdržíme Kraftovu nerovnost.

Dokážeme nyní opačnou implikaci, tj. máme přirozená čísla l1l2lr a D splňující Kraftovu nerovnost. Z výše popsaného postupu je zřejmé, že existuje stromový graf o D úrovních takový, že na li-té úrovni (pro každé i{1,,r}) se bude nacházet vrchol, z něhož už žádné vrcholy vycházet nebudou. Těmto vrcholům můžeme přiřadit kódové slovo (vezmu cestu od kořene k tomuto vrcholu a podle toho, kterou větví jsem v i-tém kroku procházel, tak na i pozici ve slově napíšu jeden ze znaků 0, 1 až D). Takto zkonstruovaný kód je zřejmě prefixový.

Zobecnění Kraftovy nerovnosti

Kraftovu nerovnost lze vyslovit nejen pro konečný počet zpráv, ale i pro spočetnou množinu zpráv. Tvrzení výše lze proto formulovat i pro r=. Neboli: Pro délky l1,l2, spočetně mnoha kódových slov přináležejících prefixovému D-znakovému kódu platí

i=1Dli1.

Naopak, splňují-li přirozená čísla tuto nerovnost, tak existuje prefixový D-znakový kód s těmito délkami slov.

Pozn: Další zobecnění (pro jednoznačně dekódovatelné kódy) pak představuje McMillanova věta (viz níže).

Důkaz zobecněného tvrzení

Zde uvedený důkaz lze použít i pro tvrzení s r konečným, můžeme ho tedy chápat jako alternativu k výše uvedenému důkazu. I tento důkaz byl převzat ze skript [1].

Dokažme nejdříve implikaci zleva, tj. máme slova délek l1,l2, a chceme odvodit Kraftovu nerovnost. Mějme i-té kódové slovo, to má délku li. Můžeme ho tedy vyjádřit jako posloupnost znaků z1z2zli. Každý znak zj nabývá hodnot 0D1 a dané kódové slovo můžeme tedy chápat jako číslo v D-znakové číselné soustavě. Konkrétně, lze ho chápat jako desetinný rozvoj čísla nacházejícího se mezi 0 a 1 následujícím způsobem

0,z1z2zli=j=1lizjDj.

Neboť nyní předpokládáme, že náš kód je prefixový, je zobrazení, které kódovému slovu přiřazuje číslo z intervalu [0,1] výše uvedeným způsobem, prosté. Není těžké si rozmyslet, že prefixovost kódu zaručuje následující vlastnost: jestliže k-té slovo je délky lk splňující lkli, tak jemu odpovídající číslo neleží v intervalu

I(li)=(0,z1z2zli;0,z1z2zli+Dli).

Pro názornost na chvíli uvažujme konkrétní příklad, kdy je I(li)=(0,536;0,537), tj. li=3. Patří do něj třeba čísla 0,5361 nebo 0,5369, neleží v něm ale čísla 0,536 a 0,537 (jedná se o otevřený interval). Z tohoto příkladu je patrné, že kdyby v intervalu I(li) leželo k-té slovo, tak by muselo mít prvních li znaků shodných s i-tým slovem, což je spor s prefixovostí kódu, kterou jsme předpokládali.

Máme tedy každému kódovému slovu jednoznačně přiřazen interval délky Dli, který je disjunktní s kterýmkoli jiným intervalem odpovídajím odlišnému slovu. Navíc všechny tyto intervaly leží v intervalu [0,1] a to musí platit i pro jejich sjednocení. Protože jsou všechny intervaly navzájem disjunktní je míra jejich sjednocení rovna součtu jejich délek. Míra sjednocení je navíc seshora omezena délkou intervalu [0,1], tzn. jedničkou. Zapíšeme-li tento argument pomocí matematických symbolů, dostáváme okamžitě zobecněnou Kraftovu nerovnost.

Dokažme nyní druhou implikaci. Máme tedy přirozená čísla l1,l2, splňující danou nerovnost a chceme najít prefixový kód, jehož kódová slova budou mít délky l1,l2,. Označme si I1=[0,1] a vyberme z něj libovolné číslo 0,z1z2. Prvních l1 znaků tohoto čísla (v daném pořadí) interpretujeme jako kódové slovo našeho kódu. Sestrojíme nyní množinu I2=I1I(l1), kde I(l1) je interval definovaný výše v první polovině důkazu. Analogický postup neustále opakujeme, čímž dostaneme posloupnost intervalů I1,I2,, kde In=In1I(ln1). Z Kraftovy nerovnosti plyne, že In nebude nikdy prázdná a fakt, že intervaly I1,I2, jsou disjunktní, zajišťuje, že námi vytvářená slova odpovídají prefixovému kódu.

McMillanova věta

McMillanova věta je tvrzení z oblasti teorie informace, které dává do vztahu délky kódových slov jednoznačně dekódovatelných kódů. Jedná se o zobecnění Kraftovy nerovnosti, která je primárně dokázána pro prefixové kódy (ty tvoří podmnožinu množiny jednoznačně dekódovatelných kódů). Větu lze vyslovit v následujícím znění:

Délky slov li libovolného jednoznačně dekódovatelného D-znakového kódu splňují nerovnost

i=1Dli1.

Pozn: Číslo D tedy představuje počet znaků, pomocí nichž kódujeme zprávy přicházející ze zdroje, pro binární kód je D=2, což odpovídá znakům 0 a 1. Po zakódování takovýmto kódem tedy z dané zprávy dostaneme posloupnost nul a jedniček. Pro ternární kódy máme D=3 (tj. znaky 0, 1, 2) atd. Čísla l1,l2, pak označují délky jednotlivých kódových slov. To znamená, máme-li danou i-tou zprávu, tak li udává počet znaků v posloupnosti použité pro zakódování této zprávy, např. pro i-tou zprávu, jejíž kódové slovo je 00101, je li=5.

Důkaz McMillanovy věty

Následující důkaz je též převzat ze skript I. Vajdy [1]. Důkaz provedeme ve dvou krocích, nejprve dokážeme nerovnost pro jednoznačně dekódovatelné kódy s konečným počtem kódových slov. Poté zobecníme toto prozatímní tvrzení i na kódy s nespočetně mnoha slovy.

Ukažme nejprve, že když l(x) jsou délky slov jednoznačně dekódovatelného kódu C:𝒳𝒟 konečného zdroje (𝒳,p), tak platí

x𝒳Dl(x)1.

Nechť Cn:𝒳n𝒟n je rozšíření kódu C a 𝐱=(x1,,xn)𝒳n je jistá zpráva. Pak délky l(x) slov Cn(𝐱) (obraz zprávy 𝐱 při kódování Cn) splňují podmínku

l(x)=i=1nl(xi).

Z toho plyne

(x𝒳Dl(x))n=𝐱𝒳nDl(𝐱)=k=1nlmaxm(k)Dk,

kde lmax=maxx𝒳(l(x)) a symbol m(k) udává počet zpráv 𝐱𝒳n zakódovaných do slov délky k. Protože je kód jednoznačně dekódovatelný, nejvýše jedno 𝐱𝒳n se zobrazí do slova délky k a proto m(k)Dk. Tedy

(x𝒳Dl(x))nk=1nlmaxDkDk=nlmax.

Odsud dostáváme

x𝒳Dl(x)(nlmax)1n1pron.

Neboť můžeme n volit libovolně, dokázali jsme tak tvrzení pro konečné zdroje.

Důkaz dokončíme tak, že si uvědomíme, že podmnožina kterýchkoli m slov jednoznačně dekódovatelného kódu představuje jednoznačně dekódovatelný kód. Na něj můžeme použít tvrzení dokázané v první části tohoto důkazu, čímž dostaneme

i=1mDli1prom=1,2,

Stačí už tedy jen vzít limitu pro m a zobecněné tvrzení pro spočetně mnoho kódových slov je dokázáno.

Reference

  1. 1,0 1,1 1,2 Šablona:Citace monografie — skripta FJFI ČVUT

Šablona:Autoritní data