Kompresja danych Instytut Informatyki UWr Studia dzienne Wykład nr 3: kody Golomba, kody Tunstalla.

Slides:



Advertisements
Podobne prezentacje
Kodowanie informacji Instytut Informatyki UWr Studia wieczorowe
Advertisements

Kodowanie informacji Instytut Informatyki UWr Studia wieczorowe
DYSKRETYZACJA SYGNAŁU
Zmienne losowe i ich rozkłady
dr A Kwiatkowska Instytut Informatyki
Badania operacyjne. Wykład 1
Badania operacyjne. Wykład 2
Materiały pochodzą z Platformy Edukacyjnej Portalu
Przygotował Przemysław Zieliński
Ciągi de Bruijna generowanie, własności
Liczby Pierwsze - algorytmy
WYKŁAD 7. Spójność i rozpięte drzewa
WYKŁAD 8. Siła spójności A,B – dowolne podzbiory V(G)
Statystyka w doświadczalnictwie
Rozpoznawanie Twarzy i Systemy Biometryczne, 2005/2006
1 Kompresja indeksu slajdy studenta Karola Tomaszewskiego (z drobnymi modyfikacjami)
Wykład 3 Rozkład próbkowy dla średniej z rozkładu normalnego
Wykład 4 Przedziały ufności
Wstęp do interpretacji algorytmów
Zapis informacji Dr Anna Kwiatkowska.
Metody Symulacyjne w Telekomunikacji (MEST) Wykład 6/7: Analiza statystyczna wyników symulacyjnych  Dr inż. Halina Tarasiuk
Temat 3: Co to znaczy, że komputer ma pamięć? Czy można ją zmierzyć?
Reprezentacje - zmiennoprzecinkowa
WYKŁAD 7. Spójność i rozpięte drzewa Graf jest spójny, gdy dla każdego podziału V na dwa rozłączne podzbiory A i B istnieje krawędź z A do B. Definicja.
Matematyka.
AWK Zastosowania Informatyki Wykład 1 Copyright, 2003 © Adam Czajka.
Kod Graya.
Nierówności (mniej lub bardziej) geometryczne
minimalizacja automatów
Podstawy układów logicznych
Elementy Rachunku Prawdopodobieństwa i Statystyki
Funkcje logiczne i ich realizacja. Algebra Boole’a
Dodatkowe własności funkcji B-sklejanych zawężenie f do K Rozważmy funkcjeIch zawężenia do dowolnego przedziałutworzą układ wielomianów. Dla i=k ten układ.
Problem kodowania x s 1 A B C D Wariant I A = 00 B = 01 C = 10 D = 11
Kodowanie informacji Kodowanie
Zastosowania ciągów.
Języki i automaty część 3.
Radosław Kaczyński Wrocław 2006
DANE INFORMACYJNE 97_10_MF_G1 i 97_93_MF_G1 Kompetencja:
ZBIORY I DZIAŁANIA NA ZBIORACH
Algorytmika.
Gramatyki Lindenmayera
Programowanie Niskopoziomowe
WYKŁAD 3 Temat: Arytmetyka binarna 1. Arytmetyka binarna 1.1. Nadmiar
Zagadnienia AI wykład 2.
Danuta Stanek KODOWANIE LICZB Systemy liczenia III.
I T P W ZPT 1 Kodowanie stanów to przypisanie kolejnym stanom automatu odpowiednich kodów binarnych. b =  log 2 |S|  Problem kodowania w automatach Minimalna.
Modele zmienności aktywów
ANALIZA SKŁADNIOWA.
Algorytmy kodowania Shannona-Fano i Huffmana
NP-zupełność Problemy: rozwiązywalne w czasie wielomianowym - O(nk)
Rodzaje Liczb JESZCZE SA TAKIE
Rodzaje liczb.
Algorytm kodowania arytmetycznego
Kompresja danych Instytut Informatyki UWr Studia dzienne Wykład nr 2: rozszerzone i dynamiczne Huffmana.
METODY REPREZENTOWANIA IFORMACJI
Wstęp do interpretacji algorytmów
K ODY ZMIENNEJ DŁUGOŚCI Alfabet Morsa Kody Huffmana.
Wstęp do programowania Wykład 9
Pojęcia podstawowe c.d. Rachunek podziałów Elementy teorii grafów
Elementy cyfrowe i układy logiczne
Technika Mikroprocesorowa 1
Rozkład z próby Jacek Szanduła.
Zbiory – podstawowe wiadomości
Wstęp do Informatyki - Wykład 6
Układy asynchroniczne
ALGORYTMY I STRUKTURY DANYCH
MNK – podejście algebraiczne
Własności asymptotyczne ciągów zmiennych losowych
POJĘCIE ALGORYTMU Wstęp do informatyki Pojęcie algorytmu
Zapis prezentacji:

