Teoria informacji/TI Wykład 13: Różnice pomiędzy wersjami

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
Niwinski (dyskusja | edycje)
Niwinski (dyskusja | edycje)
Linia 55: Linia 55:
go używać bardzo intensywnie - jeśli ktoś woli, może nadal myśleć o ulubionym języku
go używać bardzo intensywnie - jeśli ktoś woli, może nadal myśleć o ulubionym języku
programowania. Ważną własnością maszyn Turinga jest, że można je kodować za pomocą
programowania. Ważną własnością maszyn Turinga jest, że można je kodować za pomocą
słów binarnych, jedno z wielu możliwych kodowań opisane jest w pierwszym wykładzie
słów binarnych, jedno z wielu możliwych kodowań opisane jest w  
ze [[Złożoność Obliczeniowa/ZO Wykład 1|Złożoności obliczeniowej]].
[[Złożoność obliczeniowa/Wykład 1: Obliczenia w modelu maszyny Turinga|pierwszym wykładzie ze Złożoności obliczeniowej]].
Nie jest przy tym trudno zagwarantować, by kodowanie było ''bezprefiksowe''
Nie jest przy tym trudno zagwarantować, by kodowanie było ''bezprefiksowe''
(tzn. żaden kod nie jest właściwym prefiksem innego).  
(tzn. żaden kod nie jest właściwym prefiksem innego).  

Wersja z 15:30, 15 sty 2007

Andriej Nikołajewicz Kołmogorow (1903-1987)

Złożoność informacyjna Kołmogorowa

Odwołajmy się do codziennego doświadczenia. Chyba każdy się zgodzi, że niektóre liczby można zapamiętać łatwiej niż inne i nie zależy to tylko od wielkości liczby. Bez trudu zapamiętamy liczbę 1000100 czy nawet

100100100100

natomiast zapamietanie 20 „losowych˝ cyfr sprawi nam kłopot. No, chyba, że to będą np.

31415926535897932384

wtedy, nawet jeśli nie, „trzymamy˝ tych cyfr w pamięci, możemy je w razie potrzeby odtworzyć, np. korzystając z formuły Leibniza 1113+1517+19=π4.

Nie inaczej ma się sprawa z tekstami. Mamy świadomość, że przy odpowiednim nakładzie pracy i czasu potrafilibyśmy się nauczyć na pamięć wybranej księgi „Pana Tadeusza˝ (a może nawet całego poematu), natomiast zapamiętanie - powiedzmy - 10 stron „losowych˝ symboli wydaje się przekraczać możliwości zwykłego człowieka. No chyba, że znowu -- znaleźlibyśmy jakiś „klucz˝, na przykład okazałoby się, że jest to tekst w obcym języku, którego jednak jesteśmy w stanie się nauczyć.

Jakie pojęcia matematyczne kryją się za tym zjawiskiem? W przypadku liczb odpowiedź jest stosunkowo prosta: niektóre liczby całkowite można opisać znacznie krócej niż podając ich rozwinięcia dziesiętne; wystarczy wtedy zapamiętać ów krótszy „opis˝. W pierwszym przybliżeniu, za złożoność liczby bylibysmy więc skłonni uznać długość jej najkrótszego opisu. Jednak widzieliśmy już na pierwszym wykładzie, że takie postawienie sprawy prowadzi do paradoksu Berry'ego, dlatego też wprowadziliśmy wtedy pojęcie notacji.

A jednak - po lepszym zrozumieniu - idea najktótszego opisu prowadzi do sensownej miary złożoności, którą przedstawimy na tym wykładzie.

Przyjmiemy, że obiekty, które chcemy opisywać, to słowa nad alfabetem {0,1}; zarówno liczby naturalne, jak też słowa nad większymi alfabetami można łatwo sprowadzić do tego przypadku.

Ideą Kołmogorowa było, by za złożoność słowa w przyjąć długość najkrótszego programu generującego to słowo, przy wybranym języku programowania, np. języku Pascal. W istocie Kołmogorow nie użył języka Pascal, lecz uniwersalnej maszyny Turinga, jednak - jak wkrótce się przekonamy - wybór ten nie ma większego znaczenia, podobnie jak zresztą wybór innego języka programowania (np. C++ zamiast Pascala).

Zakładamy, że Czytelnik jest zaznajomiony z pojęciem maszyny Turinga, choć nie będziemy go używać bardzo intensywnie - jeśli ktoś woli, może nadal myśleć o ulubionym języku programowania. Ważną własnością maszyn Turinga jest, że można je kodować za pomocą słów binarnych, jedno z wielu możliwych kodowań opisane jest w pierwszym wykładzie ze Złożoności obliczeniowej. Nie jest przy tym trudno zagwarantować, by kodowanie było bezprefiksowe (tzn. żaden kod nie jest właściwym prefiksem innego).

