Komprese dat (Komprimace dat) Př.: zakódovat slovo ARARAUNA K K 2 četnost absolutní relativní A 4,5 N,25 R 2,25 U,25 kód K : kód K 2 :... 6 bitů... 4 bitů prefixový kód: žádné kódové slovo není prefixem (začátkem) jiného kódového slova Př.: K blokový kód (viz též bezpečnostní kódy) K 2 prefixový kód komprese (též komprimace): kódování (přesněji: překódování) snížení počtu bitů dekódování: dekomprese (dekomprimace) nová délka kompresní poměr KP = původní délka Př.: předp.: K : původní kód K 2 : nový kód komprimovaná data např.: KP = 4/6 = 87,5% (pro ARARAUNA ) zpráva = řetěz dílčích zpráv text = řetěz písmen a dalších znaků zdrojová jednotka S j (původní) dílčí zpráva kódová jednotka C j zakódovaná dílčí zpráva postfixový kód: žádné kódové slovo není postfixem (koncovkou) jiného kódového slova afixový kód: kód, který je prefixový i postfixový NLP Komprese.2.996 c A. Pluháček NLP Komprese 2 3.2.996 c A. Pluháček informační entropie Čím menší je pravděpodobnost p zprávy, tím je zpráva cennější tím větší je její informační obsah E, tzn.: p roste = roste E logaritmická míra: E = log 2 p = log 2 p E = log 2 p (shannon) E... informační entropie, informační obsah, míra množství informace aj. (viz též bezpečnostní kódy) stejně pravděpodobná nbitová čísla: počet čísel: N = 2 n pravděpodobnost: p = N = 2 n entropie: E = n (shannon bit) v nbitovém čísle může být n shannonů p i... pravděpodobnost ité z k možných zpráv průměrná entropie H = k (p i log 2 p i ) i= Př.: příkl. ARARAUNA ; předp.: pravděpodobnost = relativní četnost entropie písmen A, N, R, U:, 3, 2, 3 4/8 /8 2/8 /8 průměrná entropie písmene: H =,5 +,25 3 +,25 2 +,25 3 =,75 p j... pravděpodobnost zdrojové jednotky S j E j... entropie zdrojové jednotky S j H j... průměrná entropie jté dílčí zprávy zpráva S,S 2,..., Sm: pravděpodobnost p = p p 2 pm entropie E = log 2 p, tzn.: E = m E j j= průměrná entropie (analogicky): Př.: entropie zprávy ARARAUNA: E = +2++2++3+3+ = 4 H = m H j j= (shannon) průměrná entropie 8písmenového slova: H = 8,75 = 4 (shannon) NLP Komprese 3 2.9.998 c A. Pluháček NLP Komprese 4 2.9.998 c A. Pluháček
redundance (nadbytečnost) E... entropie zprávy L... délka zápisu = max. možná entropie redundance: R = L E p i... pravděpodobmost ité z k možných zpráv E i... entropie ité zprávy L i... délka zápisu ité zprávy H... průměrná entropie průměrná redundance: Q = k p i (L i E i ) i= Q = k p i L i H i= Př.: příkl. ARARAUNA ; kód K předp.: pravděpodobnost = relativní četnost R = Q = 6 4 = 2 (shannon) komprese dat: snížit redundanci na minimum! NLP Komprese 5 8.2.996 c A. Pluháček Metody komprese (vybrané:) speciální čísla Elias Fibonacci obrazové informace (přírůstky) databáze (jména, data narození apod.) obecné I. statické týž kód pro různá data Shannon Fano Huffman aritmetické k. hybridní = semiadaptivní kód data dynamické = adaptivní týž algoritmus pro kompresi i dekompresi FGK (Faller Gallager Knuth) V (Vitter) obecné II. slovníkové metody statické hybridní = semiadaptivní dynamické = adaptivní Lempel Ziv (LZ77, LZ78) BSW (Bentley Sleator arjan Wei) NLP Komprese 6 8.2.996 c A. Pluháček Eliasův kód I. kódování přirozených čísel (větších než ) předpoklad: menší čísla častější výskyt princip: nbitový zápis čísla, začínající před tento zápis umístit n nul = prefixový kód 2 3 4 5 6 7 8 9 Eliasův kód II. před nbitový zápis čísla umístit n v Eliasově kódu I. z nbitového zápisu čísla vypustit první bit (jedničku) Př.: 386 = 2 n = 9 výsledné kódování: NLP Komprese 7 4.5.998 c A. Pluháček Fibonacciho kód kódování přirozených čísel (větších než ) předpoklad: menší čísla častější výskyt Fibonacciho čísla (řádu 2): F = F =, F i = F i + F i 2 pro i =, 2, 3,..., F, F, F 2,... použijeme jako váhy zápisu čísel: i... 5 4 3 2 F i... 3 8 5 3 2 2 3 4 5 6 7 8 9 v zápisech nejsou 2 jedničky vedle sebe NLP Komprese 8 8.2.996 c A. Pluháček
Fibonacciho kód (řádu 2): obrátit pořadí bitů (v předchozích zápisech) přidat na konec = prefixový kód 2 3 5 8... 2 3 4 5 6 7 8 9 Shannon Fanoův kód seřadit znaky podle četnosti (abs. nebo rel.) dělit podle četnosti na poloviny (pokud možno) (nebo naopak) Př.: příkl. ARARAUNA A R U N 4 2 /2 /4 /8 /8... A R U N tzv. kódový strom : 8 4 2 4 A 2 R U N NLP Komprese 9 8.2.996 c A. Pluháček NLP Komprese 8.2.996 c A. Pluháček Huffmanův kód kódový strom : seřadit znaky podle četnosti (abs. nebo rel.) znaky uzly ohodnocené četností nové uzly: Př.: dvojice minimálně ohodnocených uzlů ohodnotit součtem ohodnocení příkl. ARARAUNA 7 8 6 4 4 2 5 4 3 2 2 A R U N tzv. sourozenecká vlastnost A R U N Kódy Shannon Fanoův a Huffmanův představitelé statických metod velmi malá až minimální redundance Př.: znak četnost S-F H A B 5 C 5 D 4 E 3 28 znaků: Shannon Fano 63 bitů Huffman 62 bitů semiadaptivní (hybridní) kódování dva průchody:. určení četností dílčích zpráv kód 2. vlastní kódování s daty je nutno přenést/zapsat i kódovací tabulku NLP Komprese 8.2.996 c A. Pluháček NLP Komprese 2 3.2.996 c A. Pluháček
metoda FGK metoda FGK 2 metoda FGK (Faller Gallager Knuth) postupné vytváření a modifikace kódového stromu: na počátku tvoří strom jen zvláštní uzel uzel (list) ohodnocený : nulový list nový znak na vstupu: vyšle se kód nulového listu (poprvé nic) vyšle se vstupující znak (např. v kódu ASCII) nulový list se nahradí binárním podstromem: kořen ohodnocen levý list: nulový list pravý list přísluší znaku ohodnocen známý znak na vstupu: vyšle se kód znaku pro list, který znaku přísluší, a postupně pro všechny jeho předchůdce (směrem ke kořenu) se zamění uzel s podstromem (pokud existuje): jehož kořen je stejně ohodnocený uzel má vyšší číslo uzly jsou číslovány zdola nahoru a zleva doprava ohodnocení uzlu a všech jeho předchůdců se zvýší o metoda FGK příklad I. zakódovat řetěz znaků MEEME M M 3 2 E E M 5 2 3 4 M 2 E NLP Komprese 3 3.2.996 c A. Pluháček NLP Komprese 4.2.24 c A. Pluháček metoda FGK 3 metoda FGK 4 metoda FGK příklad II. E M 7 3 5 2 6 M 3 4 E 2 7 4 5 2 6 2 E 3 4 M 2 metoda FGK příklad III. M 5 E 5 7 5 2 6 3 E 3 4 2 M 2 7 6 3 6 3 E 3 4 2 M 2 NLP Komprese 5.2.24 c A. Pluháček NLP Komprese 6.2.24 c A. Pluháček
Slovníkové metody orientovány na opakující se podřetězce, tzv. fráze, popř. digramy, trigramy,... vytváří se slovníky frází,... metoda LZ78 položky ve slovníku číslovány od prázdný řetěz do slovníku se ukládá výstup podřetěz ve slovníku se hledá nejdelší podřetěz na vstupu výstup: číslo položky & následující znak Př.: zakódovat: ARA ARARAUNA (3 znaků) vstup výstup A A 2 R R 3 A 4 AR R 5 ARA 4 A 6 U U 7 N N 8 A 3 NLP Komprese 7 8.2.996 c A. Pluháček