310 likes | 523 Views
Kompresní algoritmy. Opakování. Co je to kódování? Jaký je rozdíl oproti šifrování? Jak pracuje Shanon-Fanovo kódování? Jak pracuje Huffmanovo kódování?. Problém komprese. Balení věcí do skříně nebo batohu Úspora úložného prostoru Zjednodušení transportu
E N D
Opakování • Co je to kódování? Jaký je rozdíl oproti šifrování? • Jak pracuje Shanon-Fanovo kódování? • Jak pracuje Huffmanovo kódování?
Problém komprese • Balení věcí do skříně nebo batohu • Úspora úložného prostoru • Zjednodušení transportu • Nezáleží na kapacitě, problém nedostatku místa nakonec vždycky přijde
Komprese dat • Komprese a komprimace jsou synonyma • Kompresní algoritmus transformuje řetězec S1 délky d1 na řetězec S2 délky d2 • Požadujeme, aby: • d2<d1 • I(S1) = I(S2), kde I je informační hodnota • Jak to udělat?
Jak to udělat? • Základní myšlenka: Vyhledáme nadbytečné informace, které vypustíme. • Viz teorie informace z minulé přednášky • Příklad: qu v angličtině • Jiná myšlenka: Vypustíme nějaké informace tak, “aby to nebylo poznat“. • Text lze komprimovat 1:2, obrázky 1:50, video až 1:1000
Vlastnosti kompresních algoritmů • Ztrátovost / bezeztrátovost komprese • Kompresní poměr k = d2/d1 (k<=1) • někdy udáván v procentech • kompresní zisk: z = 1 – k • Metody lze rozdělit na: • statické x adaptivní • symetrické x asymetrické • proudové x blokové
Historie kódování a komprese • 1820 Braillovo písmo • pole 3x2 bodů • písmena, slova • 1838 Morseovaabeceda • Samuel Morse • kódování protelegraf
Historie kódování a komprese • 1800 Baudotův kód • 5bitový kód pro telegraf • písmena, znaky • přepínač LTRS/FIGS • Dvacáté století • s rozvojem IT jde i rozvoj kompresních algoritmů • Huffmann, Shannon, Lempel, Ziv, Welch
Jednoduché kompresní metody • Komprese slovníku • opakující se písmena nahradíme číslem vyjadřující jejich počet • 54 zn. 44 zn. • Jaký je kompresní poměr a zisk?
Metoda potlačení nul • Jedna z nejstarších, v kombinaci s jinými dodnes používaná • V souboru se vyskytují sekvence stejných znaků (mezery) • Sekvenci nahradíme indikátorem a číslem • Dekomprese: načteme-li indikátor, přečteme číslo a vypíšeme příslušný počet nul • Efektivní až při sekvenci tří nul • Posunutá stupnice => při 8bitovém kódování 258 až nul v jednom znaku
Metoda potlačení nul – příklad • Vstupní text: AB---CAB----B-A-------CB • Výstupní text: ABI0CABI1B-AI4CB • Řetězec 24B zkomprimován na 16B • Dekomprese: Při načtení I přečteme číslo (x) a vypíšeme x+3 nul • I se nesmí vyskytovat v textu
Metoda bitové mapy • Potlačení výskytu často opakovaného znaku (nuly) • Ke každé osmiznakové sekvenci vytvoříme bitovou mapu výskytu nul • Ukládáme vždy bitovou mapu a sekvenci nenulových znaků • V souboru musí být alespoň 1/8 nul
Metoda bitové mapy – příklad • Vstupní text: AB-CA--C • Bitová mapa:11011001 • Výstupní text: <11011001>ABCAC • Řetězec 8B zkomprimován na 6B • Při dekompresi se doplňují nuly podle bitové mapy, ostatní znaky podle textu
Proudové kódování – RLE • Run Length Encoding (kódování délkami sekvencí) • Vylepšení metody potlačení nul • Označme an posloupnost znaku a délky n • Každou posloupnost an nahradíme sekvencí Ian • Příklad • Vstupní text: abbbbcccaaaaaaaabbbb • Výstupní text: aIb4cccIa8Ib4 • Řetězec 20B zkomprimován na 13B • Efektivní pro n>3
RLE s posunutou stupnicí • Náhradu sekvence an provádíme jen při n>3 • Na výstup umístíme Ia(n-3) • V 1B až 258 opakování (místo 255) • Příklad • Vstupní text: abbbbcccaaaaaaaabbbb • Výstupní text: aIb1cccIa5Ib1 • Řetězec 20B zkomprimován na 13B
RLE bez indikátoru komprese • Znak I se nesmí vyskytovat v textu – nevýhoda • Každou sekvenci an pro n>=3 nahradíme sekvencí aaa(n-3) • Dekomprese: Při načtení trojice stejných znaků načteme číslo – počet zbývajících znaků • Nepotřebujeme indikátor komprese • Při n=3 dochází k expanzi!!! aaa0
Využití algoritmu RLE • V grafických a zvukových souborech s malými změnami • malá barevná hloubka, jednoduchá kresba • záznam hlasu • Hlavní algoritmus: *.PCX • Pomocný algoritmus: *.JPG • Faxy • většina faxu je bílá, ojediněle černý bod
Kódování delta • U některých typů dat nastává lineární růst (pokles) • hudba, animace • První byte uložíme tak, jak je • Každý další byte je kódován jako rozdíl (delta) oproti předcházejícímu bytu • Příklad • Vstupní soubor: 10 12 14 16 15 22 32 • Delta kódování: 10 2 2 2 -1 7 10
Kódování delta – použití • Sekvence stejných znaků jsou nahrazeny sekvencemi nul • Kromě toho získáme nové sekvence stejných znaků • následné kódování RLE má větší efekt • Použití zejména v audioformátech
Algoritmus LZW84 • Lempel – Ziv – Welch • Vylepšení LZ78 (Lempel – Ziv 1978) • Slovníkový algoritmus pro bezeztrátovou kompresi • Použitý ve formátech GIF, TIFF a PDF • Do roku 2004 chráněn patentem • Dnes již překonaný • Čím delší text, tím lepší kompresní poměr
Vývoj algoritmu LZW84 • LZ77 • Používá klouzavé okno, v něm hledá opakující se sekvence • Vstup: Leze leze po železe • Výstup: Leze l[2,3] po že[5,4] • LZ78 • Místo klouzavého okna tvoří vlastní slovník • Slovník narůstá a je třeba jej vyprazdňovat
LZW komprese forall c do add c to dictionary w = ‘’ while read(c) do if wc is in dictionary then w = wc else add wc to dictionary write code(w) w = c endif done
LZW dekomprese read(k) write(dictionary_entry(k)) w = k while read(k) do if k is in dictionary then entry = dictionary_entry(k) else entry = w + w[0] endif write(entry) add w+entry[0] to dictionary w = entry done
Předpřipravení dat pro kompresi • Úkolem těchto algoritmů je modifikovat data tak, aby měla následná komprese lepší poměr • typicky se jedná o vhodnou reverzibilní permutaci • Burrows-Wheelerova transformace • Move-to-front transformace
Burrows-Wheelerova transformace • Příprava textu pro RLE • Výsledný text má stejnou délku • plus znak začátku a konce • ale lépe se komprimuje • Algoritmus transformace: • přidej k textu znak začátku a konce • vytvoř tabulku všech posuvů daného textu • seřaď řádky podle abecedy • na výstup zapiš poslední sloupec
Burrows-Wheelerova transformace • Zpětná transformace • opakuj tolikrát, kolik je znaků ve vstupním textu • vezmi aktuální tabulku a před první sloupec vepiš vstupní text • seřaď řádky aktuální tabulky podle abecedy • výsledkem je původní tabulka • vezmi řádek začínající znakem začátku řádku
Move-to-front transformace • Příprava textu tak, aby častější symboly byly kódovány nižšími čísly • Proudové zpracování • Algoritmus transformace • Začínáme se seřazenou abecedou (tabulkou) • Zapíšeme index symbolu na vstupu • V tabulce indexů právě použitý symbol přesuneme na začátek • Kódování je reverzibilní • zpětná transformace probíhá stejně
Další algoritmy • PPM (Prediction by Partial Matching) • adaptivní statistická metoda • předpověď následujících dat na základě předchozích • CM (Context Mixing) • kombinace více statistických metod