1 / 25

Algoritmy komprese dat

Algoritmy komprese dat. Adaptivní Huffmanův kód. Statické  adaptivní metody. statický model. model. model. kodér. zdroj. dekodér. aktualizace modelu. Statické  adaptivní metody. adaptivní model. model. kodér. zdroj. model. dekodér. aktualizace modelu.

cindy
Download Presentation

Algoritmy komprese dat

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Algoritmy komprese dat Adaptivní Huffmanův kód SWI072 Algoritmy komprese dat

  2. Statické  adaptivní metody • statický model model model kodér zdroj dekodér SWI072 Algoritmy komprese dat

  3. aktualizace modelu Statické  adaptivní metody • adaptivní model model kodér zdroj model dekodér aktualizace modelu SWI072 Algoritmy komprese dat

  4. Adaptivní Huffmanův kód - algoritmus FGK • Faller(1973), Gallagher(1978), Knuth(1985). • AlgoritmusFGK: KódováníInicializuj Huffmanův stromread(znak)while znak¹EOF do zakóduj znak aktualizuj strom read(znak) od . • AlgoritmusFGK: DekódováníInicializuj Huffmanův stromdekóduj(znak)while znak¹EOF do write(znak) aktualizuj strom dekóduj(znak) od . SWI072 Algoritmy komprese dat

  5. Charakterizace Huffmanových stromů • Huffmanův strom - binární strom s ohodnocenými vrcholy. • Dva vrcholy binárního stromu, které mají stejného otce, nazveme sourozenci. Binární strom s ohodnocenými vrcholy má sourozeneckou vlastnost, pokud • každý vrchol kromě kořene má sourozence • vrcholy lze uspořádat do neklesající posloupnosti dle jejich vah tak, že sourozenci jsou vždy na sousedních místech. • Věta(Gallagher): Binární strom s ohodnocenými vrcholy je Huffmanovým stromem právě tehdy, když má sourozeneckou vlastnost. SWI072 Algoritmy komprese dat

  6. 15 7 8 4 3 a:1 b:2 c:2 d:2

  7. 15 7 8 4 3 a:1 b:2 c:2 d:2 9 • načti znak ´a´ 7 8 6 5 1 2 3 4

  8. 15 7 8 4 3 a:2 b:2 c:2 d:2 9 7 8 6 5 1 2 3 4

  9. 9 • načti znak ´a´ 16 7 8 8 8 6 4 5 4 a:2 b:2 c:2 d:2 1 2 3 4

  10. 9 16 7 8 8 8 6 4 5 4 a:3 b:2 c:2 d:2 1 2 3 4

  11. 9 16 7 8 8 8 6 4 5 4 d:2 b:2 c:2 a:3 1 2 3 4

  12. 9 16 7 8 8 8 6 5 5 4 d:2 b:2 c:2 a:3 1 2 3 4

  13. 9 16 7 8 9 8 6 5 5 4 d:2 b:2 c:2 a:3 1 2 3 4

  14. 9 16 8 7 8 9 6 5 5 4 d:2 b:2 c:2 a:3 1 2 3 4

  15. 9 17 8 7 8 9 6 5 5 4 d:2 b:2 c:2 a:3 1 2 3 4

  16. Problém nulových četností • Jak kódovat znaky, které jsou načteny poprvé? • 1. řešení: Při počáteční inicializaci jsou do Huffmanova stromu vloženy všechny znaky vstupní abecedy, každý s četností 1. • 2. řešení: Při počáteční inicializaci je do Huffmanova stromu vložen spec. znak ESC. První výskyt znaku z je kódován jako Huffmanův kód znaku ESC, následovaný znakem z. Poté je do Huffmanova stromu vložen nový list, odpovídající znaku z. SWI072 Algoritmy komprese dat

  17. 0 esc:0 z:0 esc:0 Problém znaků, které jsou načteny poprvé • Počáteční inicializace Huffmanova stromu esc:0 • z je nově načtený znak, který se ve stromě nevyskytuje • aktualizuj strom SWI072 Algoritmy komprese dat

  18. v k esc:k z:0 esc:k Aktualizace Huffmanova stromu • z je znak načtený na vstupu • if z se ve stromě nevyskytujethen • else v:= list Huffmanova stromu se znakem zfi. SWI072 Algoritmy komprese dat

  19. Aktualizace Huffmanova stromu • if v je sourozenec vrcholu escthen vyměň v s listem, který má nejvyšší pořadí mezi vrcholy se stejnou váhou jako v • v.váha++; v := otec(v) fi • while v¹kořen-stromu do • vyměň v s vrcholem, který má nejvyšší pořadí mezi vrcholy se stejnou váhou jako v (vymění se celé podstromy) • v.váha++; v := otec(v) od. SWI072 Algoritmy komprese dat

  20. FGK:Kódování • Inicializuj Huffmanův strom (T)repeatread(znak)if první výskyt znaku then write(kód(ESC)) write(znak)else write(kód(znak)) fi aktualizuj strom(T,znak)until znak¹EOF. SWI072 Algoritmy komprese dat

  21. FGK:Dekódování • InicializujHuffmanůvStrom(T); vrchol := kořen-stromu • repeat • while vrchol není list do read(bit)if bit=0 then vrchol := vrchol.levý-synelsevrchol := vrchol.pravý-syn fiod • ifvrchol.znak = ESCthen read(znak) else znak := vrchol.znak fi if znak¹ EOF then zapiš znak na výstupAktualizujStrom(T,znak) fi • until znak= EOF . SWI072 Algoritmy komprese dat

  22. Vitterův algoritmus • J.S.Vitter (1987) • Pouze 1 výměna při aktualizaci stromu (FGK nejvýše l/2 výměn, kde l = délka právě zapsaného k. s.) • Vitter minimalizuje ilia maxili( li = délka i-téhok. s. ) • lA - průměrná délka kódového slova pro algoritmus AlFGK  2lH lV  lH+1 • lFGK  lH + O(1) (Milidiu, Laber, Pessoa,1999) • D.E.Knuth: Dynamic Huffman Coding. J. Algorithms 6(1985),163-180.J.S.Vitter: Design and analysis of dynamic Huffman codes. J. ACM 34(1987),825-845. SWI072 Algoritmy komprese dat

  23. Další empirické výsledky • E.R.Fiala,D.H.Greene (1989) SC TM NS CC BF SF RCF SNI SCI BI FGK 75.1 62.5 59.5 80.4 75.6 63.7 76.7 41.5 85.0 20.5 V 74.9 62.4 59.5 80.2 75.6 63.7 76.6 41.4 85.0 20.5 SC zdrojový kód TM ASCII (technické memoranda) NS ASCII (news service) CC zkompilovaný kód BF boot file SF splajnové fonty RCF bitové mapy fontů kódované RLE SNI syntetické obrázky SCI digitalizované barevné fotografie (8bitů/pixel) BI digitalizované faxové dokumenty SWI072 Algoritmy komprese dat

  24. 18 12 6 r = 1/2 3 3 6 6 Implementační poznámky • Problém přetečení • délka souboru (kořen-stromu.váha) • délka nejdelšího kódového slova • Řešení: vynásobím váhy všech vrcholů koeficientem r < 1. • Nevýhoda: nutná reorganizace stromu SWI072 Algoritmy komprese dat

  25. ? 18 8 12 5 6 3 3 1 3 1 3 6 2 6 3 3 1 1 Reorganizace stromu • Je třeba znovu postavit celý strom SWI072 Algoritmy komprese dat

More Related