CTW, Algorytmy specjalizowane cz. 2
Transkrypt
CTW, Algorytmy specjalizowane cz. 2
CTW Specjalizowane algorytmy kompresji Tematy projektów CTW, Algorytmy specjalizowane cz. 2 Algorytmy kompresji danych Sebastian Deorowicz 2007–04–24 Sebastian Deorowicz AKD — CTW, Algorytmy specjalizowane cz. 2 CTW Specjalizowane algorytmy kompresji Tematy projektów Plan wykładu 1 CTW 2 Specjalizowane algorytmy kompresji Kompresja plików XML i baz danych Kompresja plików wykonywalnych Kompresja DNA i białek Kompresja różnicowa i zdalna synchronizacja 3 Tematy projektów Sebastian Deorowicz AKD — CTW, Algorytmy specjalizowane cz. 2 CTW Specjalizowane algorytmy kompresji Tematy projektów CTW (ang. Context Tree Weighting) Opis Algorytm CTW opublikowany w latach 1993–1995 roku przez Willemsa, Shtarkova i Tjalkensa Jeden z nowszych algorytmów kompresji ogólnego przeznaczenia Dla chętnych w miarę przystępny opis szczegółów CTW: http://www.sps.ele.tue.nl/members/F.M.J.Willems/ RESEARCH_files/CTW/reflections.ps Sebastian Deorowicz AKD — CTW, Algorytmy specjalizowane cz. 2 CTW Specjalizowane algorytmy kompresji Tematy projektów Frans M. J. Willems Internet: Ważne daty http://userver.ftw.at/~jossy/photos/ 0303_NewJersey/dscn5794.jpg 1993 – Współtwórca algorytmu CTW Sebastian Deorowicz AKD — CTW, Algorytmy specjalizowane cz. 2 CTW Specjalizowane algorytmy kompresji Tematy projektów PPM a CTW PPM Prawdopodobieństwo wystąpienia symbolu wyznaczane jest w kontekście pewnego maksymalnego rzędu d Jeśli w tym kontekście symbol jeszcze nie wystąpił, to kodowany jest symbol wyjścia, zmniejszany jest rząd i procedura powtarza się CWT Prawdopodobieństwo wystąpienia symbolu wyznaczane na podstawie statystyk dla wszystkich kontekstów rzędów od 0 do d Oryginalny algorytm działa dla sekwencji binarnej Sebastian Deorowicz AKD — CTW, Algorytmy specjalizowane cz. 2 CTW Specjalizowane algorytmy kompresji Tematy projektów PPM a CTW PPM Prawdopodobieństwo wystąpienia symbolu wyznaczane jest w kontekście pewnego maksymalnego rzędu d Jeśli w tym kontekście symbol jeszcze nie wystąpił, to kodowany jest symbol wyjścia, zmniejszany jest rząd i procedura powtarza się CWT Prawdopodobieństwo wystąpienia symbolu wyznaczane na podstawie statystyk dla wszystkich kontekstów rzędów od 0 do d Oryginalny algorytm działa dla sekwencji binarnej Sebastian Deorowicz AKD — CTW, Algorytmy specjalizowane cz. 2 CTW Specjalizowane algorytmy kompresji Tematy projektów Wyznaczanie prawdopodobieństw w algorytmie CTW Algorytm Wyznacz prawdopodobieństwo wystąpienia symbolu w bieżącym kontekście rzędu 0 jako średnią ważoną prawdopodobieństw wyznaczonych na podstawie statystyk dla tego rzędu i wyznaczonego prawdopodobieństwa dla rzędu 1 Prawdopodobieństwo dla rzędu 1 wyznacz jako średnią ważoną prawdopodobieństwa na podstawie statystyk dla rzędu 1 i wyznaczonego prawdopodobieństwa dla rzędu 2 Postępuj podobnie aż do rzędu d, dla którego prawdopodobieństwo wyznacza się tylko na podstawie statystyk występowania symboli dla tego rzędu Sebastian Deorowicz AKD — CTW, Algorytmy specjalizowane cz. 2 CTW Specjalizowane algorytmy kompresji Tematy projektów Jak kompresować dane nie-binarne? Dekompozycja Dane należy przekształcić na ciąg bitów Możliwe są tu różne sposoby, np.: kompresujemy kolejno wszystkie bity — kiepskie wyniki tworzymy 8 niezależnych modeli (dla każdej pozycji w bajcie); kontekst można wyznaczać np. tak: kontekstem są tylko bity z tej pozycji w bajcie z ostatnich d bajtów (zwykle d ≈ 20) kontekstem są wszystkie bity z poprzednich bajtów i zakodowane już bity z bieżącego bajta Sebastian Deorowicz AKD — CTW, Algorytmy specjalizowane cz. 2 CTW Specjalizowane algorytmy kompresji Tematy projektów CTW — wyniki praktyczne Współczynnik kompresji Gorszy o kilka-kilkanaście procent od PPMonstr a także gorszy od najlepszych algorytmów opartych na BWT Prędkość Wolny a nawet bardzo wolny — kilkadziesiąt KB/s na współczesnych komputerach Sebastian Deorowicz AKD — CTW, Algorytmy specjalizowane cz. 2 CTW Specjalizowane algorytmy kompresji Tematy projektów Kompresja Kompresja Kompresja Kompresja plików XML i baz danych plików wykonywalnych DNA i białek różnicowa i zdalna synchronizacja Plan wykładu 1 CTW 2 Specjalizowane algorytmy kompresji Kompresja plików XML i baz danych Kompresja plików wykonywalnych Kompresja DNA i białek Kompresja różnicowa i zdalna synchronizacja 3 Tematy projektów Sebastian Deorowicz AKD — CTW, Algorytmy specjalizowane cz. 2 CTW Specjalizowane algorytmy kompresji Tematy projektów Kompresja Kompresja Kompresja Kompresja plików XML i baz danych plików wykonywalnych DNA i białek różnicowa i zdalna synchronizacja Kompresja plików XML Pliki XML Nowoczesny format służący do przechowywania i wymiany danych Dane najczęściej przechowywane w postaci tekstowej Zestaw znaczników opisujących dane nie jest ustalony przez standard a użytkownicy mogą swobodnie stosować własne znaczniki Znaczniki tworzą zagnieżdżoną strukturę, a dokument można przedstawić jako pojedyncze drzewo Sebastian Deorowicz AKD — CTW, Algorytmy specjalizowane cz. 2 CTW Specjalizowane algorytmy kompresji Tematy projektów Kompresja Kompresja Kompresja Kompresja plików XML i baz danych plików wykonywalnych DNA i białek różnicowa i zdalna synchronizacja Pliki XML — przykład <Line> <PKey>15</PKey> <SKey>1</SKey> <Count>1</Count> <Qty>25</Qty> <Price>22875.25</Price> <Discount>0.09</Discount> <Tax>0.05</Tax> <RFlag>A</RFlag> <Status>F</Status> <SDate>1994-06-14</SDate> <CDate>1994-07-20</CDate> <RDate>1994-06-23</RDate> <SI>COLLECT COD</SI> <SM>MAIL</SM> <Comment>hAwAxxiNP6nz7jQkhyNQnjB5yn</Comment> </Line> Sebastian Deorowicz AKD — CTW, Algorytmy specjalizowane cz. 2 CTW Specjalizowane algorytmy kompresji Tematy projektów Kompresja Kompresja Kompresja Kompresja plików XML i baz danych plików wykonywalnych DNA i białek różnicowa i zdalna synchronizacja Kompresja XML Gdzie tu jest redundancja? Prawie wszystkie znaczniki otwierające mają znaczniki zamykające Teksty zwykle w języku naturalnym Wiodące spacje zwykle odzwierciedlają poziomy zagnieżdżenia Pola numeryczne zapisywane tekstowo; często są one podobne w kolejnych rekordach Daty zapisywane tekstowo, dodatkowo bardzo często daty się powtarzają albo różnią się tylko nieznacznie Sebastian Deorowicz AKD — CTW, Algorytmy specjalizowane cz. 2 CTW Specjalizowane algorytmy kompresji Tematy projektów Kompresja Kompresja Kompresja Kompresja plików XML i baz danych plików wykonywalnych DNA i białek różnicowa i zdalna synchronizacja Kompresja XML Istniejące algorytmy, cz. 1 Algorytmy ogólnego przeznaczenia dają całkiem dobre wyniki, ale nie wykorzystują one wiedzy o strukturze plików XML XMill (Liefke i Suciu, 2000) — rozdziela dokument na trzy oddzielnie kompresowane strumienie: nazwy znaczników i atrybutów tekst układ struktury Sebastian Deorowicz AKD — CTW, Algorytmy specjalizowane cz. 2 CTW Specjalizowane algorytmy kompresji Tematy projektów Kompresja Kompresja Kompresja Kompresja plików XML i baz danych plików wykonywalnych DNA i białek różnicowa i zdalna synchronizacja Kompresja XML Istniejące algorytmy, cz. 2 XMLPPM (Cheney, 2001) — specjalizowana wersja PPMa używająca czterech osobnych modeli dla kompresji różnych części dokumentu (np. znaczników, tekstu) XWRT (Swacha, Grabowski, Skibiński, 2006) — preprocesing dokumentu, którego główna idea polega na zamianie najczęstszych słów na kody ze słownika (stworzonego we wstępnym przebiegu) Specjalna wersja transformaty BWT dla plików XML (Ferragina, 2006) Sebastian Deorowicz AKD — CTW, Algorytmy specjalizowane cz. 2 CTW Specjalizowane algorytmy kompresji Tematy projektów Kompresja Kompresja Kompresja Kompresja plików XML i baz danych plików wykonywalnych DNA i białek różnicowa i zdalna synchronizacja Kompresja XML — przykładowe dane Plik DBPL NASA SwissPr Rozmiar [MB] 127.7 2.1 109.5 Elementy 3 332 130 48 001 2 977 031 Atrybuty 404 276 1 2 189 859 Max. głęb. 6 3 5 Pliki DBPL — dane bibliograficzne o pracach naukowych NASA — dane astronomiczne SwissPr — dane o strukturach białkowych Sebastian Deorowicz AKD — CTW, Algorytmy specjalizowane cz. 2 CTW Specjalizowane algorytmy kompresji Tematy projektów Kompresja Kompresja Kompresja Kompresja plików XML i baz danych plików wykonywalnych DNA i białek różnicowa i zdalna synchronizacja Kompresja XML — przykładowe wyniki (w bpc)1 Algorytm bzip2 PPMd zip XMill+bzip2 XMill+PPMd XMLPPM XWRT+bzip2 XWRT+PPMd XWRT+zip 1 DBPL 0.955 0.694 1.463 0.942 0.926 0.857 0.881 0.732 0.976 NASA 0.879 0.768 1.208 0.831 0.786 0.729 0.731 0.601 0.783 SwissPr 0.608 0.479 0.985 0.466 0.443 0.465 0.474 0.400 0.559 Wyniki za Sz. Grabowski, prywatna komunikacja Sebastian Deorowicz AKD — CTW, Algorytmy specjalizowane cz. 2 CTW Specjalizowane algorytmy kompresji Tematy projektów Kompresja Kompresja Kompresja Kompresja plików XML i baz danych plików wykonywalnych DNA i białek różnicowa i zdalna synchronizacja Kompresja baz danych Czy jest potrzebna? Bazy danych osiągają ogromne rozmiary — wniosek: jest bardzo potrzebna! Uwaga Różne bazy danych przechowywane są w różnych formatach — wniosek: więcej pracy dla informatyków :-) Sebastian Deorowicz AKD — CTW, Algorytmy specjalizowane cz. 2 CTW Specjalizowane algorytmy kompresji Tematy projektów Kompresja Kompresja Kompresja Kompresja plików XML i baz danych plików wykonywalnych DNA i białek różnicowa i zdalna synchronizacja Kompresja baz danych Czy jest potrzebna? Bazy danych osiągają ogromne rozmiary — wniosek: jest bardzo potrzebna! Uwaga Różne bazy danych przechowywane są w różnych formatach — wniosek: więcej pracy dla informatyków :-) Sebastian Deorowicz AKD — CTW, Algorytmy specjalizowane cz. 2 CTW Specjalizowane algorytmy kompresji Tematy projektów Kompresja Kompresja Kompresja Kompresja plików XML i baz danych plików wykonywalnych DNA i białek różnicowa i zdalna synchronizacja Kompresja baz danych Możliwe podejścia Stawiamy na maksymalny współczynnik kompresji — np. przy archiwizacji Stawiamy na dobry współczynnik kompresji przy zachowaniu swobody dostępu do danych — np. dla danych rzadko używanych, ale takich, które jednak muszą być dostępne w miarę szybko Sebastian Deorowicz AKD — CTW, Algorytmy specjalizowane cz. 2 CTW Specjalizowane algorytmy kompresji Tematy projektów Kompresja Kompresja Kompresja Kompresja plików XML i baz danych plików wykonywalnych DNA i białek różnicowa i zdalna synchronizacja Kompresja baz danych — przykładowa tabela Imię Jan Joachim Karolina Zofia Tadeusz Joanna Sonia Stefan Anna Roman Monika Gizela Tadeusz Anna Nazwisko Kowalski Nowak Banach Zielna Żółtko Malinowska Janik Nowakowski Kalinowska Polny Tuszyńska Sroka Tyczka Złotopolska Data ur. 12-04-1968 23-02-1971 05-11-1978 22-04-1972 14-05-1980 30-07-1982 09-08-1975 12-12-1972 28-03-1984 29-10-1976 16-06-1982 25-05-1977 01-06-1974 11-05-1971 Sebastian Deorowicz Wzrost 175 189 162 170 172 175 168 178 171 180 173 165 178 179 Miasto Gliwice Bytom Gliwice Zabrze Skoczów Łódź Mysłowice Radzionków Katowice Zabrze Zabrze Katowice Zabrze Warszawa Płeć M M K K M K K M K M K K M K AKD — CTW, Algorytmy specjalizowane cz. 2 CTW Specjalizowane algorytmy kompresji Tematy projektów Kompresja Kompresja Kompresja Kompresja plików XML i baz danych plików wykonywalnych DNA i białek różnicowa i zdalna synchronizacja Kompresja baz danych Gdzie tu jest redundancja? Dane przechowywane jako zbiory rekordów W każdym rekordzie te same typy pól — tabela ma określoną strukturę Pola niektórych typów, np. liczbowych, daty, mogą być przechowywane w postaci tekstowej Wartości w polach daty kolejnych rekordów często nie różnią się od siebie za bardzo Często istnieją silne korelacje pomiędzy wartościami pól numerycznych w kolejnych rekordach Pola tekstowe często zawierają sporo spacji kończących (pole jest stałej długości) Sebastian Deorowicz AKD — CTW, Algorytmy specjalizowane cz. 2 CTW Specjalizowane algorytmy kompresji Tematy projektów Kompresja Kompresja Kompresja Kompresja plików XML i baz danych plików wykonywalnych DNA i białek różnicowa i zdalna synchronizacja Kompresja baz danych Przykładowa idea Bazę danych przekształcamy z zapisu wierszami na zapis kolumnami — nie mieszają się wtedy pola numeryczne z tekstowymi itp. Daty kodujemy przyrostowo i binarnie a nie tekstowo Pola numeryczne kodujemy binarnie i ew. także przyrostowo Przekształconą tabelę kompresujemy z użyciem jednego ze znanych uniwersalnych algorytmów Można rozbić bazę danych na kilka plików (np. według typów kolumn) i kompresować każdy z plików osobno Sebastian Deorowicz AKD — CTW, Algorytmy specjalizowane cz. 2 CTW Specjalizowane algorytmy kompresji Tematy projektów Kompresja Kompresja Kompresja Kompresja plików XML i baz danych plików wykonywalnych DNA i białek różnicowa i zdalna synchronizacja Plan wykładu 1 CTW 2 Specjalizowane algorytmy kompresji Kompresja plików XML i baz danych Kompresja plików wykonywalnych Kompresja DNA i białek Kompresja różnicowa i zdalna synchronizacja 3 Tematy projektów Sebastian Deorowicz AKD — CTW, Algorytmy specjalizowane cz. 2 CTW Specjalizowane algorytmy kompresji Tematy projektów Kompresja Kompresja Kompresja Kompresja plików XML i baz danych plików wykonywalnych DNA i białek różnicowa i zdalna synchronizacja Kompresja plików wykonywalnych Dwa podejścia 1 Kompresja pliku wykonywalnego w celu archiwizacji 2 Kompresja pliku wykonywalnego do postaci, która da się uruchamiać Sebastian Deorowicz AKD — CTW, Algorytmy specjalizowane cz. 2 CTW Specjalizowane algorytmy kompresji Tematy projektów Kompresja Kompresja Kompresja Kompresja plików XML i baz danych plików wykonywalnych DNA i białek różnicowa i zdalna synchronizacja Kompresja EXE do archiwum Idea Programy wykonywalne mają określoną strukturę Można przeprowadzić deasemblację kodu binarnego w celu lepszej analizy pliku Instrukcje procesora mają przypisane konkretne kody binarne — można próbować to jakoś wykorzystać Sebastian Deorowicz AKD — CTW, Algorytmy specjalizowane cz. 2 CTW Specjalizowane algorytmy kompresji Tematy projektów Kompresja Kompresja Kompresja Kompresja plików XML i baz danych plików wykonywalnych DNA i białek różnicowa i zdalna synchronizacja Kompresja EXE do pliku wykonywalnego Idea Plik wykonywalny składa się z: krótkiego (kilkaset bajtów–kilka kilobajtów) nagłówka, który jest programem dekompresującym w locie skompresowanego oryginalnego pliku wykonywalnego Po uruchomieniu program dekompresujący odtwarza oryginalny program, który jest następnie uruchamiany Dekompresja musi być szybka, ale użytkownik nie odczuwał dyskomfortu Sebastian Deorowicz AKD — CTW, Algorytmy specjalizowane cz. 2 CTW Specjalizowane algorytmy kompresji Tematy projektów Kompresja Kompresja Kompresja Kompresja plików XML i baz danych plików wykonywalnych DNA i białek różnicowa i zdalna synchronizacja Kompresja EXE do pliku wykonywalnego Po co taka kompresja? Mniejsze pliki wykonywalne, które jednak mogą być uruchamiane Czasami uruchomienie takiego pliku jest szybsze niż oryginalnego, jeśli medium, z którego jest on uruchamiany jest wolne, np. dyskietka Można uruchamiać program bez jego dekompresji (sam w locie się dekompresuje) Sebastian Deorowicz AKD — CTW, Algorytmy specjalizowane cz. 2 CTW Specjalizowane algorytmy kompresji Tematy projektów Kompresja Kompresja Kompresja Kompresja plików XML i baz danych plików wykonywalnych DNA i białek różnicowa i zdalna synchronizacja Kompresja EXE do pliku wykonywalnego Jedna z istniejących realizacji UPX (http://upx.sourceforge.net/) — wydajny kompresor oferujący bardzo szybką dekompresję i bardzo dobry współczynnik kompresji Sebastian Deorowicz AKD — CTW, Algorytmy specjalizowane cz. 2 CTW Specjalizowane algorytmy kompresji Tematy projektów Kompresja Kompresja Kompresja Kompresja plików XML i baz danych plików wykonywalnych DNA i białek różnicowa i zdalna synchronizacja Plan wykładu 1 CTW 2 Specjalizowane algorytmy kompresji Kompresja plików XML i baz danych Kompresja plików wykonywalnych Kompresja DNA i białek Kompresja różnicowa i zdalna synchronizacja 3 Tematy projektów Sebastian Deorowicz AKD — CTW, Algorytmy specjalizowane cz. 2 CTW Specjalizowane algorytmy kompresji Tematy projektów Kompresja Kompresja Kompresja Kompresja plików XML i baz danych plików wykonywalnych DNA i białek różnicowa i zdalna synchronizacja Kompresja DNA i białek Po co taka kompresja? Ogromne ilości danych biologicznych Bazy danych biologicznych rosną w bardzo szybkim tempie Sebastian Deorowicz AKD — CTW, Algorytmy specjalizowane cz. 2 CTW Specjalizowane algorytmy kompresji Tematy projektów Kompresja Kompresja Kompresja Kompresja plików XML i baz danych plików wykonywalnych DNA i białek różnicowa i zdalna synchronizacja Kompresja DNA i białek Cechy DNA Alfabet 4-znakowy (zasady): A (adenina), C (cytozyna), G (guanina), T (tymina) Cechy białek Alfabet 20-znakowy (aminokwasy): A (alanina), C (cysteina), D (kwas asparaginowy), E (kwas glutaminowy), F (fenyloalanina), G (glicyna), H (histydyna), I (izoleucyna), K (lizyna), L (leucyna), M (metionina), N (asparagina), P (prolina), Q (glutamina), R (arginina), S (seryna), T (treonina), V (walina), W (tryptofan), Y (tyrozyna) Sebastian Deorowicz AKD — CTW, Algorytmy specjalizowane cz. 2 CTW Specjalizowane algorytmy kompresji Tematy projektów Kompresja Kompresja Kompresja Kompresja plików XML i baz danych plików wykonywalnych DNA i białek różnicowa i zdalna synchronizacja Kompresja DNA i białek Cechy DNA Alfabet 4-znakowy (zasady): A (adenina), C (cytozyna), G (guanina), T (tymina) Cechy białek Alfabet 20-znakowy (aminokwasy): A (alanina), C (cysteina), D (kwas asparaginowy), E (kwas glutaminowy), F (fenyloalanina), G (glicyna), H (histydyna), I (izoleucyna), K (lizyna), L (leucyna), M (metionina), N (asparagina), P (prolina), Q (glutamina), R (arginina), S (seryna), T (treonina), V (walina), W (tryptofan), Y (tyrozyna) Sebastian Deorowicz AKD — CTW, Algorytmy specjalizowane cz. 2 CTW Specjalizowane algorytmy kompresji Tematy projektów Kompresja Kompresja Kompresja Kompresja plików XML i baz danych plików wykonywalnych DNA i białek różnicowa i zdalna synchronizacja Kompresja DNA i białek Struktura DNA i białek Inny typ redundancji niż zakładany przez klasyczne algorytmy Klasyczne algorytmy działają kiepsko Sebastian Deorowicz AKD — CTW, Algorytmy specjalizowane cz. 2 CTW Specjalizowane algorytmy kompresji Tematy projektów Kompresja Kompresja Kompresja Kompresja plików XML i baz danych plików wykonywalnych DNA i białek różnicowa i zdalna synchronizacja Kompresja DNA i białek Redundancja w DNA Łańcuchy DNA zawierają niewiele powtórzeń, ale powtórzenia te są zwykle długie a nawet bardzo długie Powtórzenia często występują w bardzo odległych miejscach (nie ma lokalności jak w tekstach) Zasady A i T oraz C i G tworzą pary Często zdarzają się w łańcuchach powtórzenia odwrócone, w których zasady są zamienione, tj. za A jest T a za C jest G, np. AACTGT–ACAGTT Powtórzenia są długie ale często zawierają drobne błędy (wynik rozmaitych mutacji) Sebastian Deorowicz AKD — CTW, Algorytmy specjalizowane cz. 2 CTW Specjalizowane algorytmy kompresji Tematy projektów Kompresja Kompresja Kompresja Kompresja plików XML i baz danych plików wykonywalnych DNA i białek różnicowa i zdalna synchronizacja Kompresja DNA i białek Istniejące algorytmy BioCompress2 (Grumbach, Tahi, 1994) GenCompress-2 (Chen i in., 2000) DNACompress (Chen i in., 2002) MR2004 (Manzini–Rastero, 2004) — szybkie AN2006 (Adjeroh–Nan, 2006) — nowość Sebastian Deorowicz AKD — CTW, Algorytmy specjalizowane cz. 2 CTW Specjalizowane algorytmy kompresji Tematy projektów Kompresja Kompresja Kompresja Kompresja plików XML i baz danych plików wykonywalnych DNA i białek różnicowa i zdalna synchronizacja Kompresja DNA i białek Czy naprawdę warto? Wyniki dla DNA są na poziomie 1.6–1.9 bita/znak (tylko sporadycznie jest istotnie lepiej) — zważywszy na to, że 4-znakowy alfabet wymaga 2.0 bita/znak bez żadnej kompresji nie jest to osiągnięcie rewelacyjne Wyniki dla białek są na poziomie 2.3–3.4 bita/znak — bez kompresji białka wymagają 4.32 bita/znak Sebastian Deorowicz AKD — CTW, Algorytmy specjalizowane cz. 2 CTW Specjalizowane algorytmy kompresji Tematy projektów Kompresja Kompresja Kompresja Kompresja plików XML i baz danych plików wykonywalnych DNA i białek różnicowa i zdalna synchronizacja Plan wykładu 1 CTW 2 Specjalizowane algorytmy kompresji Kompresja plików XML i baz danych Kompresja plików wykonywalnych Kompresja DNA i białek Kompresja różnicowa i zdalna synchronizacja 3 Tematy projektów Sebastian Deorowicz AKD — CTW, Algorytmy specjalizowane cz. 2 CTW Specjalizowane algorytmy kompresji Tematy projektów Kompresja Kompresja Kompresja Kompresja plików XML i baz danych plików wykonywalnych DNA i białek różnicowa i zdalna synchronizacja Kompresja różnicowa Sytuacja 1 Istnieją różne wersje tego samego pliku, np. na komputerze firmowym wersja aktualna, a na komputerze domowym – starsza Chcemy uaktualnić wersję „domową” do wersji nowej, a prędkość łącza „nie zwala z nóg” Sytuacja 2 Rozprowadzamy uaktualnienie oprogramowania Uaktualnienie polega na podmianie części plików na nowe wersje, które jednak tylko nieznacznie różnią się od wersji poprzednich Chcemy zminimalizować rozmiar uaktualnienia, żeby użytkownicy mogli wygodnie i szybko ściągnąć dane Sebastian Deorowicz AKD — CTW, Algorytmy specjalizowane cz. 2 CTW Specjalizowane algorytmy kompresji Tematy projektów Kompresja Kompresja Kompresja Kompresja plików XML i baz danych plików wykonywalnych DNA i białek różnicowa i zdalna synchronizacja Kompresja różnicowa Sytuacja 1 Istnieją różne wersje tego samego pliku, np. na komputerze firmowym wersja aktualna, a na komputerze domowym – starsza Chcemy uaktualnić wersję „domową” do wersji nowej, a prędkość łącza „nie zwala z nóg” Sytuacja 2 Rozprowadzamy uaktualnienie oprogramowania Uaktualnienie polega na podmianie części plików na nowe wersje, które jednak tylko nieznacznie różnią się od wersji poprzednich Chcemy zminimalizować rozmiar uaktualnienia, żeby użytkownicy mogli wygodnie i szybko ściągnąć dane Sebastian Deorowicz AKD — CTW, Algorytmy specjalizowane cz. 2 CTW Specjalizowane algorytmy kompresji Tematy projektów Kompresja Kompresja Kompresja Kompresja plików XML i baz danych plików wykonywalnych DNA i białek różnicowa i zdalna synchronizacja Kompresja różnicowa Obserwacje Dwie wersje plików różnią się tylko nieznacznie Obie strony dysponują starszą wersją pliku, więc zamiast przesyłać cały plik można przesłać tylko różnice Problem Jak to zrobić? Sebastian Deorowicz AKD — CTW, Algorytmy specjalizowane cz. 2 CTW Specjalizowane algorytmy kompresji Tematy projektów Kompresja Kompresja Kompresja Kompresja plików XML i baz danych plików wykonywalnych DNA i białek różnicowa i zdalna synchronizacja Kompresja różnicowa Obserwacje Dwie wersje plików różnią się tylko nieznacznie Obie strony dysponują starszą wersją pliku, więc zamiast przesyłać cały plik można przesłać tylko różnice Problem Jak to zrobić? Sebastian Deorowicz AKD — CTW, Algorytmy specjalizowane cz. 2 CTW Specjalizowane algorytmy kompresji Tematy projektów Kompresja Kompresja Kompresja Kompresja plików XML i baz danych plików wykonywalnych DNA i białek różnicowa i zdalna synchronizacja Kompresja różnicowa Metoda Do kompresji różnicowej świetnie nadają się algorytmy z rodziny Ziva–Lempela Algorytm kompresji pracuje na dwóch plikach: starym i nowym Kompresowany jest tylko nowy plik w następujący sposób: Dla bieżącej pozycji w nowym pliku wyszukaj najdłuższe powtórzenie zarówno w całym starym pliku jak i w zakodowanym już fragmencie nowego pliku Zakoduj informacje o powtórzeniu Odbiorca (dekompresor) zna stary plik, więc nie będzie miał problemu z odkodowaniem takiej sekwencji Sebastian Deorowicz AKD — CTW, Algorytmy specjalizowane cz. 2 CTW Specjalizowane algorytmy kompresji Tematy projektów Kompresja Kompresja Kompresja Kompresja plików XML i baz danych plików wykonywalnych DNA i białek różnicowa i zdalna synchronizacja Kompresja różnicowa Czy to takie proste? Jeśli pliki są małe to tak Jeśli pliki są duże, to oczywiście w nowym pliku wyszukujemy dopasowania tylko w oknie o rozmiarze np. 32 KB Problemem może być stary plik, bo tam też powinniśmy przesuwać okno — niestety nie jest oczywiste jak je przesuwać Istnieją różne heurystyki przesuwania okna w starym pliku Sebastian Deorowicz AKD — CTW, Algorytmy specjalizowane cz. 2 CTW Specjalizowane algorytmy kompresji Tematy projektów Kompresja Kompresja Kompresja Kompresja plików XML i baz danych plików wykonywalnych DNA i białek różnicowa i zdalna synchronizacja Kompresja różnicowa — wyniki eksperymentalne Algorytmy vcdiff (Hunt i in., 1998) xdelta (MacDonald, 2000) zdelta (Trendafilov i in., 2002) Dane testowe gcc 2.7.0 i gcc 2.7.1 emacs 19.28 i emacs 19.29 Sebastian Deorowicz AKD — CTW, Algorytmy specjalizowane cz. 2 CTW Specjalizowane algorytmy kompresji Tematy projektów Kompresja Kompresja Kompresja Kompresja plików XML i baz danych plików wykonywalnych DNA i białek różnicowa i zdalna synchronizacja Kompresja różnicowa — wyniki eksperymentalne2 Algorytm Bez kompresji gzip zdelta 2 Rozmiar gcc [KB] 27 288 7 479 250 Rozmiar emacs [KB] 27 326 8 191 1 465 Wyniki z K. Sayood, Lossless Compression Handbook, 2003 Sebastian Deorowicz AKD — CTW, Algorytmy specjalizowane cz. 2 CTW Specjalizowane algorytmy kompresji Tematy projektów Kompresja Kompresja Kompresja Kompresja plików XML i baz danych plików wykonywalnych DNA i białek różnicowa i zdalna synchronizacja Zdalna synchronizacja plików Problem Dysponujemy jakąś wersją pliku Serwer dysponuje najnowszą wersją pliku Chcemy uaktualnić naszą wersję pliku do wersji, która znajduje się na serwerze Serwer nie dysponuje naszą wersją pliku, bo samodzielnie ją edytowaliśmy Sebastian Deorowicz AKD — CTW, Algorytmy specjalizowane cz. 2 CTW Specjalizowane algorytmy kompresji Tematy projektów Kompresja Kompresja Kompresja Kompresja plików XML i baz danych plików wykonywalnych DNA i białek różnicowa i zdalna synchronizacja Zdalna synchronizacja plików Obserwacje Duże części naszej wersji pliku i wersji serwera są identyczne Identyczne fragmenty mogą być przesunięte względem siebie (występują w różnych miejscach w plikach) Serwer nie zna naszej wersji pliku Sebastian Deorowicz AKD — CTW, Algorytmy specjalizowane cz. 2 CTW Specjalizowane algorytmy kompresji Tematy projektów Kompresja Kompresja Kompresja Kompresja plików XML i baz danych plików wykonywalnych DNA i białek różnicowa i zdalna synchronizacja Zdalna synchronizacja plików Algorytm 1 Klient dzieli swój plik na bloki rozmiaru rzędu kilkudziesięciu–kilkuset KB 2 Klient dla każdego z bloków oblicza sumę kontrolną 3 Klient wysyła sumy kontrolne do serwera 4 Serwer wyszukuje w swojej wersji pliku takie miejsca, które mają identyczne sumy kontrolne 5 Serwer wysyła informacje o różnicach i nowe fragmenty pliku 6 Klient uaktualnia swoją wersję pliku Sebastian Deorowicz AKD — CTW, Algorytmy specjalizowane cz. 2 CTW Specjalizowane algorytmy kompresji Tematy projektów Kompresja Kompresja Kompresja Kompresja plików XML i baz danych plików wykonywalnych DNA i białek różnicowa i zdalna synchronizacja Zdalna synchronizacja plików — wyniki eksperymentalne3 Algorytm Bez kompresji gzip zdelta rsync (skompresowany) 3 Rozmiar gcc [KB] 27 288 7 479 250 876 Rozmiar emacs [KB] 27 326 8 191 1 465 4 428 Wyniki z K. Sayood, Lossless Compression Handbook, 2003 Sebastian Deorowicz AKD — CTW, Algorytmy specjalizowane cz. 2 CTW Specjalizowane algorytmy kompresji Tematy projektów Kompresja Kompresja Kompresja Kompresja plików XML i baz danych plików wykonywalnych DNA i białek różnicowa i zdalna synchronizacja Kompresja zdalnych sesji graficznych Sytuacja Pracujemy zdalnie na oddalonym komputerze np. za pomocą Podłączania pulpitu zdalnego Łącze jest stosunkowo wolne a chcemy pracować graficznie Jeden ekran komputera w rozdzielczości 1024 × 768 to ok. 2.25MB Wygodna praca wymaga przesyłania kilku takich ekranów na sekundę Kto ma łącze 10MB/s? Sebastian Deorowicz AKD — CTW, Algorytmy specjalizowane cz. 2 CTW Specjalizowane algorytmy kompresji Tematy projektów Kompresja Kompresja Kompresja Kompresja plików XML i baz danych plików wykonywalnych DNA i białek różnicowa i zdalna synchronizacja Kompresja zdalnych sesji graficznych Gdzie tu jest redundancja? Zwykle mało się zmienia na ekranie w krótkim czasie — można przesyłać tylko na początku pełny ekran, a później tylko różnice, np. wynik operacji xor na „kolejnych” ekranach Okna aplikacji zawierają zwykle tylko kilkanaście–kilkadziesiąt różnych kolorów — nie potrzeba przesyłać 24bitów/piksel Sąsiednie piksele bardzo często są identyczne Sebastian Deorowicz AKD — CTW, Algorytmy specjalizowane cz. 2 CTW Specjalizowane algorytmy kompresji Tematy projektów Kompresja Kompresja Kompresja Kompresja plików XML i baz danych plików wykonywalnych DNA i białek różnicowa i zdalna synchronizacja Kompresja zdalnych sesji graficznych Czy to takie proste? Jeśli użytkownik przesuwa okno, to wynik po xor będzie całkiem duży — można jednak każde okno przesyłać niezależnie Pulpit może być skomplikowanym obrazkiem — można pulpit przesłać tylko raz i nakładać na niego przesyłane okna Nawet pierwsze przesłanie pulpitu może długo trwać na wolnym łączu — można zrezygnować z przesyłania pulpitu (może użytkownik się pogodzi z tym dyskomfortem?) Sebastian Deorowicz AKD — CTW, Algorytmy specjalizowane cz. 2 CTW Specjalizowane algorytmy kompresji Tematy projektów Kompresja Kompresja Kompresja Kompresja plików XML i baz danych plików wykonywalnych DNA i białek różnicowa i zdalna synchronizacja Kompresja zdalnych sesji graficznych Co jeszcze można? Często użytkownik będzie na tyle zadowolony, że ma zdalny dostęp, że pewne niedogodności zaakceptuje Przykładowo można ograniczyć paletę kolorów do 256 na zdalnym pulpicie Przesyłane dane można (należy!) dodatkowo kompresować jakimś algorytmem Sebastian Deorowicz AKD — CTW, Algorytmy specjalizowane cz. 2 CTW Specjalizowane algorytmy kompresji Tematy projektów Kompresja Kompresja Kompresja Kompresja plików XML i baz danych plików wykonywalnych DNA i białek różnicowa i zdalna synchronizacja Kompresja specjalizowana Czy to już wszystkie możliwości? Zdecydowanie nie! W zasadzie wszystkie algorytmy kompresji obrazów, dźwięków, sekwencji wideo są algorytmami specjalizowanymi W szczególności specjalizowane muszą być algorytmy kompresji stratnej, ale o tym już na kolejnych wykładach... Sebastian Deorowicz AKD — CTW, Algorytmy specjalizowane cz. 2 CTW Specjalizowane algorytmy kompresji Tematy projektów P1 — Kompresor plików w formacie .dbf (2 osoby) Idea Przeanalizować nagłówek pliku .dbf Kompresja kolumnami a nie wierszami (większe podobieństwa) Różne metody kompresji pól różnych typów: tekstowe — np. LZSS + RangeCoder logiczne — wprost RangeCoder numeryczne — binarnie i ew. RangeCoder (pola numeryczne zapisane znakowo!) daty — binarnie (pola daty zapisane znakowo!) Można zmienić kolejność kolumn Możliwe, że kodowanie różnic pomiędzy polami (np. daty) pomoże Sebastian Deorowicz AKD — CTW, Algorytmy specjalizowane cz. 2 CTW Specjalizowane algorytmy kompresji Tematy projektów P2 — Kompresja pliku w formacie .dbf z zachowaniem dostępu swobodnego do rekordów (2 osoby) Idea Każdy rekord musi być zakodowany niezależnie od pozostałych: oprócz zakodowanych rekordów skompresowane dane winny zawierać, wspólny dla wszystkich rekordów, opis ich charakterystyki (np. słownik dla pól tekstowych) na podstawie którego poszczególne rekordy kodowane są niezależnie, ponieważ rekordy będą miały różne długości, konieczne będzie utworzenie indeksu (tablicy offsetów początków poszczególnych rekordów w pliku) Sebastian Deorowicz AKD — CTW, Algorytmy specjalizowane cz. 2 CTW Specjalizowane algorytmy kompresji Tematy projektów P2 — Kompresja pliku w formacie .dbf z zachowaniem dostępu swobodnego do rekordów (2 osoby) Idea Operacja modyfikacji rekordu może zmienić jego rozmiar (w postaci skompresowanej): w takim przypadku należy umieścić go na końcu pliku, a jego poprzednią lokalizację oznaczyć jako puste miejsce (lub umieścić w wystarczająco dużym pustym miejscu pozostałym po innym rekordzie) — zatem należy przechowywać również indeks/listę pustych miejsc w sposób podobny, jak wyżej, realizujemy usunięcie rekordu zaimplementować operację przebudowy skompresowanego pliku, która polegać będzie na usunięciu pustych miejsc; taka przebudowa powinna być wykonywana na żądanie oraz ewentualnie w sytuacji, gdy puste miejsca zajmują ponad (np.) 10% skompresowanego pliku W danych wspólnych dla wszystkich rekordów konieczna jest okresowa aktualizacja tych danych — można ją przeprowadzać co n dodanych rekordów oraz łącznie z przebudową pliku Sebastian Deorowicz AKD — CTW, Algorytmy specjalizowane cz. 2 CTW Specjalizowane algorytmy kompresji Tematy projektów P3 — Kompresja pliku w formacie .ini z zachowaniem dostępu swobodnego do sekcji i kluczy (1 osoba) Idea Temat bardzo podobny do tematu P2 Sebastian Deorowicz AKD — CTW, Algorytmy specjalizowane cz. 2 CTW Specjalizowane algorytmy kompresji Tematy projektów P4 — Klasa skompresowanego stringa (1 lub 2 osoby) Wymagania Opracować klasę packedstring funkcjonalnie odpowiadającą klasie string z biblioteki standardowej języka C++, ale potrafiącą wewnętrznie przechowywać łańcuch w postaci skompresowanej. Klasa packedstring przeznaczona jest do zastosowania tam, gdzie prawie wszystkie operacje na łańcuchach to operacja przypisania i operacje we/wy realizowane na całym łańcuchu oraz dopisywanie na końcu łańcucha innego łańcucha lub pojedynczego znaku. Można przyjąć, że typowy rozmiar łańcucha jest odpowiednio duży (kilkaset znaków). Sebastian Deorowicz AKD — CTW, Algorytmy specjalizowane cz. 2 CTW Specjalizowane algorytmy kompresji Tematy projektów P4 — Klasa skompresowanego stringa (1 lub 2 osoby) Idea Rozwiązanie można zrealizować w oparciu o kodowanie słownikowe LZSS (ewentualnie LZSS + koder arytmetyczny ze stałym modelem) Przy dopisaniu, na końcu łańcucha, nowego znaku lub łańcucha, kompresja będzie efektywniejsza, jeżeli „cofniemy się” do początku ostatnio zakodowanej frazy i spróbujemy czy teraz nie znajdzie się dłuższa fraza (można również „koniec łańcucha” kodować z opóźnieniem) Poniżej pewnej granicznej długości łańcucha kompresja jest nieefektywna, więc klasa packedstring winna krótkie łańcuchy przechowywać nie skompresowane klasa powinna obsługiwać również pozostałe typowe operacje na łańcuchach (w tym np. swobodne indeksowanie znaków łańcucha, metodę c str(), itp.) — niektóre takie operacje wymagać będą przejścia na nie skompresowaną reprezentację łańcucha i pozostawienia łańcucha w takiej postaci (np. spakowany napis[20]=’a’); klasa powinna mieć metodę wymuszenia wewnętrznej reprezentacji skompresowanej lub nie Sebastian Deorowicz AKD — CTW, Algorytmy specjalizowane cz. 2 CTW Specjalizowane algorytmy kompresji Tematy projektów P5 — Klasa C++ reprezentująca archiwum ZIP (2 osoby) Idea Standard formatu ZIP dopuszcza dwa algorytmy kompresji, które są implementowane za pomocą poznanych bibliotek: zlib oraz libbzip2 (patrz pierwsze laboratorium) Tematem projektu jest wykorzystanie obu tych bibliotek do stworzenia klasy języka C++ reprezentującej archiwum ZIP Sebastian Deorowicz AKD — CTW, Algorytmy specjalizowane cz. 2 CTW Specjalizowane algorytmy kompresji Tematy projektów P5 — Klasa C++ reprezentująca archiwum ZIP (2 osoby) Wymagania Wymagane metody: Create — utworzenie pustego archiwum Open — otwarcie archiwum Close — zamknięcie archiwum ListContents — zwrócenie listy plików (do listy) GetHeader — zwrócenie nagłówka konkretnego pliku z archiwum AddFile — dodanie pliku do archiwum z kompresją (tu się ustala parametry kompresji) AddFileRaw — dodanie do archiwum pliku skompresowanego (przydaje się kiedy trzeba przenosić plik z archiwum do archiwum — np. przy wyrzucaniu niektórych plików, bądź zastępowaniu nową wersją) GetFile — dekompresja pliku z archiwum GetFileRaw — zwrócenie z archiwum pliku skompresowanego Klasa powinna także umożliwiać podpięcie przez użytkownika własnego paska postępu (np. poprzez odziedziczenie po jakiejś klasie bazowej) i własnej obsługi błędów Sebastian Deorowicz AKD — CTW, Algorytmy specjalizowane cz. 2 CTW Specjalizowane algorytmy kompresji Tematy projektów P6 — Klasa C++ reprezentująca automat przechowujący leksykon (2 osoby) Wymagania Źródła automatu reprezentującego leksykon są dostępne na stronie http://www-zo.iinf.polsl.gliwice.pl/~sdeor/pub/cd00abs.htm Należy te źródła przerobić na C++ i dodać funkcjonalność zapisu automatu na dysk w postaci jeszcze bardziej skompresowanej (możliwy jest stopień kompresji 2:1 a nawet trochę więcej) Do kompresji należy wykorzystać RangeCoder Struktura wewnętrzna automatu Automat przechowywany jest wewnętrznie w postaci tablicy Tablica ta zawiera w kolejnych komórkach krawędzie Kilka (od 1 do kilkudziesięciu) kolejnych krawędzi opisuje jeden węzeł Każdy węzeł kończy się krawędzią, która ma ustawiony bit (znacznik) Sebastian Deorowicz AKD — CTW, Algorytmy specjalizowane cz. 2 CTW Specjalizowane algorytmy kompresji Tematy projektów P6 — Klasa C++ reprezentująca automat przechowujący leksykon (2 osoby) Idea Znaczniki końca węzła są ustawione w większości krawędzi na 0, a tylko w tych kończących węzeł na 1 Znaczniki terminalności rzadziej są ustawione na 0 niż na 1 Krawędzie w węźle ułożone są w porządku alfabetycznym (w wersji podstawowej automatu), tj. kontekstem symbolu może być poprzedni symbol Adresy zawsze wskazują na niższe pozycje w tablicy Adres jest potencjalnie liczbą z zakresu [0, 222 − 1], więc należy go efektywnie kodować Sebastian Deorowicz AKD — CTW, Algorytmy specjalizowane cz. 2 CTW Specjalizowane algorytmy kompresji Tematy projektów P7 — Porównanie kilku implementacji kodowania arytmetycznego (1 lub 2* osoby) Wymagania Przeprowadzić porównanie kilku publicznie dostępnych implementacji algorytmu kodowania arytmetycznego, porównywane implementacje ocenić pod względem: uzyskiwanych współczynników kompresji: dla rzeczywistych danych (np. korpusu Calgary) i prostego modelu danych (np. adaptacyjnego probabilistycznego modelu 1 rzędu, własnego lub gotowego); należy porównać wyniki pomiędzy różnymi implementacjami oraz porównać je z efektywnością idealnego kodera arytmetycznego (mierzoną dla użytego modelu danych tak, jak na ćwiczeniu 2) (*) oraz dla danych wygenerowanych przez kilka samodzielnie zaimplementowanych modeli źródeł o znanych entropiach prędkości kodowania i dekodowania (w miarę możliwości prędkości wyznaczyć dla kodowania, a nie kodowania i modelowania; można to zrealizować mierząc czasy (a) modelowania i kodowania oraz (b) tylko modelowania), łatwości użycia i jakości dokumentacji Sebastian Deorowicz AKD — CTW, Algorytmy specjalizowane cz. 2 CTW Specjalizowane algorytmy kompresji Tematy projektów P8 — Porównanie algorytmów LZSS i LZW w zastosowaniu do kompresji dysku (1 osoba) Wymagania Przeprowadzić porównanie algorytmów LZSS i LZW (lub odmiany LZW-AP, tj. takiej, w której po zakodowaniu nowej frazy, do słownika wstawiamy nie tylko poprzednią frazę z dopisanym pierwszym znakiem nowej, ale też frazy złożone z poprzedniej frazy i wszystkich pref. nowej) Algorytmy testujemy w zastosowaniu do kompresji dysku (tj. tak, aby zachowana była możliwość częściowo swobodnego odczytu zakodowanych danych), co realizujemy następująco: skompresowane dane zapisujemy w „klastrach” o rozmiarze np. 4KB każdy, przy czym każdy klaster może zostać odkodowany niezależnie od pozostałych — dla nas oznacza to, iż każdorazowo gdy rozmiar zakodowanych danych osiąga granicę klastra reinicjalizujemy słownik i kolejne dane kodujemy niezależnie od poprzednich aby dostęp był faktycznie swobodny, do zakodowanych danych powinniśmy dołączyć mapę/indeks z informacją jakim offsetom nieskompresowanego pliku odpowiadają początki kolejnych klastrów Sebastian Deorowicz AKD — CTW, Algorytmy specjalizowane cz. 2 CTW Specjalizowane algorytmy kompresji Tematy projektów P9 — Algorytm kompresji oparty na transformacie Burrowsa–Wheelera (2 osoby) Wymagania Zaimplementować algorytm kompresji oparty na transformacie Burrowsa–Wheelera. Algorytm powinien składać się z następujących etapów: transformata Burrowsa–Wheelera — dowolna implementacja algorytmu sortowania, może być nawet qsort z języka C; trzeba tylko pamiętać aby nie przechowywać całej macierzy a tylko indeksy pozycji startowych transformata MTF — w zupełności wystarcza tu naiwna implementacja, tj. utrzymujemy posortowaną tablicę i wyszukujemy symbol zawsze od początku, po czym przesuwamy go w tej tablicy na początek RangeCoder — sposób modelowania można wybrać dowolny: jeden z omówionych na wykładzie bądź dowolny własny Otrzymany algorytm przetestować dla korpusu Calgary i porównać uzyskiwane współczynniki kompresji a także czas przynajmniej z bzip2 oraz gzip Sebastian Deorowicz AKD — CTW, Algorytmy specjalizowane cz. 2 CTW Specjalizowane algorytmy kompresji Tematy projektów P10 — Algorytm kompresji różnicowej (2 osoby) Wymagania Opracować i zaimplementować algorytm kompresji różnicowej oparty na algorytmie LZSS Problem przesuwania okna w starej wersji pliku można rozwiązać na kilka sposobów: założyć, że najdłuższe znalezione dopasowania dla bieżącej pozycji w plikach starym i nowym wyznaczają „punkt synchronizacji” wyszukiwać w całym starym pliku — wtedy trzeba odpowiednio zmodyfikować zapis dopasowania, aby były obsługiwane duże wartości. Pierwszy symbol trójek/par z algorytmu LZSS powinien mieć tu 3 wartości: brak dopasowania, dopasowanie w nowym pliku, dopasowanie w starym pliku. Opisy dopasowania w starym i nowym pliku mogą być kodowane w osobnych kontekstach dla poprawy współczynnika kompresji Przetestować program na kolejnych wersjach kilku (może być 2) dużych plików. Porównać współczynniki kompresji z osiąganymi przez algorytmy uniwersalne Sebastian Deorowicz AKD — CTW, Algorytmy specjalizowane cz. 2 CTW Specjalizowane algorytmy kompresji Tematy projektów P11 — Kompresja plików XML (2 osoby) Wymagania Opracować i zaimplementować algorytm kompresji plików XML oparty na preprocesingu. Należy wykorzystać omówione na wykładzie przykłady redundancji w tych plikach Przetestować program na kilku plikach XML i porównać go z innymi znanymi algorytmami specjalizowanymi oraz z algorytmami uniwersalnymi Sebastian Deorowicz AKD — CTW, Algorytmy specjalizowane cz. 2