Kodowanie i entropia Marek Śmieja Teoria informacji 1 / 34
Kod S - alfabet źródłowy mocy m (np. litery, cyfry, znaki interpunkcyjne), A = {a 1,..., a n } - alfabet kodowy (symbole), Chcemy przesłać tekst napisany w alfabecie źródłowym, ale nasz kanał informacyjny pozwala tylko na przesłanie symboli z A, Chcemy każdy element z S wyrazić za pomocą słów z A (niepuste słowa skończonej długości) Funkcja kodująca Funkcją kodującą (kodowaniem) nazywamy dowolną funkcję φ : S A. 2 / 34
Cele Kodowanie może mieć różne cele: Zmniejszenie objętości danych kompresja Zapewnienie odporności na błędy kody korekcyjne Zapewnienie poufności danych kryptografia 3 / 34
Kompresja Kompresja bezstratna z postaci skompresowanej można (zawsze) odtworzyć postać danych identyczną z oryginałem. Kompresja stratna z postaci skompresowanej nie zawsze można otrzymać oryginalną postać lepszy współczynnik kompresji drobne różnice niezauważalne dla niektórych zmysłów (wysokie częstotliwości próbkowanie, sąsiednie piksele obrazka) może być niebezpieczne dla pewnych zastosowań np. medycznych 4 / 34
Kodowanie nieosobliwe Przykład: S = {a, b, c, d}, A = {0, 1}, φ : S A φ(a) = 1, φ(b) = 10, φ(c) = 01, φ(d) = 1. Funkcja - każdy symbol z S musi mieć zdefiniowany kod, Nie jest iniekcją - kody różnych symboli nie muszą być różnie (jak dekodować?), Kodowanie nieosobliwe Kodowanie jest nieosobliwe jeśli funkcja kodująca jest iniekcją: φ(s 1 ) φ(s 2 ), jeśli s 1 s 2. 5 / 34
Kodowanie nieosobliwe jednoznacznie dekodowalne S = {a, b, c}, A = {0, 1}, φ : S A φ(a) = 1, φ(b) = 0, φ(c) = 10, Jest nieosobliwe Jak odkodować: 1101? aaba czy może aca? Iniektywna funkcja jest odwracalna, ale nie zapewnia to jednoznaczności dekodowania! 6 / 34
Kod Morse a Kod jednoznacznie dekodowalny - był powszechnie używany w telekomunikacji radiowej, obecnie używany przez radioamatorów S - litery alfabetu angielskiego A = {, }, gdzie - krótki sygnał, - - długi sygnał Kody to ciągi złożone z długich i krótkich sygnałów Dekodowanie: krótki odstęp czasowy pomiędzy literami, a dłuższy między wyrazami Jest to symbol specjalny rozdzielający kody. Czyli tak naprawdę A jest 4-elementowy a nie dwu. Nieefektywne, zobaczymy jak sprytniej zapewnić jednoznaczną dekodowalność:) 7 / 34
Kody stałej długości Każdy symbol ma kod tej samej długości l Przykład: ASCII Dekodowanie: czytamy porcję l symboli, patrzymy w słownik i odkodowujemy 8 / 34
Jednoznaczna dekodowalność Rozszerzenie kodu Rozszerzeniem kodu nazywamy odwzorowanie φ : S A dane wzorem: φ(s 1 s 2... s k ) := φ(s 1 )φ(s 2 )... φ(s k ) Jednoznaczna dekodowalność Kod jest jednoznacznie dekodowalny jeśli jego rozszerzenie jest nieosobliwe Innymi słowy, kod jest jednoznacznie dekodowalny jeśli istnieje tylko jeden możliwy ciąg liter produkujący go. Ćwiecznie: Jak przeprowadzić test na jednoznaczną dekodowalność? 9 / 34
Kod prefiksowy Kod Morse a jest jednoznacznie dekodowalny dzięki wykorzystaniu symboli specjalnych rozdzielających kody. Inny sposób polega na takiej konstrukcji kodu, aby jednoznaczność byłą zapewniona bez użycia separatorów. Kod przedrostkowy Kod nazywamy przedrostkowym (prefiksowym) jeśli żadne ze słów kodujących nie jest przedrostkiem innego. Jest jednoznacznie dekodowalny. 10 / 34
Przykład S = {a, b, c}, A = {0, 1}, φ : S A φ(a) = 1, φ(b) = 01, φ(c) = 00, Jak odkodować: 001011 0 - nie jest kodem 00 - c (ponadto żaden inny symbol nie ma kodu rozpoczynającego się od 00 ) 1 - a 0 - nie jest kodem 01 - b 1 - a 11 / 34
Podsumowanie Rysunek: Zależność pomiędzy kodowaniami (źródło: Cover and Thomas) Ćwiczenie: podać kodowania każdego z tych rodzajów 12 / 34
Transformacje danych Weźmy ciąg: 9, 11, 11, 11, 14, 13, 15, 17, 16, 17, 20, 21 Mamy 9 symboli. Do zapisu jednego potrzebujemy 4 = log 2 9 bitów Użyjmy następującej transformacji: Wówczas ˆx n ma postać: ˆx n = n + 8, e n = x n ˆx n 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20 My kodujmy błędy e n, czyli ciąg: 0, 1, 0, 1, 1, 1, 0, 1, 1 1, 1, 1 Potrzebujemy teraz tylko 2 bity na liczbę Dlaczego? Dane spełniają w przybliżeniu pewną regułę 13 / 34
Transformacje danych Weźmy ciąg: 27, 28, 29, 28, 26, 27, 29, 28, 30, 32, 34, 36, 38 Do zapamiętania go potrzebujemy 4 bity na każdą liczbę Każda wartość w ciągu jest bliska poprzedniej. Użyjmy następującej transformacji: e n = x n x n 1, e 1 = x 1 Wówczas e n ma postać: 27, 1, 1, 1, 2, 1, 2, 1, 2, 2, 2, 2, 2 Teraz ciąg jest prostszy do zakodowania 14 / 34
Kod o zadanej długości Pytanie: Mamy dany alfabet i chcemy zrealizować kod jednoznacznie dekodowalny o zadanych długościach. Kiedy nam się to uda? Nierówność Krafta Alfabet źródłowy S o m elementach da się zakodować słowami prefiksowymi z alfabetu kodowego A o n elementach o długościach l 1,..., l m jeśli m n l i 1. i=1 Odwrotnie, jeśli liczby l 1,..., l m spełniają nierówność Krafta, to istnieje kod prefiksowy o tych długościach. My będziemy prawie zawsze przyjmować n = 2 dla prostoty, chociaż da się robić ogólniej. 15 / 34
Przykład 0 1 00 01 10 11 000 001 010 011 100 101 110 111 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 - Nierówność Krafta- ok - Dekodowalność - ok - Prefiksowy - ok 16 / 34
Przykład 0 1 00 01 10 11 000 001 010 011 100 101 110 111 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 - Nierówność Krafta- nie - Dekodowalność - nie - Prefiksowy - nie 17 / 34
Przykład 0 1 00 01 10 11 000 001 010 011 100 101 110 111 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 - Nierówność Krafta- tak - Dekodowalność - tak - Prefiksowy - tak 18 / 34
Przykład 0 1 00 01 10 11 000 001 010 011 100 101 110 111 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 - Nierówność Krafta- ok - Dekodowalność - ok - Prefiksowy - ok 19 / 34
Przykład 0 1 00 01 10 11 000 001 010 011 100 101 110 111 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 - Nierówność Krafta- ok - Dekodowalność - ok - Prefiksowy - nie, ale skoro nierówność zachodzi to można znaleźć inny kod prefiksowy o tych długościach 20 / 34
Przykład 0 1 00 01 10 11 000 001 010 011 100 101 110 111 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 - Nierówność Krafta- ok - Dekodowalność - nie - Prefiksowy - nie, ale można znaleźć jakiś prefiksowy o tych długościach 21 / 34
Dowód 1 Zakładamy, że mamy kody prefiksowe o długościach l 1,..., l m. Pokażemy, że zachodzi nierówność Krafta. Kod prefiksowy można reprezentować jako ścieżki do liści w drzewie (0-w lewo, 1 w prawo dla sytuacji binarnej). Węzły wewnętrzne nie są kodami (rysunek) Najdłuższy kod ma długość l max i leży na poziomie l max w drzewie. Kod leżący na poziomie l i ma n lmax l i potomków na poziomie l max. Jako, że mamy drzewo to zbiory potomków dla węzłów na tym samym poziomie są rozłączne. Łączna ilość potomków na poziomie l max nie może być większa niż maksymalna ilość węzłów na tym poziomie czyli n lmax. Stąd: n l max l i n lmax co daje n l i 1 22 / 34
Dowód 2 Odwrotnie zakładamy, że mamy dane długości kodów spełniających nierówność Krafta. Mamy pokazać, że istnieje kod prefiksowy o tych długościach. Konstruujemy pełne drzewo binarne. Zakładamy, że l 1 l 2... l n = l max Dla kolejnych długości tworzymy kody biorąc kolejne ścieżki w drzewie (od lewej - rysunek) - daję to kod prefiksowy. Dla każdego kodu usuwamy potomków odpowiadającego węzła, tak aby kod był w liściu. Ilość usuniętych potomków to: n lmax l1,..., n lmax ln. Zliczamy usunięte liście w drzewie: i nlmax l i n lmax Zatem liści nam nie zabraknie o ile spełniona będzie nierówność Krafta Jako że założyliśmy jej prawdziwość, to procedura jest wykonalna 23 / 34
Przykład konstrukcji Mamy dane długości 1, 2, 3, 3. Można sprawdzić, że spełniają nierówność Krafta. Chodzimy po drzewie od lewej i tworzymy kody (od najkrótszego do najdłuższego) 24 / 34
Rozszerzenie Ćwiczenie: Nierówność Krafta można pokazać w przypadku kodów jednoznacznie dekodowalnych (twierdzenie McMillan). Czyli kody jednoznacznie dekodowalne mają analogiczne ograniczenia jak i prefiksowe. Dlatego zawężamy się w naszych rozważaniach do kodów prefiksowych. 25 / 34
Pytanie: a co jeśli nierówność Krafta jest spełniona silnie, tzn. n l i < 1 Jeśli prawdopodobieństwa symboli p i spełniają n l i = p i, to wówczas możemy osiągnąć równość. W przeciwnym razie niekoniecznie (będzie wynikało z końcowego twierdzenia). 26 / 34
Przykład 0 1 00 01 10 11 000 001 010 011 100 101 110 111 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 2 2 + 3 2 3 + 4 2 4 = 14 16 < 1 27 / 34
Przykład 0 1 00 01 10 11 000 001 010 011 100 101 110 111 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 Optymalny kod (dostajemy 1 w nierówności Krafta) 28 / 34
Długość kodu Załóżmy, że symbole z S generowane są z określonymi prawdopodobieństwami p i = p(s i ) Ponadto, zakładamy brak pamięci, czyli że generowany symbol nie zależy od żadnego z poprzednich Chcielibyśmy stworzyć kod, który jest możliwie krótki (efektywny) Interesująca nas długość to statystyczna długość słowa: L(l 1,..., l n ) = E(length(φ)) := i p i l i, gdzie l i = length(s i ) 29 / 34
Przykład S = {a, b, c}, A = {0, 1}, P = {1/2, 1/4, 1/4} φ 1 (a) = 0, φ 1 (b) = 10, φ 1 (c) = 11 L(φ 1 ) = 1 2 1 + 1 4 2 + 1 4 2 = 1 1 2 (optymalne) φ 2 (a) = 10, φ 2 (b) = 0, φ 2 (c) = 11 L(φ 2 ) = 1 2 2 + 1 4 1 + 1 4 2 = 1 3 4 Wniosek: częste symbole powinny być kodowane krótkimi kodami. 30 / 34
Cel Jak dobrać l i, aby zminimalizować wartość oczekiwaną długości słowa? Nierówność Krafta daje nam dopuszczalne zakresy l i. Mamy problem minimalizacji przy zadanym warunku. Problem minimalizacyjny Znaleźć minimum L(l 1,..., l n ) := i p i l i przy warunku n l i 1 i 31 / 34
Minimalizajca zakładamy, że l i > 0 rzeczywiste minimalizujemy na brzegu tj. i n l i = 1 wykorzystujemy metodę współczynników Lagrange a: J(l 1,..., l n ) = p i l i λ( i n l i 1) Szukamy minimum: J = p i λn l i ln(n) = 0 l i Dostajemy: n l i = p i λln(n) Wrzucamy to do warunku na λ: n l i = 1 λln(n) = 1 i Wyliczamy λ i wracamy do poprzedniego co daje: n l i = p i, czyli l i = log n p i 32 / 34
Uwagi Dopuściliśmy długości l i niecałkowite. W praktyce, długości są całkowite. Definiujemy całkowite długości l i = log n p i Kod o takich długościach to kodowanie Shannona. Z twierdzenia wynikja, że optymalny kod ma średnią długość nie mniejszą niż wartość i p i( log p i ). Jeśli p i = n k i dla pewnego k, to wówczas log n p i = k i log n n = k i = log n n k i = log n p i i osiągamy minimum 33 / 34
Entropia Kluczowa dla nas sytuacja to kodowanie binarne A = {0, 1}, choć można definiować to dla dowolnego A. Definicja Entropia określa minimalną statystyczną długość kodowania. Niech X = {x 1,..., x n } będzie dyskretną przestrzenią probabilistyczną, gdzie p i = p(x i ) jest prawdopodobieństwem otrzymania x i. Wtedy entropia X (rozkładu p 1,..., p n na X ) wyraża się wzorem: h(x ) = h(p 1,..., p n ) = i p i ( log 2 p i ). Będziemy pisać zamiennie h(zbiór) = h(rozkład pr.) = h(zmienna los) 34 / 34