Wykład 2
Transkrypt
Wykład 2
Kodowania Nierówność Krafta Entropia Kodowanie i entropia Marek Śmieja Teoria informacji 1 / 34 Kodowania Nierówność Krafta Entropia Kod S - alfabet źródłowy mocy m (np. litery, cyfry, znaki interpunkcyjne), A = {a1 , . . . , an } - 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 Kodowania Nierówność Krafta Entropia Kod S - alfabet źródłowy mocy m (np. litery, cyfry, znaki interpunkcyjne), A = {a1 , . . . , an } - 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 Kodowania Nierówność Krafta Entropia Kod S - alfabet źródłowy mocy m (np. litery, cyfry, znaki interpunkcyjne), A = {a1 , . . . , an } - 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 Kodowania Nierówność Krafta Entropia Kod S - alfabet źródłowy mocy m (np. litery, cyfry, znaki interpunkcyjne), A = {a1 , . . . , an } - 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 Kodowania Nierówność Krafta Entropia Kod S - alfabet źródłowy mocy m (np. litery, cyfry, znaki interpunkcyjne), A = {a1 , . . . , an } - 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 Kodowania Nierówność Krafta Entropia 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 Kodowania Nierówność Krafta Entropia 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 Kodowania Nierówność Krafta Entropia 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 Kodowania Nierówność Krafta Entropia 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 Kodowania Nierówność Krafta Entropia 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 Kodowania Nierówność Krafta Entropia 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 Kodowania Nierówność Krafta Entropia 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ą: φ(s1 ) 6= φ(s2 ), jeśli s1 6= s2 . 5 / 34 Kodowania Nierówność Krafta Entropia 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ą: φ(s1 ) 6= φ(s2 ), jeśli s1 6= s2 . 5 / 34 Kodowania Nierówność Krafta Entropia 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ą: φ(s1 ) 6= φ(s2 ), jeśli s1 6= s2 . 5 / 34 Kodowania Nierówność Krafta Entropia 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ą: φ(s1 ) 6= φ(s2 ), jeśli s1 6= s2 . 5 / 34 Kodowania Nierówność Krafta Entropia Kodowanie nieosobliwe 6= 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 Kodowania Nierówność Krafta Entropia Kodowanie nieosobliwe 6= 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 Kodowania Nierówność Krafta Entropia Kodowanie nieosobliwe 6= 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 Kodowania Nierówność Krafta Entropia Kodowanie nieosobliwe 6= 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 Kodowania Nierówność Krafta Entropia Kodowanie nieosobliwe 6= 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 Kodowania Nierówność Krafta Entropia 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 Kodowania Nierówność Krafta Entropia 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 Kodowania Nierówność Krafta Entropia 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 Kodowania Nierówność Krafta Entropia 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 Kodowania Nierówność Krafta Entropia 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 Kodowania Nierówność Krafta Entropia 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 Kodowania Nierówność Krafta Entropia 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 Kodowania Nierówność Krafta Entropia 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 Kodowania Nierówność Krafta Entropia Jednoznaczna dekodowalność Rozszerzenie kodu Rozszerzeniem kodu nazywamy odwzorowanie φ : S ∗ → A∗ dane wzorem: φ(s1 s2 . . . sk ) := φ(s1 )φ(s2 ) . . . φ(sk ) 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 Kodowania Nierówność Krafta Entropia Jednoznaczna dekodowalność Rozszerzenie kodu Rozszerzeniem kodu nazywamy odwzorowanie φ : S ∗ → A∗ dane wzorem: φ(s1 s2 . . . sk ) := φ(s1 )φ(s2 ) . . . φ(sk ) 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 Kodowania Nierówność Krafta Entropia Jednoznaczna dekodowalność Rozszerzenie kodu Rozszerzeniem kodu nazywamy odwzorowanie φ : S ∗ → A∗ dane wzorem: φ(s1 s2 . . . sk ) := φ(s1 )φ(s2 ) . . . φ(sk ) 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 Kodowania Nierówność Krafta Entropia Jednoznaczna dekodowalność Rozszerzenie kodu Rozszerzeniem kodu nazywamy odwzorowanie φ : S ∗ → A∗ dane wzorem: φ(s1 s2 . . . sk ) := φ(s1 )φ(s2 ) . . . φ(sk ) 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 Kodowania Nierówność Krafta Entropia 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 Kodowania Nierówność Krafta Entropia 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 Kodowania Nierówność Krafta Entropia 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 Kodowania Nierówność Krafta Entropia 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 Kodowania Nierówność Krafta Entropia 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 Kodowania Nierówność Krafta Entropia 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 Kodowania Nierówność Krafta Entropia 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 Kodowania Nierówność Krafta Entropia 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 Kodowania Nierówność Krafta Entropia 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 Kodowania Nierówność Krafta Entropia 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 Kodowania Nierówność Krafta Entropia 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 Kodowania Nierówność Krafta Entropia 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 Kodowania Nierówność Krafta Entropia Podsumowanie Rysunek: Zależność pomiędzy kodowaniami (źródło: Cover and Thomas) Ćwiczenie: podać kodowania każdego z tych rodzajów 12 / 34 Kodowania Nierówność Krafta Entropia Transformacje danych Weźmy ciąg: 9, 11, 11, 11, 14, 13, 15, 17, 16, 17, 20, 21 Do zapamiętania go potrzebujemy 5 bitów na każdą liczbę Użyjmy następującej transformacji: x̂n = n + 8, en = xn − x̂n Wówczas x̂n ma postać: 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20 My kodujmy błędy en , czyli ciąg: 0, 1, 0, 1, 1, −1, 0, 1, −1 − 1, 1, 1 Potrzebujemy teraz tylko 2 bitów na liczbę:) Dlaczego? Dane spełniają w przybliżeniu pewną regułę 13 / 34 Kodowania Nierówność Krafta Entropia Transformacje danych Weźmy ciąg: 9, 11, 11, 11, 14, 13, 15, 17, 16, 17, 20, 21 Do zapamiętania go potrzebujemy 5 bitów na każdą liczbę Użyjmy następującej transformacji: x̂n = n + 8, en = xn − x̂n Wówczas x̂n ma postać: 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20 My kodujmy błędy en , czyli ciąg: 0, 1, 0, 1, 1, −1, 0, 1, −1 − 1, 1, 1 Potrzebujemy teraz tylko 2 bitów na liczbę:) Dlaczego? Dane spełniają w przybliżeniu pewną regułę 13 / 34 Kodowania Nierówność Krafta Entropia Transformacje danych Weźmy ciąg: 9, 11, 11, 11, 14, 13, 15, 17, 16, 17, 20, 21 Do zapamiętania go potrzebujemy 5 bitów na każdą liczbę Użyjmy następującej transformacji: x̂n = n + 8, en = xn − x̂n Wówczas x̂n ma postać: 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20 My kodujmy błędy en , czyli ciąg: 0, 1, 0, 1, 1, −1, 0, 1, −1 − 1, 1, 1 Potrzebujemy teraz tylko 2 bitów na liczbę:) Dlaczego? Dane spełniają w przybliżeniu pewną regułę 13 / 34 Kodowania Nierówność Krafta Entropia Transformacje danych Weźmy ciąg: 9, 11, 11, 11, 14, 13, 15, 17, 16, 17, 20, 21 Do zapamiętania go potrzebujemy 5 bitów na każdą liczbę Użyjmy następującej transformacji: x̂n = n + 8, en = xn − x̂n Wówczas x̂n ma postać: 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20 My kodujmy błędy en , czyli ciąg: 0, 1, 0, 1, 1, −1, 0, 1, −1 − 1, 1, 1 Potrzebujemy teraz tylko 2 bitów na liczbę:) Dlaczego? Dane spełniają w przybliżeniu pewną regułę 13 / 34 Kodowania Nierówność Krafta Entropia Transformacje danych Weźmy ciąg: 27, 28, 29, 28, 26, 27, 29, 28, 30, 32, 34, 36, 38 Do zapamiętania go potrzebujemy 6 bitów na każdą liczbę Każda wartość w ciągu jest bliska poprzedniej. Użyjmy następującej transformacji: en = xn − xn−1 , e1 = x1 Wówczas en ma postać: 27, 1, 1, −1, −2, 1, 2, −1, 2, 2, 2, 2, 2 Teraz ciąg jest prostszy do zakodowania 14 / 34 Kodowania Nierówność Krafta Entropia Transformacje danych Weźmy ciąg: 27, 28, 29, 28, 26, 27, 29, 28, 30, 32, 34, 36, 38 Do zapamiętania go potrzebujemy 6 bitów na każdą liczbę Każda wartość w ciągu jest bliska poprzedniej. Użyjmy następującej transformacji: en = xn − xn−1 , e1 = x1 Wówczas en ma postać: 27, 1, 1, −1, −2, 1, 2, −1, 2, 2, 2, 2, 2 Teraz ciąg jest prostszy do zakodowania 14 / 34 Kodowania Nierówność Krafta Entropia Transformacje danych Weźmy ciąg: 27, 28, 29, 28, 26, 27, 29, 28, 30, 32, 34, 36, 38 Do zapamiętania go potrzebujemy 6 bitów na każdą liczbę Każda wartość w ciągu jest bliska poprzedniej. Użyjmy następującej transformacji: en = xn − xn−1 , e1 = x1 Wówczas en ma postać: 27, 1, 1, −1, −2, 1, 2, −1, 2, 2, 2, 2, 2 Teraz ciąg jest prostszy do zakodowania 14 / 34 Kodowania Nierówność Krafta Entropia 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 l1 , . . . , lm wtw., gdy m X n−li ¬ 1. i=1 My będziemy prawie zawsze przyjmować n = 2 dla prostoty, chociaż da się robić ogólniej. 15 / 34 Kodowania Nierówność Krafta Entropia 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 l1 , . . . , lm wtw., gdy m X n−li ¬ 1. i=1 My będziemy prawie zawsze przyjmować n = 2 dla prostoty, chociaż da się robić ogólniej. 15 / 34 Kodowania Nierówność Krafta Entropia 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 l1 , . . . , lm wtw., gdy m X n−li ¬ 1. i=1 My będziemy prawie zawsze przyjmować n = 2 dla prostoty, chociaż da się robić ogólniej. 15 / 34 Kodowania Nierówność Krafta Entropia Przykład 000 00 001 0 010 01 011 100 10 101 1 110 11 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 Kodowania Nierówność Krafta Entropia Przykład 000 00 001 0 010 01 011 100 10 101 1 110 11 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 Kodowania Nierówność Krafta Entropia Przykład 000 00 001 0 010 01 011 100 10 101 1 110 11 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 Kodowania Nierówność Krafta Entropia Przykład 000 00 001 0 010 01 011 100 10 101 1 110 11 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 Kodowania Nierówność Krafta Entropia Przykład 000 00 001 0 010 01 011 100 10 101 1 110 11 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 kod stałej długości 18 / 34 Kodowania Nierówność Krafta Entropia Przykład 000 00 001 0 010 01 011 100 10 101 1 110 11 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 kod stałej długości 18 / 34 Kodowania Nierówność Krafta Entropia Przykład 000 00 001 0 010 01 011 100 10 101 1 110 11 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 Kodowania Nierówność Krafta Entropia Przykład 000 00 001 0 010 01 011 100 10 101 1 110 11 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 Kodowania Nierówność Krafta Entropia Przykład 000 00 001 0 010 01 011 100 10 101 1 110 11 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 20 / 34 Kodowania Nierówność Krafta Entropia Przykład 000 00 001 0 010 01 011 100 10 101 1 110 11 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 20 / 34 Kodowania Nierówność Krafta Entropia Przykład 000 00 001 0 010 01 011 100 10 101 1 110 11 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 21 / 34 Kodowania Nierówność Krafta Entropia Przykład 000 00 001 0 010 01 011 100 10 101 1 110 11 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 21 / 34 Kodowania Nierówność Krafta Entropia Dowód 1 Zakładamy, że mamy kody prefiksowe o długościach l1 , . . . , lm . 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ść lmax i leży na poziomie lmax w drzewie. Kod leżący na poziomie li ma nlmax −li potomków na poziomie lmax . 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 lmax nie może być większa niż maksymalna ilość węzłów na tym poziomie czyli nlmax . Stąd: X nlmax −li ¬ nlmax co daje X n−li ¬ 1 22 / 34 Kodowania Nierówność Krafta Entropia 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 l1 ¬ l2 ¬ . . . ¬ ln = lmax 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: nlmax −l1 , . . . , nlmax −ln . P Zliczamy usunięte liście w drzewie: i nlmax −li ¬ nlmax 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 Kodowania Nierówność Krafta Entropia 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 Kodowania Nierówność Krafta Entropia 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 Kodowania Nierówność Krafta Entropia 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 Kodowania Nierówność Krafta Entropia Rozszerzenie Ćwiczenie: Nierówność Krafta można pokazać w przypadku kodów jednoznacznie dekodowalnych (McMillan). Dlatego zawężamy się w naszych rozważaniach do kodów prefiksowych. 25 / 34 Kodowania Nierówność Krafta Entropia Pytanie: a co jeśli nierówność Krafta jest spełniona silnie, tzn. X n−li < 1 Wówczas można zmienić kodowanie na krótsze i dalej mieć własność prefiksowości (minimum funkcji wklęsłej jest osiągane na brzegu!) 26 / 34 Kodowania Nierówność Krafta Entropia Pytanie: a co jeśli nierówność Krafta jest spełniona silnie, tzn. X n−li < 1 Wówczas można zmienić kodowanie na krótsze i dalej mieć własność prefiksowości (minimum funkcji wklęsłej jest osiągane na brzegu!) 26 / 34 Kodowania Nierówność Krafta Entropia Przykład 000 00 001 0 010 01 011 100 10 101 1 110 11 111 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 Można stworzyć bardziej optymalny kod 27 / 34 Kodowania Nierówność Krafta Entropia Przykład 000 00 001 0 010 01 011 100 10 101 1 110 11 111 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 Można stworzyć bardziej optymalny kod 27 / 34 Kodowania Nierówność Krafta Entropia Przykład 000 00 001 0 010 01 011 100 10 101 1 110 11 111 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 Teraz mamy brzeg:) 28 / 34 Kodowania Nierówność Krafta Entropia Przykład 000 00 001 0 010 01 011 100 10 101 1 110 11 111 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 Teraz mamy brzeg:) 28 / 34 Kodowania Nierówność Krafta Entropia Długość kodu Załóżmy, że symbole z S generowane są z określonymi prawdopodobieństwami pi = p(si ) 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: X L(l1 , . . . , ln ) = E (length(φ)) := pi li , i gdzie li = length(si ) 29 / 34 Kodowania Nierówność Krafta Entropia Długość kodu Załóżmy, że symbole z S generowane są z określonymi prawdopodobieństwami pi = p(si ) 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: X L(l1 , . . . , ln ) = E (length(φ)) := pi li , i gdzie li = length(si ) 29 / 34 Kodowania Nierówność Krafta Entropia Długość kodu Załóżmy, że symbole z S generowane są z określonymi prawdopodobieństwami pi = p(si ) 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: X L(l1 , . . . , ln ) = E (length(φ)) := pi li , i gdzie li = length(si ) 29 / 34 Kodowania Nierówność Krafta Entropia Długość kodu Załóżmy, że symbole z S generowane są z określonymi prawdopodobieństwami pi = p(si ) 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: X L(l1 , . . . , ln ) = E (length(φ)) := pi li , i gdzie li = length(si ) 29 / 34 Kodowania Nierówność Krafta Entropia 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 ) = 12 1 + 14 2 + 14 2 = 1 21 (optymalne) φ2 (a) = 10, φ2 (b) = 0, φ2 (c) = 11 L(φ2 ) = 12 2 + 14 1 + 14 2 = 1 43 Wniosek: częste symbole powinny być kodowane krótkimi kodami. 30 / 34 Kodowania Nierówność Krafta Entropia 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 ) = 12 1 + 14 2 + 14 2 = 1 12 (optymalne) φ2 (a) = 10, φ2 (b) = 0, φ2 (c) = 11 L(φ2 ) = 12 2 + 14 1 + 14 2 = 1 34 Wniosek: częste symbole powinny być kodowane krótkimi kodami. 30 / 34 Kodowania Nierówność Krafta Entropia 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 ) = 12 1 + 14 2 + 14 2 = 1 12 (optymalne) φ2 (a) = 10, φ2 (b) = 0, φ2 (c) = 11 L(φ2 ) = 12 2 + 14 1 + 14 2 = 1 34 Wniosek: częste symbole powinny być kodowane krótkimi kodami. 30 / 34 Kodowania Nierówność Krafta Entropia 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 ) = 12 1 + 14 2 + 14 2 = 1 12 (optymalne) φ2 (a) = 10, φ2 (b) = 0, φ2 (c) = 11 L(φ2 ) = 12 2 + 14 1 + 14 2 = 1 34 Wniosek: częste symbole powinny być kodowane krótkimi kodami. 30 / 34 Kodowania Nierówność Krafta Entropia 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 ) = 12 1 + 14 2 + 14 2 = 1 12 (optymalne) φ2 (a) = 10, φ2 (b) = 0, φ2 (c) = 11 L(φ2 ) = 12 2 + 14 1 + 14 2 = 1 34 Wniosek: częste symbole powinny być kodowane krótkimi kodami. 30 / 34 Kodowania Nierówność Krafta Entropia 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 ) = 12 1 + 14 2 + 14 2 = 1 12 (optymalne) φ2 (a) = 10, φ2 (b) = 0, φ2 (c) = 11 L(φ2 ) = 12 2 + 14 1 + 14 2 = 1 34 Wniosek: częste symbole powinny być kodowane krótkimi kodami. 30 / 34 Kodowania Nierówność Krafta Entropia Cel Jak dobrać li , aby zminimalizować wartość oczekiwaną długości słowa? Nierówność Krafta daje nam dopuszczalne zakresy li . Mamy problem minimalizacji przy zadanym warunku. Problem minimalizacyjny Znaleźć minimum L(l1 , . . . , ln ) := X pi li i przy warunku X n−li ¬ 1 i 31 / 34 Kodowania Nierówność Krafta Entropia Cel Jak dobrać li , aby zminimalizować wartość oczekiwaną długości słowa? Nierówność Krafta daje nam dopuszczalne zakresy li . Mamy problem minimalizacji przy zadanym warunku. Problem minimalizacyjny Znaleźć minimum L(l1 , . . . , ln ) := X pi li i przy warunku X n−li ¬ 1 i 31 / 34 Kodowania Nierówność Krafta Entropia Cel Jak dobrać li , aby zminimalizować wartość oczekiwaną długości słowa? Nierówność Krafta daje nam dopuszczalne zakresy li . Mamy problem minimalizacji przy zadanym warunku. Problem minimalizacyjny Znaleźć minimum L(l1 , . . . , ln ) := X pi li i przy warunku X n−li ¬ 1 i 31 / 34 Kodowania Nierówność Krafta Entropia Cel Jak dobrać li , aby zminimalizować wartość oczekiwaną długości słowa? Nierówność Krafta daje nam dopuszczalne zakresy li . Mamy problem minimalizacji przy zadanym warunku. Problem minimalizacyjny Znaleźć minimum L(l1 , . . . , ln ) := X pi li i przy warunku X n−li ¬ 1 i 31 / 34 Kodowania Nierówność Krafta Entropia Minimalizajca zakładamy, że li > 0 rzeczywiste P minimalizujemy na brzegu tj. i n−li = 1 wykorzystujemy metodę współczynników Lagrange’a: X X J(l1 , . . . , ln ) = pi li − λ( n−li − 1) i Szukamy minimum: ∂J = pi − λn−li ln(n) = 0 ∂li Dostajemy: n−li = Wrzucamy to do warunku na λ: X n−li = i pi λln(n) 1 =1 λln(n) Wyliczamy λ i wracamy do poprzedniego co daje: n−li = pi , czyli li = − logn pi 32 / 34 Kodowania Nierówność Krafta Entropia Uwagi Definiujemy całkowite długości li = d− logn pi e Można sprawdzić, że znalezione minimum jest globalne (Cover, str. 111) 33 / 34 Kodowania Nierówność Krafta Entropia Uwagi Definiujemy całkowite długości li = d− logn pi e Można sprawdzić, że znalezione minimum jest globalne (Cover, str. 111) 33 / 34 Kodowania Nierówność Krafta Entropia Entropia Kluczowa dla nas sytuacja to kodowanie binarne A = {0, 1}, choć można definiować to dla dowolnego A. Entropia określa minimalną statystyczną długość kodowania. Definicja Niech X = {x1 , . . . , xn } będzie dyskretną przestrzenią probabilistyczną, gdzie pi = p(xi ) jest prawdopodobieństwem otrzymania xi . Wtedy entropia X (rozkładu p1 , . . . , pn na X ) wyraża się wzorem: X h(X ) = h(p1 , . . . , pn ) = pi (− log2 pi ). i Będziemy pisać zamiennie h(zbiór) = h(rozkład pr.) = h(zmienna los) 34 / 34 Kodowania Nierówność Krafta Entropia Entropia Kluczowa dla nas sytuacja to kodowanie binarne A = {0, 1}, choć można definiować to dla dowolnego A. Entropia określa minimalną statystyczną długość kodowania. Definicja Niech X = {x1 , . . . , xn } będzie dyskretną przestrzenią probabilistyczną, gdzie pi = p(xi ) jest prawdopodobieństwem otrzymania xi . Wtedy entropia X (rozkładu p1 , . . . , pn na X ) wyraża się wzorem: X h(X ) = h(p1 , . . . , pn ) = pi (− log2 pi ). i Będziemy pisać zamiennie h(zbiór) = h(rozkład pr.) = h(zmienna los) 34 / 34 Kodowania Nierówność Krafta Entropia Entropia Kluczowa dla nas sytuacja to kodowanie binarne A = {0, 1}, choć można definiować to dla dowolnego A. Entropia określa minimalną statystyczną długość kodowania. Definicja Niech X = {x1 , . . . , xn } będzie dyskretną przestrzenią probabilistyczną, gdzie pi = p(xi ) jest prawdopodobieństwem otrzymania xi . Wtedy entropia X (rozkładu p1 , . . . , pn na X ) wyraża się wzorem: X h(X ) = h(p1 , . . . , pn ) = pi (− log2 pi ). i Będziemy pisać zamiennie h(zbiór) = h(rozkład pr.) = h(zmienna los) 34 / 34 Kodowania Nierówność Krafta Entropia Entropia Kluczowa dla nas sytuacja to kodowanie binarne A = {0, 1}, choć można definiować to dla dowolnego A. Entropia określa minimalną statystyczną długość kodowania. Definicja Niech X = {x1 , . . . , xn } będzie dyskretną przestrzenią probabilistyczną, gdzie pi = p(xi ) jest prawdopodobieństwem otrzymania xi . Wtedy entropia X (rozkładu p1 , . . . , pn na X ) wyraża się wzorem: X h(X ) = h(p1 , . . . , pn ) = pi (− log2 pi ). i Będziemy pisać zamiennie h(zbiór) = h(rozkład pr.) = h(zmienna los) 34 / 34