The Wheel of Fortune Honza Blažek -
2 Obsah Rozšíření Definice Motivy Don’t care symboly Algoritmy Datová struktura Trie LZW, LZ77 Off-Line greedy textual substituton Implementace Výsledky Literatura
3 Definice (abeceda) je množina všech znaků vyskytujících se ve vstupu následně i v Trii značení (vstupní data) pole (řetězec) znaků s[], kde s[i] i {1, 2, …, |s|} (abeceda s don’t care) ∪ {-}, kde – značí don’t care symbol (motif m) řetězec abecedy ∪ {-}, kde m[1], m[|m|] (seznam výskytů) množina všech pozic na kterých začíná motiv m v řetězci s L m = (l 1, l 2, …, l p ), kde p<|s| (maximální motiv) je takový m, který nelze prodloužit při zachování L m. (irredundant motiv) maximální motiv m se seznamem výskytů L m, takovým že L m L m1 ∪ L m2 ∪ … ∪ L mp (tj. nepřekrývá se se žádným z ostatních motivů)
4 Motivy a „don’t care“ don’t care symbolika nahrazení konkrétního symbolu v motivu don’t care symbolem ( - ) zavedení abecedy ∪ {-} příklad: neochotný ≠ neschopný nahradíme: ne-cho-ný = ne-cho-ný výhody don’t care: počty motivů se sníží četnost výskytu se zvýší slovník se zmenší nevýhody don’t care komprese se bez dalších úprav stává ztrátovou pro zachování bezztrátovosti je třeba komprimovat i vynechané znaky problematická implementace do algoritmů, tedy konkrétní výběr znaků, jenž se budou vynechávat více [4]
5 kořen ab a = ba abc ba=bacac bc c Trie – klasická stromová struktura následníci vrcholu jsou všechny znaky požadované abecedy slovo je vyhledáváno od kořene k listům a výsledné slovo je udáno cestou od kořene a hodnotu listu všichni následovníci jednoho vrcholu mají stejný prefix v daném vrcholu je 0 (pokud je vrchol prázdný) a slovo(pokud obsahuje hodnotu) příklad abeceda ={a, b, c} slovo ve stromu je uloženo ve vrstvě podle počtu písmen
6 Trie – komprimovaná def: vnitřní vrchol stromu vrchol, který není kořen a má následovníky (listy nebo vnitřní vrcholy) Trie -> komprimovaná Trie obsahuje-li vnitřní vrchol v, jehož všichni synové (následovníci) jsou listy bez významu a jeden vnitřní vrchol w, je nahrazen tímto vrcholem. Takto se postupuje dokud takové vrcholy Trie obsahuje. příklad nahrazeny 3 vnitřní vrcholy kořen ab = baca a = bacaa bc = bacac c
7 LZ77 bezztrátový algoritmus Původně pro kompresi textu Dnes komprese i datových a grafických souborů (compress – Unix) Doplňuje ztrátové kompresní algoritmy komprese v reálném čase při nižších požadavcích na rychlost lepší kompresní poměr variabilní velikost okna symetrická komprese a dekomprese vlastní algoritmus v okně dané velikosti je vyhledáván maximální shodný řetězec nalezený ve floating window ten je zakódován pomocí ukazatele na toto místo v okně a délky tohoto řetězce při dekompresi je nalezený ukazatel nahrazen řetězcem z dané pozice dané délky
8 LZW bezztrátový algoritmus Původně pro kompresi textu Dnes komprese i datových a grafických souborů (gzip – Unix) Doplňuje ztrátové kompresní algoritmy komprese v reálném čase při nižších požadavcích na rychlost lepší kompresní poměr variabilní hloubka slovníku symetrická komprese a dekomprese vlastní algoritmus v textu jsou vyhledávány stejné řetězce, každý řetězec je uložen do slovníku komprimovaný řetězec je vyhledán a místo něj je uložen odkaz na místo ve slovníku kde se vyskytuje dekomprese – je tvořen stejný slovník jako při kompresi a z něj jsou získávány původní řetězce původní text: abbaaabaab komprimovaný text: abbaaa[3,3]b
9 Off-Line greedy textual substitution Off-Line statistika textu probíhá před začátkem komprese (tedy předpokládá se vícenásobný přístup k datům) Greedy je vybrán motiv, který umožňuje maximální kompresi v aktuálním kroku Kombinace obou statistika je obnovována po každém komprimovaném motivu výběr motivu probíhá až do doby, kdy už nedochází ke kompresi Způsoby komprese Off-line 1 Ke komprimovanému souboru je přiložen slovník s motivy, jejich délkou, počtem výskytů a výskyty Off-Line 2 V textu je zachován jeden výskyt komprimovaného motivu a na něj je odkazováno Off-Line 3 Ke komprimovanému souboru je přiložen slovník na který je v zakódovaném souboru odkazováno (jsou místo něj odkazy)
10 Příklad Off-Line 1 $ 1 dictionary ababa. 32 bababa$ abaababaabaababaababa$ dictionary aba... 3 original position original position
11 Příklad Off-Line abaababaabaababaababa$ PPLLLLLPLLPLLL ( 8, 3 )( 5, 3 )baaba( -3, 3 )ba( -5, 3 )ba$
12 Příklad Off-Line 3 dictionary abaababaabaababaababa$ PPLLPPLLPLLL ( 1 ) ba ba ba$ aba
13 Don’t care ztrátová komprese (lc) probíhá bez větších problémů, don’t care symboly jsou dopočítány dekodérem bezztrátová komprese (llc) chybějící symboly jsou v další Trii (tzv. resolver), slova jsou uložena odkazem do obou stromů příklad: abbabbaaabaababaabababbaa
14 Kombinace don’t care s greedy algoritmy Zpracování vstupu u llc jsou výsledkem dva slovníky u lc probíhá obvyklým způsobem Ze slovníku se vybere motiv s |m|L m maximálním a ten je zakomprimován Komprimovaný motiv se řídí Off- Line i předpisem problém s Off-Line 2 (dodržení schématu je podstatně dražší) Opakování procedury ke komprimovanému textu se přidá resolver a potřebné slovníky Procedura se opakuje (zpracování vstupu, výběry motivů) Problémy zpracovávané motivy musí být irredundant algoritmus jinak ztrácí na efektivitě irredundant motivy se nepřekrývají – není třeba Trii stále obnovovat počet vln komprese musí být rozumně omezen časová náročnost kompresní poměr u lc dochází ke zbytečným ztrátám bez zvýšení efektivity
15 LZ77 a don’t care Implementace lc Ve vyhledávacím okně je nalezen nejvhodnější kandidát a na něj je z kódovaného signálu odkazováno Před začátkem komprese je stanoven index k určující maximální počet don’t care v řetězci k určuje výslednou kompresi a také ztrátu dekodér nahrazuje přímo konkrétním řetězcem z původního okna Implementace llc Nepoužívá se – nároky na pomocný slovník jsou příliš velké, jak časové tak prostorové
16 LZW a don’t care Implementace lc Komprese Při zpracování textu je budován slovník s již vynechanými znaky, každý uzel má jako své syny ∪ {- }, don’t care symboly fungují ve slovníku jako defaultní cesta, pokud není nalezen hledaný řetězec Při kompresi daného řetězce je odkazováno do slovníku Dekomprese Ze slovníku je vždy rozbalen daný řetězec don’t care symboly jsou dopočítávány pomocí nějaké spojité funkce (v závislosti na signálu (obrázek, el. signál) Implementace llc Komprese Při budování slovníku je budován reslover Odkaz je slepen z odkazu do resolveru a do původního slovníku Dekomprese Resolver je dekomprimován Odkazy jsou rozbaleny a chybějící symboly jsou rozbaleny
17 Komprese obrázků - lc
18 Srovnání metod – gzip a LZW +don’t care
19 Srovnání na Calgary Corpus
20 Literatura [1]Alberto Apostolico and Laxmi Parida, “Compression and the Wheel of Fortune”, IEEE Computer Society Press, 2003 [2]Alberto Apostolico, Matteo Comin and Laxmi Parida, “Motifs in Ziv-Lempel-Welch Clef”, IEEE Computer Society Press, 2004 [3]Alberto Apostolico and Stefano Leonardi, “Off-Line Compression by Greedy Textual Substitution”, IEEE, 2000 [4] Alberto Apostolico and Laxmi Parida, “Incremental Paradigms of Motif Discovery”, IEEE, 2003
21 Odkazy