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