Teoria informacji/TI Wykład 1
Je n’ai fait celle-ci plus longue que parce que je n’ai pas eu le loisir de la faire plus courte.
(Napisałem ten list trochę dłuższy, gdyż nie miałem czasu napisać go krócej).
Blaise Pascal, Lettres provinciales, 1657
Notacja, co to takiego?
Na początek prosty eksperyment: Ktoś wymyśla słowo, a kto inny ma za zadanie je odgadnąć, zgadując literę po literze. Zwykle udaje się to znacznie szybciej niż by to wynikało z pesymistycznego oszacowania. Czy jednak będzie to równie łatwe w przypadku odgadywania liczby? Zauważmy że w przeciwieństwie do słów w języku naturalnym, liczby całkowite w systemie dziesiętnym (czy ogólnie k-arnym, dla k > 1) są „ciasno upakowane”. Mianowicie dowolny ciąg znaków ze zbioru {0, 1, …, 9} przedstawia jakąś liczbę (jeśli zignorujemy początkowe zera), podczas gdy bardzo niewiele ciągów utworzonych z liter {a, b, …, z} jest sensownymi słowami. Wynika to między innymi z tego, że nasze „algorytmy” do komunikacji za pomocą słów wymagają znacznie więcej redundancji niż te do operowania liczbami. Tę redundancję szczególnie widać, gdy jest ona wprowadzana celowo:
Przykład: Wypełniając czek wpisujemy kwotę zarówno przy pomocy liczb, jak i słownie. Zajmuje to oczywiście znacznie więcej miejsca, ale dzięki temu nie musimy obawiać się że jakaś literówka zmieni wartość wpisanej kwoty. Podobnie postępujemy przekazując przez telefon trudne słowo, na przykład, aby poinformować, jak nazywa się stolica Gruzji, mówimy: T jak Teresa, B jak Barbara, I jak Iwona, L jak Lucyna, I jak Iwona, S jak Stanisław, I jak Iwona (międzynarodowym standardem radiowców jest tzw. alfabet fonetyczny: Alpha Bravo Charlie Delta... Yankee Zulu).
Teoria informacji charakteryzuje w sposób matematyczny zapis, przesyłanie i odtwarzanie informacji. Dąży przy tym do pogodzenia dwóch przeciwstawnych celów:
- zapisywania wiadomości jak najzwięźlej
- chronienia wiadomości przed przekłamaniami podczas transmisji.
Zacznijmy od prostego pytania. Czy istnieją wiadomości, których nie da się zapisać zwięźlej?
Wiadomość może być na przykład liczbą naturalną. Liczby naturalne można na wiele sposobów zapisać
w języku polskim,
na przykład dwadzieścia pięć, najmniejsza liczba doskonała, rok bitwy pod Grunwaldem itp.
Jeśli jednak spróbujemy objąć wszystkie te sposoby „w ogólności”, natrafimy na
słynny paradoks Berry'ego (podany przez B.Russela):
Niech n będzie najmniejszą liczbą naturalną której nie da się zdefiniować w języku polskim za pomocą mniej niż dwudziestu pięciu słów.
Ale przecież właśnie zdefiniowaliśmy tę liczbę - za pomocą powyższego zdania!
Istotne jest zatem prawidłowe zdefiniowanie notacji, która służy nam do definiowania liczb. Aby uniknąć paradoksów takich jak wyżej, notacja nie może być częścią badanego obiektu. Musi być czymś zewnętrznym, nadanym w celu rozróżniania pomiędzy obiektami.
Definicja [Notacja]
Fakt
Dowód: Ciągów znaków z o długości mniejszej niż k jest:
Podstawiając , stwierdzamy że nie ma wystarczająco wiele ciągów krótszych niż k do oznaczenia wszystkich elementów S. QED.
Wniosek
Dowód: Wybierzmy m takie że . Z powyższego Faktu, dla pewnego mamy . Z tego wynika również że .
Wybierzmy teraz m’ takie że . Znów musi istnieć takie że . Analogicznie . I tak dalej. QED.
Jako zastosowanie, możemy podać teorioinformacyjny dowód znanego faktu:
Fakt (Euklides)
Dowód: Załóżmy przeciwnie, że istnieje tylko M liczb pierwszych: . Wprowadzamy notację w następujący sposób: Dla niech
gdzie jest zwykłym zapisem binarnym liczby (a więc ).
Ponieważ , mamy , dla wszystkich i. A zatem
dla wszystkich n, co oczywiście przeczy twierdzeniu że dla nieskończenie wielu n . QED.
Kody
Niektóre własności notacji mają szczególne znaczenie dla ich praktycznego zastosowania. Przyjrzyjmy się na przykład co się dzieje jeśli w naturalny sposób rozszerzymy notację do morfizmu :
Mając dany wynikowy ciąg znaków, kluczowe znaczenie ma czy potrafimy odtworzyć jednoznacznie ciąg argumentów.
Definicja [Kod]
Jak widać własność bezprefiksowości zależy wyłącznie od postaci zbioru . Ponadto dla każdego kodu .
Łatwo zauważyć że każdy zbiór bezprefiksowy jest kodem. Istnieją oczywiście kody które nie są bezprefiksowe (np. dla ), a nie każda notacja jest kodem (np. dla ).
W dalszej części będziemy omijać daszek i utożsamiać z .
Aby kodować zbiór S o m elementach za pomocą alfabetu o r elementach (dla ), wystarczy oczywiście używać ciągów długości . Wtedy , dla dowolnego .
Czasem możemy jednak wymyśleć bardziej efektywne kodowanie. Jeśli wiemy że jakieś obiekty z S pojawiają się częściej, możemy im przyporządkować krótsze ciągi znaków. W ten sposób średnio możemy uzyskać mniejsze .
Bliską analogią jest tu Gra w 20 pytań. W tej grze jedna osoba wymyśla obiekt o (w domyśle z jakiegoś dużego zbioru możliwości S), a druga osoba stara się zgadnąć jaki to obiekt przez zadawanie pytań (co najwyżej 20), na które odpowiedzą może być tylko tak lub nie. Tym samym pytania są tak naprawdę postaci ?, gdzie .
Łatwo zauważyć że pytań wystarczy do zidentyfikowania dowolnego obiektu w S. Czy da się to zrobić lepiej? W ogólności oczywiście nie. Dowolną strategię zadawania pytań możemy sobie wyobrazić jako drzewo binarne, z pytaniem w każdym wierzchołku i rozwiązaniami w liściach. Jeśli liści jest , to drzewo musi oczywiście mieć głębokość co najmniej k. Jednak jeśli niektóre rozwiązania są bardziej prawdopodobne niż inne, możemy zmniejszyć oczekiwaną liczbę pytań. (Faktycznie dopiero taka wersja tej gry jest interesująca.)
Zapiszmy to formalnie. Drzewem nad zbiorem X (albo krócej 'X-drzewem'), będziemy nazywać dowolny niepusty zbiór zamknięty na operację brania prefiksu. Relację bycia prefiksem będziemy oznaczać przez . W X-drzewie dowolny element w jest węzłem rzędu |w|, jest korzeniem, -maksymalne węzły są liśćmi.
Dodatkowo będziemy posługiwać się następującymi pojęciami: dla dowolnego , i :
- wx jest bezpośrednim następnikiem (lub dzieckiem) w
- wv jest poniżej w
- zbiór nazywamy poddrzewem indukowanym przez w
Korzystając z tych definicji, możemy powiedzieć że dowolny bezprefiksowy kod indukuje drzewo nad : :.
W drugą stronę, dowolne drzewo z |S| liśćmi indukuje bezprefiksowy kod nad S (z dokładnością do permutacji elementów zbioru S).
Jak wspominaliśmy wcześniej, naszym zadaniem jest optymalizacja długości kodu, jednocześnie zabezpieczając się na przekłamania w czasie transmisji. Pierwszym krokiem będzie sprawdzenie jak krótkie mogą być długości słów kodowych.
Dla danego kodu , niech określa funkcję długości, zdefiniowaną jako .
Twierdzenie [Nierówność Krafta]
Dowód:
Jeśli wszystkie słowa mają tą samą długość k, to uwzględniając różnowartościowość dostajemy
Jeśli teraz mamy słowa różnej długości, to oznaczmy przez k maksymalną długość . Następnie dla każdego s mierzymy długość jego kodu i definiujemy
(czyli zbiór wszystkich liści na poziomie k poniżej w pełnym -drzewie). Łatwo teraz zauważyć że podmienienie na cały zbiór nie zmieni sumy:
- ,
a zbiory , są parami rozłączne. Tym samym
Posortujmy elementy zbioru S względem rosnącej długości ich kodów , tak że . Indukcyjnie dla będziemy definiować jako leksykograficznie pierwsze słowo długości które nie jest porównywalne z żadnym ze słów (względem porządku prefiksowego). Jedyne co musimy pokazać to że takie słowo zawsze istnieje. Tak jak w poprzednim przypadku, oznaczmy przez zbiór wszystkich węzłów rzędu poniżej . Łatwo sprawdzić że . Warunkiem koniecznym i wystarczającym do istnienia szukanego wierzchołka jest
co można zapisać jako
To z kolej jest spełnione na mocy założenia dla każdego . QED
Jeśli kod nie jest bezprefiksowy, nierówność Krafta wciąż jest spełniona, co można pokazać za pomocą sprytnej techniki.
Twierdzenie (Mcmillan)
Dowód: Przypadek jest trywialny. Dla musi zachodzić również . Wystarczy wtedy pokazać że spełnia nierówność Krafta. Wprowadźmy oznaczenie i załóżmy że ta nierówność nie jest spełniona, czyli . Niech , . Rozważmy teraz
Gdzie jest liczbą sekwencji takich że . Z warunku że jest kodem, wynika że każda sekwencja odpowiada innemu słowu długości i, a więc takich sekwencji jest nie więcej niż słów.
Stąd otrzymujemy
co dla wystarczająco dużego n musi być fałszem, ponieważ funkcja wykładnicza rośnie szybciej niż liniowa. W konsekwencji mamy . QED.