Lista 3

Transkrypt

Lista 3
Kompresja danych
Studia dzienne
Lista zada« nr 3
03.03.2006
1. (2) W dynamicznym kodowaniu Humana wagi wierzchoªków to liczby naturalne. Je±li
przyjmiemy, »e s¡ to liczby z ustalonego zakresu wówczas (przy du»ych danych wej±ciowych)
mo»e doj±¢ do przekroczenia zakresu. Aby unikn¡¢ tego problemu, stosuje si¦ co pewien
czas przeskalowanie wag polegaj¡ce na zast¡pieniu wagi w warto±ci¡ bw/2c.
(a) poka» na przykªadzie, »e wykonanie takich modykacji na wszystkich li±ciach wymaga
przeliczenia od nowa wag wierzchoªków wewn¦trznych (czyli zamiana w → bw/2c dla
wierzchoªków wewn¦trznych spowoduje, »e warto±ci wag b¦d¡ niepoprawne);
(b) poka» na przykªadzie, »e taka zamiana mo»e spowodowa¢, »e kod (przy nowych wagach) przestanie by¢ kodem optymalnym.
(c) zaproponuj modykacj¦ kodu, która pozwoli unikn¡¢ przebudowywania drzewa kodu
po przeskalowaniu wag, a jednocze±nie b¦dzie w miar¦ przybli»a¢ kod optymalny;
omów zalety i wady swojej propozycji.
2. (0.5+) Skonstruuj i-bitowe kody Tunstalla dla i ∈ {8, 9, 10, 11, 12} i prawdopodobie«stw
wyst¦powania liter w j¦zyku polskim (ustalonych na przykªadowych tekstach). Zakoduj za
ich pomoc¡ oraz przy pomocy kodu Humana teksty na podstawie których ustaliª(a|e)±
prawdopodobie«stwa. Podaj rozmiar danych wynikowych.
Uwagi : w tekstach ignoruj wielko±¢ liter i znaki inne ni» litery.
3. (1) Metoda konstrukcji kodu Tunstalla powoduje, »e przy niektórych warto±ciach N (rozmiar alfabetu) i n (dªugo±¢ sªowa kodowego) cz¦±¢ sªów kodowych pozostanie niewykorzystana. Podaj sposób modykacji kodu, który pozwoli:
• zachowa¢ jednoznaczno±¢ dekodowania;
• wykorzysta¢ wszystkie sªowa kodowe;
• zmniejszy¢ (gdy s¡ wolne sªowa kodowe w standardowym kodzie) ±redni¡ dªugo±¢
kodu.
Nie jest wymagane, aby w nowym kodzie speªniona byªa wªasno±¢ preksowa bloków wej±ciowych (tzn. blok mo»e by¢ preksem innego bloku).
4. (1) Dla kodu Humana, dynamicznego kodu Humana, rozszerzonego kodu Humana,
kodu Golomba, kodu Tunstalla i kodu arytmetycznego sprawd¹ czy dªugo±¢ zakodowanej
postaci tekstu zale»y od kolejno±ci wyst¦powania liter w tek±cie. Inaczej, czy dla dwóch sªów
w i w0 takich, »e liczba wyst¡pie« a w w i liczba wyst¡pie« a w w0 s¡ równe dla ka»dego
symbolu a mo»e si¦ zdarzy¢, »e zakodowana posta¢ w ma inn¡ dªugo±¢ ni» zakodowana
posta¢ w0 (przy ustalonym kodzie).
5. (2) Czy zwi¦kszenie dªugo±ci sªowa kodowego kodu Tunstalla (przy ustalonym alfabecie i
prawdopodobie«stwach) mo»e spowodowa¢ wzrost ±redniej dªugo±ci kodu (bps)?
6. (2) Wybór optymalnego rz¦du kodu Golomba (dla ci¡gu binarnego) wymaga znajomo±ci
warto±ci p, czyli prawdopodobie«stwa wyst¦powania symbolu 0. Oznacza to konieczno±¢ 2
przebiegów przez dane, w przypadku, gdy warto±¢ p nie jest znana.
(a) Zaproponuj wªasny algorytm kodowania, który jest dynamiczn¡ wersj¡ kodu Golomba
(tzn., warto±¢ m mo»e ulega¢ zmianom w trakcie kodowania/dekodowania ale wykonujemy tylko jeden przebieg przez dane). Poka» jednoznaczno±¢ Twojego kodowania
i uzasadnij (bez formalnego dowodu) jego skuteczno±¢.
(b) Zakoduj ci¡gi 0100n 1n oraz (0100 1)n dla n = 100, 1000, 10 000 za pomoc¡ wªasnego
algorytmu, oraz optymalnego statycznego algorytmu Golomba dla p = 100/101.
(c) Zapoznaj si¦ z kodem Goladap lub innym dynamicznym wariantem kodu Golomba i
porównaj go z wªasnym algorytmem. W szczególno±ci, zakoduj za jego pomoc¡ ci¡gi
z poprzedniego podpunktu.
7. (0.5+) Sporz¡d¹ wykres ilustruj¡cy ±redni¡ dªugo±¢ optymalnego kodu Golomba S(G) w
zale»no±¢i od p oraz wykres ilustruj¡cy proporcj¦ S(G)/H({pi }∞
i=0 ) w zale»no±ci od p.
Uwagi : przyjmij, »e optymalny kod Golomba ma m = d−1/ log pe oraz
P∞
• ±rednia dªugo±¢ kodu to i=0 pi di , gdzie pi = (1 − p)pi−1 , di = di/me + log m + 1;
P∞
• entropia H({pi }∞
i=0 )jest równa
i=0 pi log(1/pi ) dla pi jak wy»ej.
8. (1) Zaproponuj wªasny sposób kodowania liczb naturalnych, który jest kodem preksowym
oraz dªugo±¢ kodu ka»dej liczby naturalnej n jest nie wi¦ksza ni» log n+2 log log n+c, gdzie
c jest warto±ci¡ staª¡.
(1) Skonstruuj kod preksowy, w którym dªugo±¢ kodu liczby n jest log n + f (n) gdzie
f (n) = log log n + o(log log n)?
Tomasz Jurdzi«ski