Teoria informacji/TI Ćwiczenia 5: Różnice pomiędzy wersjami
Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
Nie podano opisu zmian |
Nie podano opisu zmian |
||
Linia 50: | Linia 50: | ||
==== Treść ==== | ==== Treść ==== | ||
Dane wejściowe mają postać ciągu <math>\{a_i\}_1^n</math> | Dane wejściowe mają postać ciągu <math>\{a_i\}_1^n</math> symboli nad alfabetem <math>A = A_0 \cup A_1 \cup A_2 = \{spacja\} \cup \{'a',...,'z'\} \cup \{'0',...,'9'\}</math>. Kolejne znaki tego ciągu są generowane losowo z następującego rozkładu prawdopodobieństwa: | ||
* symbol <math>a_1</math> jest generowany z rozkładu <math>(\mu_1+\mu_2)/2</math>, | * symbol <math>a_1</math> jest generowany z rozkładu <math>(\mu_1+\mu_2)/2</math>, | ||
* jeśli <math>a_n \in A_0</math> , to <math>a_{n+1}</math> jest generowany z rozkładu <math>(\mu_1+\mu_2)/2</math>, | * jeśli <math>a_n \in A_0</math> , to <math>a_{n+1}</math> jest generowany z rozkładu <math>(\mu_1+\mu_2)/2</math>, | ||
Linia 56: | Linia 56: | ||
* jeśli <math>a_n \in A_2</math> , to <math>a_{n+1}</math> jest generowany z rozkładu <math>(\mu_0+\mu_2)/2</math>, | * jeśli <math>a_n \in A_2</math> , to <math>a_{n+1}</math> jest generowany z rozkładu <math>(\mu_0+\mu_2)/2</math>, | ||
gdzie: | gdzie: | ||
* <math>\ | * <math>\mu_0</math> to rozkład jednopunktowy na zbiorze <math>A_0</math> , | ||
* <math>\mu_1</math> to pewien ustalony rozkład prawdopodobieństwa na zbiorze <math>A_1</math> , | * <math>\mu_1</math> to pewien ustalony rozkład prawdopodobieństwa na zbiorze <math>A_1</math> , | ||
* <math>\mu_2</math> to pewien ustalony rozkład prawdopodobieństwa na zbiorze <math>A_2</math> . | * <math>\mu_2</math> to pewien ustalony rozkład prawdopodobieństwa na zbiorze <math>A_2</math> . | ||
Linia 62: | Linia 62: | ||
==== Polecenie ==== | ==== Polecenie ==== | ||
# Opracuj możliwie najskuteczniejszą metodę kompresji danych o powyższej charakterystyce, opartą na kodowaniu Huffmana. | # Opracuj możliwie najskuteczniejszą metodę kompresji danych o powyższej charakterystyce, opartą na kodowaniu Huffmana. Zaimplementuj ją. | ||
# Oszacuj teoretycznie ile średnio bitów <math>L</math> pliku skompresowanego będzie przypadało na jeden symbol pliku wejściowego. Przyjmij, że znana jest entropia rozkładów <math>\mu_1</math> i <math>\mu_2</math> . | |||
# Wykonaj eksperymenty, aby sprawdzić swoje przewidywania. Wygeneruj kilka ciągów o podanej wyżej charakterystyce, dla różnych wyborów rozkładów <math>\mu_1</math> i <math>\mu_2</math> , skompresuj je Twoją metodą i porównaj rozmiary plików wejściowych i wynikowych. | |||
# Oszacuj teoretycznie wartość <math>L</math> dla zwykłej kompresji Huffmana zastosowanej do danych o podanej charakterystyce. Czy Twój algorytm osiąga lepszą kompresję? | |||
# Jaka dodatkowa informacja musiałaby być zapisana w skompresowanym pliku, aby umożliwić jego dekompresję? Oszacuj jej rozmiar. |
Wersja z 17:06, 30 lip 2006
Laboratorium
Zadanie 1
Treść
Rozważmy trzy warianty kompresji pliku tekstowego, które wykorzystują korelację między sąsiednimi symbolami do osiągnięcia większego stopnia kompresji:
- Kodowanie Huffmana zastosowane do bloków 2 symboli.
- Kodowanie kolejnego symbolu pliku, , za pomocą kodu Huffmana, który zależy od symbolu poprzedniego, .
W algorytmie tym, dla każdego symbolu występującego w pliku, obliczany jest warunkowy rozkład prawdopodobieństwa następnego symbolu, , pod warunkiem : . Dla takiego rozkładu symboli (przy ustalonym ) obliczany jest kod Huffmana . Kody są generowane dla wszystkich symboli .
Symbole pliku są kodowane kolejno, od pierwszego do ostatniego, przy czym symbol kodowany jest za pomocą kodu . Tak zakodowana wiadomość jest możliwa do odkodowania, ponieważ w chwili dekodowania symbol jest już znany. - Kodowanie analogiczne do (2), jednak przebiegające od końca pliku do początku, zatem korzystające z kodu do zakodowania . W tym przypadku jest kodem wygenerowanym dla rozkładu symboli poprzedzających ustalony symbol .
Polecenie
- Porównaj warianty (1) i (2) oraz (2) i (3) pod względem osiąganego stopnia kompresji:
- Który z wariantów pozwoli uzyskać większy stopień kompresji? Czy zależy to od charakterystyki danych wejściowych? Jeśli to możliwe, podaj ścisły dowód.
- Czy fakt, że znaki w pliku tekstowym są zapisane w "naturalnej" kolejności, czyli w takiej, w jakiej są odczytywane przez człowieka, pozwala na uzyskanie większego stopnia kompresji za pomocą metody (2) niż (3)?
- Oprócz wariantów (1)-(3) rozważ też sytuację, gdy zamiast kodu Huffmana stosowany jest kod, którego średnia długość jest dokładnie równa entropii odpowiedniego rozkładu (dla zainteresowanych: kodowanie arytmetyczne jest metodą, która w pewnym sensie pozwala osiągnąć średnią długość kodu równą entropii; zob. arithmetic coding).
- Jaka jest złożoność pamięciowa i czasowa metod (1)-(3)?
- Napisz programy kompresuj1, kompresuj2 i kompresuj3, implementujące algorytmy (1)-(3). Wykonaj eksperymenty, które potwierdzą poprawność Twoich odpowiedzi na powyższe pytania.
Wskazówki
Wskazówka I:
Wskazówka II:
Rozwiązanie
Rozwiązanie zadania powinno zawierać:
- wykonywalne programy,
- kody źródłowe programów,
- dane wejściowe wykorzystane do eksperymentów,
- raport zawierający:
- odpowiedzi na pytania, być może z dowodami,
- opis wykonanych eksperymentów i wykorzystanych danych wejściowych,
- interpretację wyników eksperymentów.
Pliki źródłowe i raport należy podpisać imieniem i nazwiskiem autora.
Ocenie podlegać będzie: poprawność i ścisłość rozumowania, poprawność implementacji, umiejętność zaplanowania eksperymentów i interpretacji ich wyników. Nie będzie brana pod uwagę efektywność czasowa i pamięciowa programów.
Zadanie 2
Treść
Dane wejściowe mają postać ciągu symboli nad alfabetem . Kolejne znaki tego ciągu są generowane losowo z następującego rozkładu prawdopodobieństwa:
- symbol jest generowany z rozkładu ,
- jeśli , to jest generowany z rozkładu ,
- jeśli , to jest generowany z rozkładu ,
- jeśli , to jest generowany z rozkładu ,
gdzie:
- to rozkład jednopunktowy na zbiorze ,
- to pewien ustalony rozkład prawdopodobieństwa na zbiorze ,
- to pewien ustalony rozkład prawdopodobieństwa na zbiorze .
Polecenie
- Opracuj możliwie najskuteczniejszą metodę kompresji danych o powyższej charakterystyce, opartą na kodowaniu Huffmana. Zaimplementuj ją.
- Oszacuj teoretycznie ile średnio bitów pliku skompresowanego będzie przypadało na jeden symbol pliku wejściowego. Przyjmij, że znana jest entropia rozkładów i .
- Wykonaj eksperymenty, aby sprawdzić swoje przewidywania. Wygeneruj kilka ciągów o podanej wyżej charakterystyce, dla różnych wyborów rozkładów i , skompresuj je Twoją metodą i porównaj rozmiary plików wejściowych i wynikowych.
- Oszacuj teoretycznie wartość dla zwykłej kompresji Huffmana zastosowanej do danych o podanej charakterystyce. Czy Twój algorytm osiąga lepszą kompresję?
- Jaka dodatkowa informacja musiałaby być zapisana w skompresowanym pliku, aby umożliwić jego dekompresję? Oszacuj jej rozmiar.