Post on 07-Jan-2016
description
The Wheel of Fortune
Honza Blažek - gimli@matfyz.cz
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
Lm = (l1, l2, …, lp), kde p<|s|
(maximální motiv) je takový m, který nelze
prodloužit při zachování Lm.
(irredundant motiv) maximální motiv m se
seznamem výskytů Lm, takovým že Lm Lm1∪ Lm2∪ … ∪ Lmp (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řenkořen
aa bb cc
a = baa = ba ccbb
aa ccbb
bba=bacaa=baca cc
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řenkořen
aab = bacab = baca
cc
a = bacaaa = bacaa bb c = bacacc = bacac
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-line1
Ke komprimovanému souboru je přiložen slovník s motivy, jejich délkou, počtem výskytů a výskyty
Off-Line2
V textu je zachován jeden výskyt komprimovaného motivu a na něj je odkazováno
Off-Line3
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-Line1
$1
dictionary
a b a b a .
3 2
b a b a b a $1 2 3 4 5 6 7
1 2 3 4 5 6 7 8 910
1112
13
14
15
16
17
18
19
20
21
22
a b a a b a b a a b a a b a b a a b a b a $
dictionary
a b a . . .
3
original position
1 4 9 12
17
. .
5 . .
original position
1 4 9 12
17
1 3 5 .
5 3 .
11
Příklad Off-Line2
1 2 3 4 5 6 7 8 9 10 11 12 13 14 1516
17 18 19 20 21 22
a b a a b a b a a b a a b a b a a b a b a $
P P L L L L L P L L P L L L
( 8, 3 ) ( 5, 3 ) b a a b a ( -3, 3 ) b a ( -5, 3 ) b a $
1 2 3 4 5 6 7 8 910
1112
13
14
12
Příklad Off-Line3
dictionary
1 2 3 4 5 6 7 8 9 10 11 12 13 14 1516
17 18 19 20 21 22
a b a a b a b a a b a a b a b a a b a b a $
P P L L P P L L P L L L
( 1 ) ( 1 ) b a ( 1 ) ( 1 ) b a ( 1 ) b a $
1 2 3 4 5 6 7 8 910
11
12
1 2 . .
a b a . . .
3 . .
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|Lm maximálním a ten je zakomprimován
Komprimovaný motiv se řídí Off-Linei předpisem
problém s Off-Line2 (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
http://gimli.mysteria.cz/komprese/seminar