CTW, Algorytmy specjalizowane cz. 2

Podobne dokumenty
Tematy projektów Algorytmy Kompresji Danych (2006)

CTW, Algorytmy specjalizowane cz. 2

AKD Metody słownikowe

Kompresja Kodowanie arytmetyczne. Dariusz Sobczuk

Temat: Algorytm kompresji plików metodą Huffmana

Przetwarzanie i transmisja danych multimedialnych. Wykład 5 Kodowanie słownikowe. Przemysław Sękalski.

Kodowanie predykcyjne

Ćwiczenie nr 4: Kodowanie arytmetyczne, range coder

ECDL/ICDL Użytkowanie baz danych Moduł S1 Sylabus - wersja 6.0

wykład Organizacja plików Opracował: dr inż. Janusz DUDCZYK

ECDL/ICDL Użytkowanie baz danych Moduł S1 Sylabus - wersja 5.0

Wprowadzenie. Algorytmy kompresji danych. Sebastian Deorowicz. Politechnika Śląska. Sebastian Deorowicz (PŚl) Wprowadzenie / 60

ZESPÓŁ LABORATORIÓW TELEMATYKI TRANSPORTU ZAKŁAD TELEKOMUNIKACJI W TRANSPORCIE WYDZIAŁ TRANSPORTU POLITECHNIKI WARSZAWSKIEJ

Instrukcja użytkownika

Entropia Kodowanie. Podstawy kompresji. Algorytmy kompresji danych. Sebastian Deorowicz

Generatory pomocy multimedialnych

Podstawowe pojęcia. Teoria informacji

Krzysztof Kadowski. PL-E3579, PL-EA0312,

Kodowanie i kompresja Streszczenie Studia dzienne Wykład 9,

Arytmetyka komputera. Na podstawie podręcznika Urządzenia techniki komputerowej Tomasza Marciniuka. Opracował: Kamil Kowalski klasa III TI

Kodowanie Huffmana. Platforma programistyczna.net; materiały do laboratorium 2014/15 Marcin Wilczewski

Krzysztof Leszczyński Adam Sosnowski Michał Winiarski. Projekt UCYF

Bazy danych. Plan wykładu. Model logiczny i fizyczny. Operacje na pliku. Dyski. Mechanizmy składowania

System plików przykłady. implementacji

WPROWADZENIE DO BAZ DANYCH

Algorytmy i. Wykład 5: Drzewa. Dr inż. Paweł Kasprowski

Architektura komputerów

Wykonawca systemu: Dr inż. Andrzej Łysko

Data Mining Wykład 9. Analiza skupień (grupowanie) Grupowanie hierarchiczne O-Cluster. Plan wykładu. Sformułowanie problemu

< K (2) = ( Adams, John ), P (2) = adres bloku 2 > < K (1) = ( Aaron, Ed ), P (1) = adres bloku 1 >

Kompresja sekwencji obrazów - algorytm MPEG-2

Bioinformatyka. Ocena wiarygodności dopasowania sekwencji.

mgr inż. Grzegorz Kraszewski SYSTEMY MULTIMEDIALNE wykład 4, strona 1. GOLOMBA I RICE'A

Formaty kompresji audio

System plików przykłady implementacji

XQTav - reprezentacja diagramów przepływu prac w formacie SCUFL przy pomocy XQuery

Kompresja danych kodowanie Huffmana. Dariusz Sobczuk

Pokaz slajdów na stronie internetowej

dr inż. Jarosław Forenc

Kodowanie informacji

Def. Kod jednoznacznie definiowalny Def. Kod przedrostkowy Def. Kod optymalny. Przykłady kodów. Kody optymalne

Program EWIDENCJA ODZIEŻY ROBOCZEJ INSTRUKCJA UŻYTKOWNIKA Przejdź do strony producenta programu

Program EWIDENCJA ODZIEŻY ROBOCZEJ INSTRUKCJA UŻYTKOWNIKA Przejdź do strony producenta programu

Cyfrowe przetwarzanie i kompresja danych. dr inż.. Wojciech Zając

Podstawy Informatyki. Metody dostępu do danych

Zadanie projektowe nr 1

Programowanie Strukturalne i Obiektowe Słownik podstawowych pojęć 1 z 5 Opracował Jan T. Biernat

dr inż. Jarosław Forenc

Moduł 2 Użytkowanie komputerów i zarządzanie plikami wymaga od kandydata znajomości obsługi komputera osobistego.