Kompresja danych Instytut Informatyki UWr Studia dzienne Wykład nr 3: kody Golomba, kody Tunstalla

Kodowanie długości serii (RLE=run length encoding) Przykłady ciągów binarnych z dużą przewagą zer: –faksy (tekst drukowany) –grafika (monochromatyczna, nie tylko) Kodowanie długości serii: Dla danych postaci kodujemy długości kolejnych ciągów zer:

Kodowanie długości serii c.d. Problemy: jak kodować liczby oznaczające długości serii aby uzyskać maksymalną kompresję? –Jaki rozkład prawdopodobieństwa? alfabet wejściowy potencjalnie nieskończony (dowolnie długie ciągi zer...)

RLE: rozkład prawdopodobieństwa Ciąg wartości niezależnych: P(0)=p P(1)=1-p Wtedy: P( 0 n 1 ) = p n ( 1-p ) Kiedy długie serie: p bliskie jedynki

Kod Golomba rzędu m Kodowanie liczby n: Niech n = q m + r dla 0  r  m. (inaczej: q to wyni, a r reszta z dzielenia n przez m) Kod liczby n składa się z 2 części: –unarnego kodowania q: 1 q 0 –Kody stałe liczby r o długościach  log m  i  logm , symetrycznie odbite kody stałe w dynamicznym kodowaniu Huffmana (kod prefiksowy!) UWAGA: nieskończony zbiór słów kodowych!

Kod Golomba: własności: nieskończony zbiór słów kodowych! kod prefiksowy (p  n): –i =  n / m    p / m  = j : 1 i 0  1 j 0 –  n / m    p / m  : różne reszty z dzielenia (resztom odpowiada kod prefiksowy)

Kod Golomba: przykład Niech m = 5, wtedy reszty r kodujemy wg tabeli: rKod(r)

Kod Golomba: przykład Dla danych postaci kodujemy długości kolejnych ciągów zer: (razem = 49 bitów): ( = 22 bity)

Kod Golomba: przykład c.d. Zakodujmy teraz dane (49 bitów) używając kodu rzędu 10: ( = 24 bity) Ale dla m=256 mielibyśmy (co najm.): = 45 bitów qKod(q)

Kod Golomba: parametry W ciągu wartości niezależnych (P(0)=p) mamy: P( 0 n 1 ) = p n (1 - p) Czyli w ciągu liczb odpowiadających długościom serii: P( n ) = p n (1 - p) Pytania: Czy kod Golomba może być przy takim rozkładzie optymalny? Jeśli tak: jak dobrać wartość m?

Kod Golomba: optymalność Warunek konieczny optymalności: Wierzchołki o większych wagach (prawdopodobieństwach) wyżej niż te o mniejszych wagach Dla uproszczenia, niech m=2 k dla naturalnej k: kody odpowiadające liczbom qm, qm+1,…,qm+m-1 to liście na poziomie (q+1) + log m

Kod Golomba: optymalność c.d. Rozważmy liście położone najwyżej (1+log m): Prawdopodobieństwa: (1-p), (1-p)p 1,…, (1-p)p m-1 Suma wag 2 liści x m-1, x m o najmniejszych wagach powinna być większa od wagi liścia x 1 o największej wadze: (1-p) p m-1 + (1-p) p m-2  (1-p) p m-1 + p m-2  1

Kod Golomba: optymalność c.d. Chcemy podpinać liście jak najwyżej: Prawdopodobieństwa liści na poziomie 2+logn: (1-p)p m, (1-p) p m+1,…, (1-p)p 2m-1 Aby nie było możliwe umieszczenie ich wyżej, suma wag 2 liści x m, x m-1 o największych wagach powinna być mniejsza od wagi liścia x 1 o największej wadze (na poziomie 1+logn): (1-p) p m + (1-p) p m+1 < (1-p) p m + p m+1 < 1

