Kompresi dát Zdroje redundncie: priveľ znkov frekvencie výskytu znkov sú rôzne podmienené prvdepodobnosti rôznych postupností znkov sú rôzne dá s vyjdriť vzorcom lebo lgoritmom (mlá kolmogorovská zložitosť) možnosti interpolácie proximácie Kompresný pomer k = dĺžk kompresovného súboru dĺžk pôvodného súboru Niekedy s ko kompresný pomer uvádz hodnot 1- k. Kompresi dát 1
Vlstnosti kódov Jednoznčná dekódovteľnosť ( Kždú postupnosť vieme jednoznčne rozdeliť n kódové slová.) Prefixová vlstnosť ( Židne kódové slovo nie je prefixom iného kódového slov.) Vlstnosť okmžitej rozhodnuteľnosti ( Pri prečítní posledného znku poznáme koniec kódového slov.) Príkld: kód 1 kód 2 A 0 0 B 10 01 C 110 011 D 1110 0111 Kód 1 má prefixovú vlstnosť. Kód 2 je jednoznčne dekódovteľný, le nemá prefixovú vlstnosť, ni vlstnosť okmžitej rozhodnuteľnosti. Prefixová vlstnosť implikuje obe osttné vlstnosti. Kompresi dát 2
Kompresi rozptýlených záznmov Opkovcí znk počet opkovní Bitová mp Sepráci konštánt Príkld: d 1 d 2 000000d 3 d 4 d 5 d 6 000d 7 d 8 d 9 000 Opkovcí znk: d 1 d 2 R6d 3 d 4 d 5 d 6 R3d 7 d 8 d 9 R3 Bitová mp: 110000001111000111000: d 1 d 2 d 3 d 4 d 5 d 6 d 7 d 8 d 9 Sepráci: 26699(12): d 1 d 2 d 3 d 4 d 5 d 6 d 7 d 8 d 9 Distribučný vektor N nepárnych miestch počet dátových položiek. N párnych miestch počet konštánt. Súčet znmená celkový počet predchádzjúcich. Nájdenie L-tej položky z pôvodných dát v kompresovnom súbore: Nájdeme njmenšie i tké, že L v i-1 +v i. Ak i je párne konštnt. Ak i je nepárne p = L- v i-1. Kompresi dát 3
Diferenčné metódy kompresie Princíp pmätá s len rozdiel od predchádzjúceho záznmu. Metód je vhodná n menné zoznmy, bibliogrfické údje, slovníky, tbuľky hodnôt funkcií. Možno ju kombinovť so slovníkovou metódou. Nevýhodou je citlivosť n chyby. Pr.: Michlčík 0 Michlčík (0,3) Michlč Michn 4 n (4,0) n Mikelk 2 kelk (2,4) kel Mikletič 3 letič (3,2) let Mikulcová 3 ulcová (3,7) ul Mikulič 4 lič (4,2) l Mikuličová 7 ová (7,7) Mikulová 5 ová (5,7) Pridáním slovník 15 njbežnejších koncoviek mien: er, ič, ík, k, ná, ný, ová, zlepší s kompresný pomer. Kompresi dát 4
Frekvenčná nlýz Huffmnové kódy Princíp minimlizáci očkávnej dĺžky kódu. Nech p i je prvdepodobnosť výskytu i - tého kódového znku l i je dĺžk. Potom očkávná dĺžk kódu H je dná vzorcom: H = n i = 1 p i l i, kde n je počet znkov. Algoritmus konštrukcie Huffmnovho kódu (Knuth): Utriedíme znky podľ p i. Zlúčime znky dv znky s njmenšími hodnotmi p i. Riešíme problém pre n-1 hodnôt. Algoritmus nie je jednoznčný. V niektorých prípdoch s môžeme rozhodnúť, ktoré uzly budeme spájť. Možno je výhodne v tkomto prípde minmlizovť súčet vnútorných ciest. Dostneme tk kódy, ktoré s dĺžkou njmenej odlišujú. Kompresi dát 5
Konštrukci Huffmnovho kódu znk, p i ; znk, p i ; znk, p i ; znk, p i ; znk, p i ; s 1 0.4 0.4 0.4 s 3452 0.6 s 34521 1 s 2 0.2 0.2 s 345 0.4 s 1 0.4 s 3 0.2 0.2 s 2 0.2 s 4 0.1 s 45 0.2 s 5 0.1 Kód 1 01 000 0010 0011 s 2 s 3 s4 s5 s 1 s 1 s 2 s 3 Iný strom kód s 4 s 5 00 01 10 110 111 Kompresi dát 6
Väčší príkld Kompresi dát 7
Run length coding Niekedy s stáv, že prvdepodobnosti výskytu znkov sú približne rovnké, le je veľká prvdepodobnosť, že nsledujúci údj bude ko predošlý. Vznikjú dlhé sekvencie (runs) rovnkých znkov. (Je to typické pre grfické dát.) Kódovnie pomocou znku opkovni počtu opkovní. Príkld: bbbbcccbcccccbbb l=25 R4bR4cR3bcR5bR3R4 l=20 Účinnosť tejto metódy je tým väčši, čím sú sekvencie dlhšie. Qud trees oct trees v počítčovej grfike sú zložené n podobnom princípe. Kompresi dát 8
Kompresi s využitím kódového slovník Dný text t máme kompresovť pomocou slovník n fráz d={ p i : 1 i n}. Predpokldáme, že slovník obshuje všetky elementárne (jednoznkové) frázy. Nech t = N oznčuje dĺžku vstupného textu t j j-tý symbol vstupného textu. Oznčme B(j)={p i : ( 0 k < p i ) t j+k = p ik }, kde p ik je k-tý symbol frázy p i. Nech ω i je cen frázy p i. (Obvykle ω i = 1 pre všetky i. ) Cenu F(1) minimálneho pokryti textu t dostneme, ko riešenie systému rekuretných rovníc: F(j) je cen pokryti textu od F ( N + 1) = 0 pozície j (včítne) do konc. F ( j) = min { F ( j + p i ) + ωi} N pokrytie použijeme tie p i B( j ) frázy, pomocou ktorých s F(1) vypočítlo. Kompresi dát 9
Príkld - kompresi pomocou slovník Slovník: { A, AR, ARG, E, EN, G, GU, M, ME, MENT, N, R, U, UM, T } 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 Text: ARGUMENT B(1)={1,2,3} B(2)={12} B(3)={6,7} B(4)={13,14} B(5)={8,9,10} B(6)={4,5} B(7)={11} B(8)={15} F(9)=0, F(8)=1, F(7)=2, F(6)=2, F(5)=1, F(4)=2, 15 15,8 15,14 10 10, 13 F(3)=2, F(2)=3, F(1)=3 10,7 12,10,7 10,7,2 (10,13,3) AR-GU-MENT 2,7,10; ARG-U-MENT 3,13,10. Npriek zdnlivej zložitosti, kompresovť podľ sttického slovník s dá v lineárnom čse. Konštrukci optimálneho slovník, k dnému textu je NP ťžký problém. Kompresi dát 10
Adptívne metódy kompresie Hoci optimálne pokrývnie s dá robiť efektívne, vyžduje njprv prečítnie celého vstupu. Konštrukci slovník je tk, či tk ťžký problém. Nápd vzdť s optimálnosti, použiť nejký pžrvý (greedy) lgoritmus robiť všetko z letu (on the fly). Algoritmus: while not koniec do begin zkóduj čo njdlhší úsek vstupu; modifikuj slovník end; Výhodou týchto metód je, že pri dekódovní s použije ten istý lgoritmus modifikácie slovník slovník nie je potrebné prenášť uchovávť s dátmi. Kompresi dát 11
Ziv Lempel Welch Slovník je strom zostvený z podreťzcov prečítného úseku textu. Mximáln výšk tohoto stromu h njväčší možný počet vrcholov n sú prmetre metódy. Vrcholy sú oznčené číslmi kódmi hrny symbolmi vstupnej becedy. N počitku sú všetky symboly listy v hĺbke 1. Tieto postupne rozširujeme o suffixy prečítného textu (dĺžky menšej lebo rovnej h ) pokiľ strom nemá n vrcholov. Uzol stromu je kód pre cestu od vrcholu k nemu. Ak s strom nplní nemusíme ho už ďlej modifikovť, le môžeme ho reorgnizovť prečíslovť vrcholy. Kódovnie s robí tk, že nájdeme njdlhšiu cestu od koreň k uzlu stromu, ktorej hrny s zhodujú so vstupom. Kompresi dát 12
Príkld konštrukcie dptívneho slovníku Σ={,b,c}, h=4, n=16, t=bbcbbbbbbcb b 3 b 0 b 5 b b c 1 c c 7 2 b b 13 0,1,1,2,4,5,5,2,1 9 Počitočný strom b 4 11 6 8 12 10 Kompresi dát 13
Njjednoduchší spôsob LZ kódovni Inicilizuj slovník; /* znky becedy */ Nstv s n zčitok vstupného slov W; repet Z dnej pozície njdi njdlhší úsek u slov W, ktorý je v slovníku; Zkóduj u indexom v slovníku; Nstv s nsledujúcu pozíciu vstupného slov W[next]; Ak v slovniku je ešte miesto pridj uw[next] do slovník; until koniec vstupu; Posledný príkz môžeme rôzne modifikovť. Npr. obmedziť dĺžku pridávného slov, lebo pridávť všetky sufixy uw[next]. Aj činnosť v prípde, že slovník je plný môže byť rôzn. Môžeme pokrčovť bez pridávni, lebo vyprázdniť všetko ž po prvú úroveň zčť znov, lebo vynechť len nejkú čsť. Kompresi dát 14
Aritmetické kódovnie Huffmnovo kódovnie nie je optimálne pretože dĺžk kódu musí byť celé číslo. Ide kódovť pomocou intervlov podintervlov <0, 1). Celý text jeden intervl. Symbol prvdepodobnosť intervl 0.2 <0, 0.2) e 0.3 <0.2, 0.5) i 0.1 <0.5, 0.6) o 0.2 <0.6, 0.8) u 0.1 <0.8, 0.9)! 0.1 <0.9, 1 ) Text je eii!. Pri kompresii i dekompresii zčínme s intervlom <0, 1). Vždy po nčítní symbolu zúžime intervl. Kompresi dát 15
Aritmetické kódovnie - pokrčovnie Proces kódovni (kompresie) <0, 1) e <0.2, 0.5) Ak posledný znk je znk konc <0.2, 0.26) textu, môžeme kompresovný i <0.23, 0.236) text zkódovť ľubovolným i <0.233, 0.2336) číslom z výsledného intervlu.! <0.23354, 0.2336) Proces dekódovni (dekompresie)! u o i e! u o i e! u o i e! u o i e! u o i e Kompresi dát 16! u o i e
Technické detily ritmetického kódovni Presná ritmetik (integer, fixed) kumultívne frekvencie nmiesto prvdepodobností underflows - scling Metód bude dptívn, keď po kždom prečítní symbolu, ktulizujeme kumultívne frekvencie, či prvdepodobnosti. Metód je vhodná n: dptívnu kompresiu textu kompresiu postupností celých čísiel kompresiu čierno-bielých obrázkov Kompresi dát 17
Trnsformácie zmenšujúce entropiu Entropi H je očkávný počet bitov potrebný n zkó- dovnie znku i s prvdepobnosť ou výskytu p( i ). n H = i=1 p i log 2 p i Dobré kódy sú blízske tejto hrnici: Aritmetické kódovnie Huffmn Pred kompresiou zkódujeme text nejkou trnsformáciou, ktorá zmenší jeho entropiu tým umožní jeho lepšiu kompresiu. Kompresi dát 18
Presun n zčitok MTF Njprv znky zkódujeme do slovník v nejkom pordí. Znky kódujeme pordovým číslom. Použitý znk presunieme n zčitok. Príkld: b b b c c b b c c c c b d b c c 0 1 2 0 1 2 3 0 1 2 3 0 1 2 3 b c d b c d c b d Výsledok: 0 1 1 1 1 0 1 2 0 1 0 1 0 00 1 3 1 2 0 Frekvencie znkov: b c d 0 1 2 3 4 7 8 1 8 9 2 1 Entropi: 1.74 1.6 Extrém: b b b b b c c c c c d d d d d Výsledok: 0 0 0 0 0 1 0 0 0 0 2 0 0 0 0 3 0 0 0 0 Entropi: 2 0.85 Kompresi dát 19
Burrows Wheelerov trnsformáci Algoritmus 1 (kódovnie): Z reťzc r dĺžky n vytvoríme všetkých n jeho cyklických posuvov o jeden znk vľvo tieto utriedíme. Výstup L sú posledné znky kždého reťzc index (pozíci) pôvodného reťzc v utriedenej postupnosti. Algoritmus 2 (inverzná trnsformáci dekódovnie): Znky zkódovného reťzc L utriedime. Dostneme reťzec F. Vytvoríme dekódovcí vektor T[ i ] = j, práve vtedy k symbol F[ i ] je n j tej pozícii L[ j ]. Pritom predpokldáme, že triedenie bolo stbílne. Prirdíme i počitočný index dekodujeme lgoritmom: repet output(f[ i ] ) ; i : = T [ i ] until EOF; Kompresi dát 20
Príkld Kódovnie: 0 brkdbr 1 brkdbr 2 rkdbrb 3 kdbrbr 4 kdbrbr 5 dbrbrk 6 dbrbrk 7 brbrkd 8 brbrkd 9 rbrkdb 10 brkdbr A 0 brkdb r 1 brbrk d 2 brkdbr 3 dbrbr k 4 kdbrb r 5 brbrkd 6 brkdbr 7 dbrbrk 8 kdbrbr 9 rbrkd b 10 rkdbr b Výstup po trnsformácii: 2;rdkrbb Kompresi dát 21
Dekódovnie 012345678910 L = rdkrbb F = bbdkrr T = 256789101304 Že dekódovnie funguje. Posuňme ridky mtice cyklicky o jedno doprv dostneme mticu A s. Bude zčínť stĺpcmi LF. Prvý symbol A[T[ i]] je druhý symbol A[ i], pretože A s [T[ i]] = A[ i]. I = 2 I = T[2] = 6 I = T[6]=10 I = T[10]=4 I = T[4] = 8 I = T[8] = 3 I = T[3] = 7 I = T[7] = 1 I = T[1] = 5 I = T[5] = 9 I = T[9] = 0 T[ I ] b r k d b r Kompresi dát 22
Použitie Burrows Wheelerov trnsformáci nekompresuje, le triedením presúv rovnké symboly do zhľukov. Umožňuje ted lepšiu kompresiu. BZip, BZip2: Rozdelí text n rozumne veľké bloky pevnej dĺžky Čím väčší blok, tým lepši kompresi N blok plikuje Burrows Wheelerovu trnsformáciu Potom plikuje presun n zčitok Kompresuje ritmetickým kódovním Množstvo vylepšení progrmátorských trikov Triedenie len n záklde prefixu Netreb skutočne robiť cyklické posuvy Umiernený posun n zčitok Kompresi dát 23