Instrukcja obsługi archiwów zabezpieczonych hasłem. ( na przykładzie oprogramowania 7-Zip )

Kodowanie predykcyjne

Kompresja sekwencji obrazów

Haszowanie (adresowanie rozpraszające, mieszające)

Algorytmy sztucznej inteligencji

Systemy baz danych. mgr inż. Sylwia Glińska

3. Opracować program kodowania/dekodowania pliku tekstowego. Algorytm kodowania:

Złożoność obliczeniowa zadania, zestaw 2

Dla człowieka naturalnym sposobem liczenia jest korzystanie z systemu dziesiętnego, dla komputera natomiast korzystanie z zapisu dwójkowego

Założenia i obszar zastosowań. JPEG - algorytm kodowania obrazu. Geneza algorytmu KOMPRESJA OBRAZÓW STATYCZNYCH - ALGORYTM JPEG

2017/2018 WGGiOS AGH. LibreOffice Base

PLAN REALIZACJI MATERIAŁU NAUCZANIA Z INFORMATYKI II. Uczeń umie: Świadomie stosować się do zasad regulaminów (P).

MS Excel 2007 Kurs zaawansowany Obsługa baz danych. prowadzi: Dr inż. Tomasz Bartuś. Kraków:

EXSO-CORE - specyfikacja

Generatory pomocy multimedialnych

Nazwa wariantu modułu (opcjonalnie): Laboratorium programowania w języku C++

1. Pliki i ich organizacja

Kody Tunstalla. Kodowanie arytmetyczne

Porównanie systemów zarządzania relacyjnymi bazami danych

WPROWADZANIE ZLECEŃ POPRZEZ STRONĘ INSTRUKCJA UŻYTKOWNIKA

Maciej Piotr Jankowski

Wymagania Uczeń zna zasady bezpiecznej pracy z komputerem. Uczeń stosuje się do regulaminu szkolnej pracowni komputerowej.

Plan nauczania informatyki Opracował: mgr Daniel Starego

sprowadza się od razu kilka stron!

Technologia informacyjna

ZAGADNIENIA DO ZALICZENIA

Wymagania Uczeń zna zasady bezpiecznej pracy z komputerem. Uczeń stosuje się do regulaminu szkolnej pracowni komputerowej.

Bazy danych Karta pracy 1

FARA INTENCJE ONLINE. Przewodnik dla użytkownika programu FARA. Włodzimierz Kessler SIGNUM-NET

Wprowadzenie do programowania w języku Visual Basic. Podstawowe instrukcje języka

Baltie 3. Podręcznik do nauki programowania dla klas I III gimnazjum. Tadeusz Sołtys, Bohumír Soukup

Wykonawca systemu: Dr inż. Andrzej Łysko

System plików warstwa fizyczna

System plików warstwa fizyczna

System plików warstwa fizyczna

Wiadomości. Instrukcja użytkownika systemu bankowości internetowej dla firm. BOŚBank24 iboss

Polcode Code Contest PHP-10.09

Tadeusz Pankowski

LZ77 LZ78. Kompresja danych. Tomasz Jurdziński. Wykład 5: kodowanie słownikowe

Informatyka I. Typy danych. Operacje arytmetyczne. Konwersje typów. Zmienne. Wczytywanie danych z klawiatury. dr hab. inż. Andrzej Czerepicki

Wskaźniki a tablice Wskaźniki i tablice są ze sobą w języku C++ ściśle związane. Aby się o tym przekonać wykonajmy cwiczenie.

Załącznik nr 2 do Umowy Nr. o korzystanie z usługi Identyfikacji Przychodzących Płatności Masowych z dnia.

Pojęcie systemu informacyjnego i informatycznego

Bioinformatyka Laboratorium, 30h. Michał Bereta

Wnioski i dyspozycje elektroniczne. Instrukcja użytkownika systemu bankowości internetowej dla firm. BOŚBank24 iboss

Budowa i oprogramowanie komputerowych systemów sterowania. Laboratorium 4. Metody wymiany danych w systemach automatyki DDE

Hurtownie danych wykład 5

Instrukcja obsługi Zaplecza epk w zakresie zarządzania tłumaczeniami opisów procedur, publikacji oraz poradników przedsiębiorcy

KATEGORIA OBSZAR WIEDZY

INSTRUKCJA OBSŁUGI PROGRAMU PRZEDSZKOLE (CZ.1)

Konfiguracja parametrów pozycjonowania GPS /5

