Kodowanie i kompresja
Transkrypt
Kodowanie i kompresja
Wieczorowe Studia Licencjackie Wrocław, 24.04.2007 Kodowanie i kompresja Tematy prac „praktycznych” Wynikiem projektu ma być raport opisujący: - algorytmy, które były tematem projektu i zastosowane sposoby ich implementacji; - pracę implementacyjną, wraz z informacją o wykorzystanych gotowych pakietach/funkcjach itp., własnym wkładzie, problemach implementacyjnych i ich rozwiązaniach, ... - dobór danych testowych, uzasadnienie tego doboru, źródła tych danych; - opis przeprowadzonych eksperymentów, wyniki i wnioski z nich! Do raportu dołączyć należy (w wersji elektronicznej) napisane/wykorzystane programy i dane testowe. W ramach testów, eksperymentów i wniosków należy m.in. (w zależności od wybranego tematu): - porównać czas działania kodowania/dekodowania dla analizowanych algorytmów, ich wariantów i różnych implementacji; - porównać uzyskany stopień kompresji: o przez różne algorytmy bądź ich warianty (analizowane w ramach wybranego tematu) o na różnych typach danych (spośród opisanych poniżej typów A-J) – należy samemu wybrać, na jakich typach danych programy będą testowane (i uzasadnić wybór!). - przedstawić wnioski z przeprowadzonych porównań; - w przypadku tematów dotyczących metod, które nie były omawiana na wykładzie (tematy 8 i 10): podstawą jest część opisowa i prezentacja metod, własne implementacje są opcjonalne. Wybór tematu Każdy temat może zostać wybrany przez co najwyżej dwie osoby. Tematy 1. Kodowanie Huffmana a entropia. a) standardowe kody Huffmana b) rozszerzone kody Huffmana: prawdopodobieństwo ciągów jako iloczyn prawdopodobieństw poszczególnych symboli (tak jak na wykładzie) kontra prawdopodobieństwo ciągów na podstawie tekstu, c) kody rozszerzone: efektywność (porównać czas, kompresje i pamięć ze standardowym kodem Huffmana) 2. Dynamiczny Huffman a) Implementacja, b) porównanie czasu działania ze statycznym kodem Hoffmana, c) porównanie stopnia kompresji ze statycznym (na różnie dobranych danych). 3. Kodowanie arytmetyczne 4. 5. 6. 7. 8. 9. a) implementacja z przeskalowaniem lub implementacja całkowitoliczbowa (p. literatura) b) kodowanie dynamiczne z kontekstem i wpływ kontekstu na kompresję (w kodowaniu z kontekstem, prawdopodobieństwo zależy od symboli poprzedzających, tak jak w ppm) c) ppm i ppm z zasadą wyłączania. LZ77 i LZSS: warianty i efektywne(!) implementacje. LZ78, LZW: implementacje, warianty (z zastosowaniem trie). Kodowanie gramatykowe: implementacje, warianty (Sequitur, Sequential). Metody dedykowane dla konkretnych typów danych i in.: kompresory plików exe, dokumentów xml, kompresja w unicode, itp. (temat głównie teoretyczny). Burrows-Wheeler: implementacja dla jak największego rozmiaru bloku; wpływ rozmiaru bloku na kompresję, implementacja w czasie O(n log n). Kwantyzacja skalarna i wektorowa Algorytm LBG dla różnych długości wektora (w tym jeden – wówczas kwantyzacja skalarna) - porównanie stopnia kompresji, jakości i czasu działania). Porównanie LBG dla jednego wymiaru z kwantyzacją równomierną. Typy danych: A. Dane losowe (ciąg wartości niezależnych) o zadanym rozkładzie. B. Obrazy w postaci map bitowych. C. Obrazy czarno-białe (mapy bitowe) D. Tekst (w języku naturalnym, kod źródłowy programów, strony html, …) E. dane meteorologiczne (np. temperatury z jakiegoś okresu we Wrocławiu, w ustalonych niewielkich odstępach czasowych) F. sekwencje DNA G. dane finansowe (np. ceny akcji w jakimś okresie) H. pliki wykonywalne I. książki telefoniczne i inne dane o charakterze „bazy danych” Termin realizacji 4 tygodnie. Nie będzie zajęć typu ćwiczeniowego w terminach podanych na stronie wykładu (ale obecność na zajęciach jest wymagana). Na zajęciach w terminie podanym na stronie wykładu odbędą się prezentacje projektów (ok. 10-15 minut na jeden projekt).