Kod Golomba: optymalność c.d. Warunki konieczne optymalności: p m + p m+1 < 1  p m-1 + p m-2 Po przekształceniach: p m < 1/(1+p)  p m-2 m  - log(1+p) / log p > m-2 w przybliżeniu m  - 1 / log p > m-2

Kod Golomba: optymalność c.d. Okazuje się, że powyższe warunki konieczne dobrze przybliżają warunki wystarczające... Tw. [Gallager, van Voorhis 75] Kod Golomba rzędu m jest optymalnym kodem prefiksowym dla ciągów losowych liczb naturalnych o rozkładzie P(i)=(1-p)p i-1, gdy m =  - log(1+p) / log p  w przybliżeniu (dla p bliskiego 1): m =  - 1 / log p 

Kod Golomba: inna interpretacja Możemy kod Golomba potraktować jako kod przekształcający ciągi o różnych długościach w ciągi o różnych długościach: gdzie K(i) to kod stały i dla reszt z dzielenia przez m. inputoutput 0m0m 1 0 m-1 10 K(m-1) 0 m-2 10 K(m-2) K(1) 10 K(0)

Inna interpretacja: przykład m=5 Kodujemy jako inputoutput

Kod Golomba: jak liczyć śr. długość (bps) Teraz kodujemy ciągi zer i jedynek (nie liczby oznaczające ich długości!). Liczba bitów przypadająca na jeden symbol danych wejściowych: S(K) = sr(output) / sr(input) gdzie sr(output) i sr(output) to średnia długość ciągu wejściowego / wyjściowego (ważona wg prawdopodobieństw) ta definicja jednak ma sens!!!

Kod Golomba: średnia długość (bps) Przykład: m=5 sr(input)= 6 * p * p * p * p * p * p 6 sr(output)= 1 * p * p * p * p * p * p 6 inputoutputP(input) p 1 = p p 2 = p 4 (1-p) p 3 = p 3 (1-p) p 4 = p 2 (1-p) p 5 = p(1-p) 10 00p 6 = (1-p)

Kod Golomba w praktyce kodujemy bloki postaci 0 p 1, czyli kodowany „tekst” musi kończyć się jedynką wydajne dla p bliskich 1 (wtedy szansa na długie bloki) stopień kompresji zależy nie tylko od częstości wystąpień symboli ale też od ich „ustawienia” (porównaj z kodami kodującymi bloki ustalonej długości) przydatny nie tylko przy rozkładzie geometryczn. jak dobrać parametr m dla danych o nieznanym rozkładzie? wersja dynamiczna?

Kod Golomba: podsumowanie Własności: nieskończony zbiór słów kodowych, prosta i skończona reprezentacja LUB kod ze zmienną długością części kodowanej i kodującej tylko dla ciągów binarnych (lub ciągu liczb) optymalny dla rozkładu P(i) = p i (1-p), gdy m odpowiednio dobrane zastosowania: –obrazy binarne (p. kody Rice’a) –faksy

Kody Tunstalla: motywacja Dotychczas: kody o stałej długości: k symboli wejściowych na p symboli wyjściowych (zazwyczaj k=1), k,p ustalone kody o zmiennej długości: k symboli wejściowych (k ustalone) na... zmienną liczbę symboli wyjściowych kody o zmiennej długości wejścia i wyjścia: p. kod Golomba Wady: kody o stałej długości: brak kompresji kody o zmiennej długości: wrażliwość na błędy

Kody Tunstalla Nowe podejście: długość słowa kodowego stała liczba znaków tekstu wejściowego kodowana przez jedno słowo kodowe: zmienna Cel: kompresja przy niskich kosztach błędów zapisu/transmisji (typu „przekłamanie bitu”) Porównaj: alfabet Braile’a

Kody Tunstalla: definicja Dane: alfabet a 1,...,a N i prawdopodobieństwa p 1,...,p N. n : długość słowa kodowego (taka, że liczba słów kodowych, 2 n, jest większa od N).

Kody Tunstalla: definicja Tworzenie kodu. Przyporządkowanie symbolom alfabetu N różnych słów kodowych (o długości n). Dopóki liczba niewykorzystanych słów kodowych większa od N-1: –wybierz słowo kodowe e odpowiadające ciągowi o największym prawdopodobieństwie –usuń e z kodu –dodaj do kodu elementy e a 1, e a 2,..., e a N o prawdopodobieństwach P(e)  P(a 1 ), , P(e)  P(a N ) UWAGA: zostawiamy (co najmniej) jedno niewykorzystane słowo kodowe!