Transkrypt:

CTW, Algorytmy specjalizowane cz. 2 Algorytmy kompresji danych Sebastian Deorowicz 2007 04 24

Plan wykładu CTW 1 CTW 2 3

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

Frans M. J. Willems Internet: http://userver.ftw.at/~jossy/photos/ 0303_NewJersey/dscn5794.jpg Ważne daty 1993 Współtwórca algorytmu CTW

PPM a CTW 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

PPM a CTW 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

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

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

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

Plan wykładu CTW 1 CTW 2 3

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

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>

Kompresja XML CTW 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

Kompresja XML CTW 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

Kompresja XML CTW 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)

Kompresja XML przykładowe dane Plik Rozmiar [MB] Elementy Atrybuty Max. głęb. DBPL 127.7 3 332 130 404 276 6 NASA 2.1 48 001 1 3 SwissPr 109.5 2 977 031 2 189 859 5 Pliki DBPL dane bibliograficzne o pracach naukowych NASA dane astronomiczne SwissPr dane o strukturach białkowych

Kompresja XML przykładowe wyniki (w bpc) 1 Algorytm DBPL NASA SwissPr bzip2 0.955 0.879 0.608 PPMd 0.694 0.768 0.479 zip 1.463 1.208 0.985 XMill+bzip2 0.942 0.831 0.466 XMill+PPMd 0.926 0.786 0.443 XMLPPM 0.857 0.729 0.465 XWRT+bzip2 0.881 0.731 0.474 XWRT+PPMd 0.732 0.601 0.400 XWRT+zip 0.976 0.783 0.559 1 Wyniki za Sz. Grabowski, prywatna komunikacja

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 :-)

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 :-)

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

Kompresja baz danych przykładowa tabela Imię Nazwisko Data ur. Wzrost Miasto Płeć Jan Kowalski 12-04-1968 175 Gliwice M Joachim Nowak 23-02-1971 189 Bytom M Karolina Banach 05-11-1978 162 Gliwice K Zofia Zielna 22-04-1972 170 Zabrze K Tadeusz Żółtko 14-05-1980 172 Skoczów M Joanna Malinowska 30-07-1982 175 Łódź K Sonia Janik 09-08-1975 168 Mysłowice K Stefan Nowakowski 12-12-1972 178 Radzionków M Anna Kalinowska 28-03-1984 171 Katowice K Roman Polny 29-10-1976 180 Zabrze M Monika Tuszyńska 16-06-1982 173 Zabrze K Gizela Sroka 25-05-1977 165 Katowice K Tadeusz Tyczka 01-06-1974 178 Zabrze M Anna Złotopolska 11-05-1971 179 Warszawa K

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)

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

Plan wykładu CTW 1 CTW 2 3

Dwa podejścia 1 Kompresja pliku wykonywalnego w celu archiwizacji 2 Kompresja pliku wykonywalnego do postaci, która da się uruchamiać

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ć

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

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)

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

Plan wykładu CTW 1 CTW 2 3

Po co taka kompresja? Ogromne ilości danych biologicznych Bazy danych biologicznych rosną w bardzo szybkim tempie

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)

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)

Struktura DNA i białek Inny typ redundancji niż zakładany przez klasyczne algorytmy Klasyczne algorytmy działają kiepsko

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)

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ść

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

Plan wykładu CTW 1 CTW 2 3

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

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

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ć?

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ć?

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

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

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

Kompresja różnicowa wyniki eksperymentalne 2 Algorytm Rozmiar gcc [KB] Rozmiar emacs [KB] Bez kompresji 27 288 27 326 gzip 7 479 8 191 zdelta 250 1 465 2 Wyniki z K. Sayood, Lossless Compression Handbook, 2003

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

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

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

Zdalna synchronizacja plików wyniki eksperymentalne 3 Algorytm Rozmiar gcc [KB] Rozmiar emacs [KB] Bez kompresji 27 288 27 326 gzip 7 479 8 191 zdelta 250 1 465 rsync (skompresowany) 876 4 428 3 Wyniki z K. Sayood, Lossless Compression Handbook, 2003

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?

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

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?)

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

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...

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

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)

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

P3 Kompresja pliku w formacie.ini z zachowaniem dostępu swobodnego do sekcji i kluczy (1 osoba) Idea Temat bardzo podobny do tematu P2

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).

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

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

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

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)

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, 2 22 1], więc należy go efektywnie kodować

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

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

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

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

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