Teoria informacji/TI Ćwiczenia 5: Różnice pomiędzy wersjami
Nie podano opisu zmian |
|||
Linia 156: | Linia 156: | ||
<div class="mw-collapsible-content" style="display:none">W algorytmie kompresji wykorzystaj jednocześnie kilka różnych kodów Huffmana. | <div class="mw-collapsible-content" style="display:none">W algorytmie kompresji wykorzystaj jednocześnie kilka różnych kodów Huffmana. | ||
</div></div> | </div></div> | ||
== Zadanie 3 (konkurs) == | |||
==== Wstęp ==== | |||
Prowadzący powinien przygotować dwa pliki, <tt>dane1</tt> i <tt>dane2</tt>, zawierające dane o pewnej szczególnej charakterystyce (takiej samej w obu plikach). Plik <tt>dane1</tt> zostanie udostępniony studentom, którzy na jego podstawie będą musieli określić typ redundacji występującej w danych i opracować możliwie najskuteczniejszy algorytm kompresji oparty na kodowaniu Huffmana. | |||
Każdy student zaimplementuje swój algorytm w postaci dwóch programów, <tt>kompresuj</tt> i <tt>dekompresuj</tt>, wykonujących kompresję i dekompresję. Programy zostaną przesłane do prowadzącego, który wykona za ich pomocą następujące czynności: | |||
# skompresuje plik <tt>dane2</tt>, otrzymując plik <tt>skompresowany</tt>, | |||
# zdekompresuje plik <tt>skompresowany</tt>, otrzymując plik <tt>zdekompresowany</tt>, | |||
# jeśli pliki <tt>dane2</tt> i <tt>zdekompresowany</tt> będą identyczne, przyzna autorowi danego programu liczbę punktów równą: <rozmiar_pliku_<tt>dane2</tt>> / <rozmiar_pliku_<tt>skompresowany</tt>>, | |||
# w przeciwnym przypadku (gdy pliki się różnią), przyzna 0 punktów. | |||
Wygra student, który otrzyma najwięcej punktów, czyli ten, którego program poprawnie skompresuje i zdekompresuje plik <tt>dane2</tt>, uzyskując przy tym największy stopień kompresji. Prowadzący może też osobno przyznawać punkty za pomysłowość w opracowaniu algorytmu, wówczas punkty może otrzymać też student, którego implementacja okazała się niepoprawna. | |||
Można podać, skąd pochodzą dane zawarte w plikach, może to ułatwić studentom opracowanie skuteczniejszej metody kompresji. |
Wersja z 16:03, 6 sie 2006
Ćwiczenia
Poniższe ćwiczenia służą oswojeniu się z własnościami entropii warunkowej i łącznej.
Ćwiczenie [Warunkowa entropia łączna]
Udowodnij że ,
i równość zachodzi wtedy i tylko wtedy gdy A i B są niezależne w odniesieniu do C, czyli
.Rozwiązanie
Ćwiczenie [Warunkowa entropia dla bliskich rozkładów]
Niech i będą dwiema zmiennymi losowymi takimi że (dla pewnego małego ).
Pokaż że może być dowolnie duże.Rozwiązanie
Ćwiczenie [Wąskie gardło]
Rozważmy zmienne losowe X, Y, Z tworzące łańcuch Markowa (czyli ).
Udowodnij że (czyli cała wspólna informacja między X i Z musi zawierać się w Y).
Udowodnij własność wąskiego gardła, mówiącą że .Rozwiązanie
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
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 , gdzie , , . 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 , i to rozkłady prawdopodobieństwa na zbiorze takie, że:
- (czyli rozkład jest skupiony 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.
Zadanie 3 (konkurs)
Wstęp
Prowadzący powinien przygotować dwa pliki, dane1 i dane2, zawierające dane o pewnej szczególnej charakterystyce (takiej samej w obu plikach). Plik dane1 zostanie udostępniony studentom, którzy na jego podstawie będą musieli określić typ redundacji występującej w danych i opracować możliwie najskuteczniejszy algorytm kompresji oparty na kodowaniu Huffmana.
Każdy student zaimplementuje swój algorytm w postaci dwóch programów, kompresuj i dekompresuj, wykonujących kompresję i dekompresję. Programy zostaną przesłane do prowadzącego, który wykona za ich pomocą następujące czynności:
- skompresuje plik dane2, otrzymując plik skompresowany,
- zdekompresuje plik skompresowany, otrzymując plik zdekompresowany,
- jeśli pliki dane2 i zdekompresowany będą identyczne, przyzna autorowi danego programu liczbę punktów równą: <rozmiar_pliku_dane2> / <rozmiar_pliku_skompresowany>,
- w przeciwnym przypadku (gdy pliki się różnią), przyzna 0 punktów.
Wygra student, który otrzyma najwięcej punktów, czyli ten, którego program poprawnie skompresuje i zdekompresuje plik dane2, uzyskując przy tym największy stopień kompresji. Prowadzący może też osobno przyznawać punkty za pomysłowość w opracowaniu algorytmu, wówczas punkty może otrzymać też student, którego implementacja okazała się niepoprawna.
Można podać, skąd pochodzą dane zawarte w plikach, może to ułatwić studentom opracowanie skuteczniejszej metody kompresji.