Kody Tunstalla: przykład alfabet a,b, c i prawdopodobieństwa (N = 3) P(a) = 0.6, P(b) = 0.3, P(c )=0.1 n = 3 : kod ma 8 słów kodowych. Etapy tworzenia kodu: a  0.6, b  0.3, c  0.1 aa  0.36, ab  0.18, ac  0.06, b  0.3, c  0.1 aaa  0.216, aab  0.108, aac  0.036, ab  0.18, ac  0.06, b  0.3, c  0.1

Kody Tunstalla: przykład inputoutput aaa000 aab001 aac010 ab011 ac100 b101 c110 ????????111 bloki wejściowe

Kody Tunstalla: po co wolne słowo kodowe? Zakodujmy tekst: ab c aab b aa Mamy: ?? Wniosek: na końcu kodowanego tekstu może pojawić się fragment o długości nie większej od najdłuższego bloku kodowanego jednym słowem, któremu brak słowa kodowego! inputoutput aaa000 aab001 aac010 ab011 ac100 b101 c110 ????????111

Kody Tunstalla: po co wolne słowo c.d. Rozwiązanie: wolne słowo kodowe koduje informację o wystąpieniu „ogona” nie mającego słowa kodowego „ogon” kodujemy przy pomocy ustalonych kodów stałych dla wszystkich liter alfabetu wejściowego ab c aab b aa kodujemy kod(a) kod(a)

Kody Tunstalla: własności własność prefiksowa: żadne słowo wejściowe odpowiadające słowu kodowemu nie jest prefiksem innego słowa wejściowego (nie mylić z kodem prefiksowym!) –słowo rozszerzane usuwamy z kodu –zachowanie tej zasady oznacza, że niektóre słowa kodowe zostaną niewykorzystane metoda zachłanna: minimalizacja liczby bitów przypadających na jeden symbol wejściowy

Kody Tunstalla: średnia długość (bps) Ogólnie: l iczba bitów przypadająca na jeden symbol danych wejściowych: S(K) = sr(output) / sr(input) ale sr(output) = n : każde słowo kodowe ma tę samą długość sr(input) : średnia ważona wg prawdopodobieństw długości bloków wejściowych odpowiadających słowom kodowym czyli S(K) = n / sr(input)

Kody Tunstalla: optymalność Rozważmy optymalność wśród kodów: 1. o stałej długości słów kodowych 2. o zmiennej długości bloków wejściowych 3. własności prefiksowej: żaden blok wejściowy nie jest prefiksem innego bloku wejściowego 4. każdy tekst można zakodować za wyjątkiem „ogona”, który jest prefiksem jakiegoś bloku wejściowego Kod optymalny: o najmniejszej średniej długości, czyli o największej średniej długości bloku wejściowego.

Kody Tunstalla: optymalność c.d. zbudujmy drzewo bloków wejściowych wtedy każdy wierzchołek wewnętrzny ma N potomków odpowiadających wszystkim literom alfabetu (wynika z warunku 4) Korzystając z powyższej: Tw. Kod Tunstalla jest optymalny wśród kodów spełniających warunki 1-4 Metoda dowodu: indukcja ze względu na liczbę słów kodowych

Kody Tunstalla: bps (przykład) inputoutputP( input ) aaa aab aac ab ac b c ????????111 sr(input) = * * * * * * 1

Kody Tunstalla: podsumowanie zmienna długość bloków wejściowych, stała wyjściowych: kompresja i odporność na błędy jednoznaczność kodowania: własność prefiksowa bloków wejściowych jednoznaczność dekodowania: wynika ze stałej długości słów kodowych optymalność...

Średnia długość: przypomnienie i uogóln. W ogólnym przypadku możemy mieć kod K o zmiennej długości bloków wejściowych i słów kodowych: S(K)=sr(output) / sr(input) sr(input) = |b 1 | * p |b n | * p n sr(output) = |s 1 | * p |s n | * p n blok_we słowo_kodP(blok_we) b1b1 s1s1 p1p1 b2b2 s2s2 p2p2... bnbn snsn pnpn

Jeszcze inne podejście... najlepszą kompresję da rozszerzony kod Huffmana dla rozszerzenia P k, gdzie k to długość tekstu ale z tym wiąże się gigantyczny czas i pamięć... można temu zaradzić, stosując kody arytmetyczne w których słowo kodowe odpowiada całemu tekstowi!