Komprimace dat a kryptologie
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í?
Komprimace dat a kryptologie
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
Komprimace dat a kryptologie
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?
Komprimace dat a kryptologie
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
Komprimace dat a kryptologie
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é
Komprimace dat a kryptologie
Historie kódování a komprese
• 1820 Braillovo písmo– pole 3x2 bodů– písmena, slova
• 1838 Morseovaabeceda– Samuel Morse– kódování pro
telegraf
Komprimace dat a kryptologie
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
Komprimace dat a kryptologie
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?
Adam Adam
adaptace 3ptace
adekvátní 2ekvátní
adept 3pt
admirál 2mirál
afekt 1fekt
aféra 2éra
agenda 1genda
agent 4t
Komprimace dat a kryptologie
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
Komprimace dat a kryptologie
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
Komprimace dat a kryptologie
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
Komprimace dat a kryptologie
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
Komprimace dat a kryptologie
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
Komprimace dat a kryptologie
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
Komprimace dat a kryptologie
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
Komprimace dat a kryptologie
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
Komprimace dat a kryptologie
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
Komprimace dat a kryptologie
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
Komprimace dat a kryptologie
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
Komprimace dat a kryptologie
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
Komprimace dat a kryptologie
LZW komprese
forall c doadd c to dictionary
w = ‘’while read(c) do
if wc is in dictionary then w = wcelse
add wc to dictionarywrite code(w)w = c
endifdone
Komprimace dat a kryptologie
LZW dekomprese
read(k)write(dictionary_entry(k))w = kwhile read(k) do
if k is in dictionary thenentry = dictionary_entry(k)
elseentry = w + w[0]
endifwrite(entry)add w+entry[0] to dictionaryw = entry
done
Komprimace dat a kryptologie
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
Komprimace dat a kryptologie
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
Komprimace dat a kryptologie
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
Komprimace dat a kryptologie
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ě
Komprimace dat a kryptologie
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