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