Zakładając ustalone kodowanie, Turing podał konstrukcję maszyny uniwersalnej (zob. Języki, automaty i obliczenia, Wykład 12).

Definicja [Uniwersalna maszyna Turinga]

Uniwersalna maszyna Turinga ma następujące własności:

(1) jeśli na wejściu jest w=vu, gdzie v jest kodem pewnej maszyny Mv, to U symuluje działanie Mv na u.

W szczególności

(1a) jeśli Mv się zatrzymuje, to U też się zatrzymuje z tym samym wynikiem, który oznaczamy U(w) (=Mv(u)),

(1b) jeśli Mv się zapętla, to U też się zapętla.

(2) jeśli słowo wejściowe w nie ma prefiksu będącego kodem maszyny, to U się zapętla.

Definicja [Złożoność Kołmogorowa]

Złożonością informacyjną Kołmogorowa słowa x jest
KU(x)=min{|v|:U(v)=x}

Innymi słowy, KU(x) jest długością najkrótszego kodu maszyny Turinga wraz z wejściem, My, takich że M(y)=x.

Na pierwszy rzut oka definicja ta istotnie zależy od wyboru kodowania i maszyny uniwersalnej. Istotnie, przyjmując inne kodowanie, moglibyśmy otrzymać inną maszynę uniwersalną U i w konsekwencji inną wartość KU(x). Okazuje się jednak, że nie polepszymy w ten sposób złożoności Kołmogorowa więcej niż o stałą (zależną od U i U, ale nie od x.

Fakt

Niech M będzie dowolną maszyną Turinga i niech
KM(x)=min{|v|:M(v)=x}.

Wtedy istnieje taka stała cUM, że

KU(x)KM(x)+cUM

dla każdego x.

Dowód

Niech M oznacza kod maszyny M. Wtedy, zgodnie z definicją U, M(v)=U(Mv), dla każdego v, dla którego którakolwiek ze stron jest określona. Mamy więc

KU(x)min{|M|+|v|:M(v)=x}=KM(x)+|M|.

Wystarczy więc przyjąć cUM=|M|.

Wniosek [niezmienniczość]

Jeśli U,U są dwiema maszynami uniwersalnymi (być może dla różnych kodowań), to istnieje stała cUU, że
KU(x)KU(x)+cUU

dla każdego x.

Wniosek [szacowanie]

Istnieje stała cU, że
KU(x)|x|+cU.

Dowód

W powyższym fakcie wystarczy przyjąć za M maszynę obliczajacą funkcję identycznościową.


Wybierając dowolną funkcję xv, gdzie U(v)=x i |v|=KU(x), otrzymujemy oczywiście notację. Z Faktu na temat notacji wynika, że dla każdego n istnieje słowo x długości n dla którego KU(x)|x|.

Definicja [Słowa losowe]

Słowo x spełniające KU(x)|x| nazywamy losowym (w sensie Kołmogorowa).

Intuicyjnie, w terminach języka Pascal, powiedzielibyśmy, że są to słowa, dla których nie ma istotnie lepszego programu niż write ('x').

Wspomniana powyżej notacja xv wydaje się być bardzo sensowną propozycją, ma jednak poważną wadę: przy żadnym wyborze tej funkcji nie jest obliczalna. W równoważnym sformułowaniu, mamy następujące

Twierdzenie

Funkcja xKU(x) nie jest obliczalna.

Dowód

Dowód oparty jest na pomyśle paradoksu Berry'ego: dla każdego n znajdujemy słowo wn, którego ,,opis wymaga n symboli" i w ten sposób dochodzimy do sprzeczności.

Przypuśćmy, że powyższa funkcja jest obliczalna. Wówczas obliczalna byłaby również funkcja, która binarną reprezentację liczby n (oznaczmy ją bin (n)) przekształca na pierwsze w porządku wojskowym słowo w, takie że KU(w)n (oznaczmy je wn; porządek wojskowy porządkuje wszystkie słowa najpierw według długości a potem leksykograficznie). Niech M będzie maszyną realizującą tę funkcję, tzn. M(bin (n))=wn. Wtedy oczywiście KM(wn)|bin (n)|. Z drugiej strony, zgodnie z udowodnionym przed chwilą Faktem,

KU(wn)KM(wn)+cUM

a założyliśmy, że nKU(wn), co dałoby nam

n|bin (n)|+cUM

dla wszystkich n, co jest oczywiście niemożliwe.

Złożoność bezprefiksowa