Teoria informacji/TI Wykład 13: Różnice pomiędzy wersjami
Linia 52: | Linia 52: | ||
(np. C++ zamiast Pascala). | (np. C++ zamiast Pascala). | ||
Zakładamy, że Czytelnik jest zaznajomiony z pojęciem maszyny Turinga, choć nie będziemy | Zakładamy, że Czytelnik jest zaznajomiony z pojęciem maszyny Turinga | ||
(zob. [[Języki, automaty i obliczenia/Wykład 12: Języki kontekstowe i automat liniowo ograniczony. Maszyna Turinga|Języki, automaty i obliczenia, wykład 12]]), choć nie będziemy | |||
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 | słów binarnych, jedno z wielu możliwych kodowań opisane jest w | ||
[[Złożoność obliczeniowa/Wykład 1: Obliczenia w modelu maszyny Turinga| | [[Złożoność obliczeniowa/Wykład 1: Obliczenia w modelu maszyny Turinga|wykładzie 1 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). | ||
Zakładając ustalone kodowanie, | Zakładając ustalone kodowanie, | ||
Turing podał konstrukcję ''maszyny uniwersalnej'' | Turing podał konstrukcję ''maszyny uniwersalnej''. | ||
{{definicja|[Uniwersalna maszyna Turinga]|universe|'''Uniwersalna maszyna Turinga''' ma następujące własności: | {{definicja|[Uniwersalna maszyna Turinga]|universe|'''Uniwersalna maszyna Turinga''' ma następujące własności: | ||
Linia 77: | Linia 78: | ||
{{definicja|[Złożoność Kołmogorowa]|Kołmogorow| '''Złożonością informacyjną Kołmogorowa''' słowa ''x'' jest | {{definicja|[Złożoność Kołmogorowa]|Kołmogorow| '''Złożonością informacyjną Kołmogorowa''' słowa ''x'' jest | ||
<center><math> | <center><math> | ||
C_U (x) = \min \{ |v| : U (v) = x \} | |||
</math></center> | </math></center> | ||
}} | }} | ||
Innymi słowy, <math> | Innymi słowy, <math> C_U (x) </math> jest długością najkrótszego kodu maszyny Turinga wraz z wejściem, | ||
<math> \langle M \rangle y </math>, takich że | <math> \langle M \rangle y </math>, takich że | ||
<math> M(y) = x</math>. | <math> M(y) = x</math>. | ||
Linia 87: | Linia 88: | ||
Na pierwszy rzut oka definicja ta istotnie zależy od wyboru kodowania i maszyny uniwersalnej. Istotnie, przyjmując inne | 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ą <math> U'</math> i w konsekwencji | kodowanie, moglibyśmy otrzymać inną maszynę uniwersalną <math> U'</math> i w konsekwencji | ||
inną wartość <math> | inną wartość <math> C_{U'} (x) </math>. Okazuje się jednak, że nie polepszymy w ten sposób | ||
złożoności Kołmogorowa więcej niż o stałą (zależną od <math> U</math> i <math> U'</math>, ale | złożoności Kołmogorowa więcej niż o stałą (zależną od <math> U</math> i <math> U'</math>, ale | ||
nie od <math> x</math>. | nie od <math> x</math>. | ||
Linia 93: | Linia 94: | ||
{{fakt||fakt_Kolmogorowa| Niech <math> M </math> będzie dowolną maszyną Turinga i niech | {{fakt||fakt_Kolmogorowa| Niech <math> M </math> będzie dowolną maszyną Turinga i niech | ||
<center><math> | <center><math> | ||
C_M (x) = \min \{ |v| : M(v) = x \}. | |||
</math></center> | </math></center> | ||
Wtedy istnieje taka stała <math> c_{UM} </math>, że | Wtedy istnieje taka stała <math> c_{UM} </math>, że | ||
<center><math> | <center><math> | ||
C_U (x) \leq K_M (x) + c_{UM} | |||
</math></center> | </math></center> | ||
dla każdego <math>x </math>. | dla każdego <math>x </math>. | ||
Linia 108: | Linia 109: | ||
którego którakolwiek ze stron jest określona. Mamy więc | którego którakolwiek ze stron jest określona. Mamy więc | ||
<center><math> | <center><math> | ||
C_U (x) \leq \min \{ |\langle M \rangle | + |v| : M(v) = x \} = C_M (x) + |\langle M \rangle |. | |||
</math></center> | </math></center> | ||
Wystarczy więc przyjąć <math> c_{UM} = |\langle M \rangle | </math>. | Wystarczy więc przyjąć <math> c_{UM} = |\langle M \rangle | </math>. | ||
Linia 114: | Linia 115: | ||
{{wniosek|[niezmienniczość]|wniosek_Kolmogorowa| Jeśli <math> U , U'</math> są dwiema maszynami uniwersalnymi (być może dla różnych kodowań), to istnieje stała <math> c_{UU'} </math>, że | {{wniosek|[niezmienniczość]|wniosek_Kolmogorowa| Jeśli <math> U , U'</math> są dwiema maszynami uniwersalnymi (być może dla różnych kodowań), to istnieje stała <math> c_{UU'} </math>, że | ||
<center><math> | <center><math> C_U (x) \leq C_{U'} (x) + c_{UU'} | ||
</math></center> | </math></center> | ||
dla każdego <math>x </math>. | dla każdego <math>x </math>. | ||
Linia 121: | Linia 122: | ||
{{wniosek|[szacowanie]|wniosek_identycznosc| Istnieje stała <math> c_{U} </math>, że | {{wniosek|[szacowanie]|wniosek_identycznosc| Istnieje stała <math> c_{U} </math>, że | ||
<center><math> | <center><math> | ||
C_U (x) \leq |x| + c_{U}. | |||
</math></center> | </math></center> | ||
}} | }} | ||
Linia 132: | Linia 133: | ||
Wybierając dowolną funkcję <math> x \mapsto v </math>, gdzie <math> U (v) = x </math> | Wybierając dowolną funkcję <math> x \mapsto v </math>, gdzie <math> U (v) = x </math> | ||
i <math> |v| = | i <math> |v| = C_U (x) </math>, otrzymujemy oczywiście | ||
[[Teoria informacji/TI Wykład 1#Notacja|notację]]. Z | [[Teoria informacji/TI Wykład 1#Notacja|notację]]. Z | ||
[[Teoria informacji/TI Wykład 1#fakt_notacji|Faktu]] na temat notacji wynika, | [[Teoria informacji/TI Wykład 1#fakt_notacji|Faktu]] na temat notacji wynika, | ||
że dla każdego <math> n</math> istnieje słowo <math> x </math> długości <math> n </math> dla | że dla każdego <math> n</math> istnieje słowo <math> x </math> długości <math> n </math> dla | ||
którego <math> | którego <math> C_U (x) \geq |x| </math>. | ||
{{definicja|[Słowa losowe]|random| Słowo ''x'' spełniające <math> | {{definicja|[Słowa losowe]|random| Słowo ''x'' spełniające <math> C_U (x) \geq |x| </math> nazywamy '''losowym''' (w sensie Kołmogorowa). | ||
}} | }} | ||
Linia 148: | Linia 149: | ||
sformułowaniu, mamy następujące | sformułowaniu, mamy następujące | ||
{{twierdzenie||nieobliczalnosc| Funkcja <math> x \mapsto | {{twierdzenie||nieobliczalnosc| Funkcja <math> x \mapsto C_U (x) </math> nie jest obliczalna.}} | ||
{{dowod|||Dowód oparty jest na pomyśle paradoksu Berry'ego: dla każdego <math> n </math> znajdujemy słowo <math> w_n </math>, którego ,,opis wymaga <math> n </math> symboli" i w ten sposób dochodzimy do sprzeczności. | {{dowod|||Dowód oparty jest na pomyśle paradoksu Berry'ego: dla każdego <math> n </math> znajdujemy słowo <math> w_n </math>, którego ,,opis wymaga <math> n </math> 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 <math> n </math> (oznaczmy ją bin (<math> n </math>)) przekształca na pierwsze w porządku wojskowym słowo <math> w </math>, takie że <math> | Przypuśćmy, że powyższa funkcja jest obliczalna. Wówczas obliczalna byłaby również funkcja, która binarną reprezentację liczby <math> n </math> (oznaczmy ją bin (<math> n </math>)) przekształca na pierwsze w porządku wojskowym słowo <math> w </math>, takie że <math>C_U (w) \geq n</math> (oznaczmy je <math> w_n </math>; porządek wojskowy porządkuje wszystkie słowa najpierw według długości a potem leksykograficznie). Niech <math> M</math> będzie maszyną realizującą tę funkcję, | ||
tzn. <math> M (\mbox{bin } (n) ) = w_n </math>. Wtedy oczywiście <math> | tzn. <math> M (\mbox{bin } (n) ) = w_n </math>. Wtedy oczywiście <math> C_M (w_n) \leq | \mbox{bin } (n) |</math>. | ||
Z drugiej strony, zgodnie z udowodnionym przed chwilą | Z drugiej strony, zgodnie z udowodnionym przed chwilą | ||
[[Teoria informacji/TI Wykład 13#fakt_Kolmogorowa|Faktem]], | [[Teoria informacji/TI Wykład 13#fakt_Kolmogorowa|Faktem]], | ||
<center><math> | <center><math> C_U (w_n) \leq C_{M} (w_n ) + c_{UM} | ||
</math></center> | </math></center> | ||
a założyliśmy, że <math> n \leq | a założyliśmy, że <math> n \leq C_U (w_n) </math>, co dałoby nam | ||
<center><math> | <center><math> | ||
n \leq | \mbox{bin } (n) | + c_{UM} | n \leq | \mbox{bin } (n) | + c_{UM} |
Wersja z 16:40, 15 sty 2007

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ę czy nawet
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 .
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 ; 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 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 (zob. Języki, automaty i obliczenia, wykład 12), 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 wykładzie 1 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.
Definicja [Uniwersalna maszyna Turinga]
(1) jeśli na wejściu jest , gdzie jest kodem pewnej maszyny , to symuluje działanie na .
W szczególności
(1a) jeśli się zatrzymuje, to też się zatrzymuje z tym samym wynikiem, który oznaczamy (),
(1b) jeśli się zapętla, to też się zapętla.
(2) jeśli słowo wejściowe nie ma prefiksu będącego kodem maszyny, to się zapętla.Definicja [Złożoność Kołmogorowa]
Innymi słowy, jest długością najkrótszego kodu maszyny Turinga wraz z wejściem, , takich że .
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ą i w konsekwencji inną wartość . Okazuje się jednak, że nie polepszymy w ten sposób złożoności Kołmogorowa więcej niż o stałą (zależną od i , ale nie od .
Fakt
Wtedy istnieje taka stała , że
dla każdego .
Dowód
Niech oznacza kod maszyny . Wtedy, zgodnie z definicją , , dla każdego , dla którego którakolwiek ze stron jest określona. Mamy więc
Wystarczy więc przyjąć .

Wniosek [niezmienniczość]
dla każdego .
Wniosek [szacowanie]
Dowód
Wybierając dowolną funkcję , gdzie
i , otrzymujemy oczywiście
notację. Z
Faktu na temat notacji wynika,
że dla każdego istnieje słowo długości dla
którego .
Definicja [Słowa losowe]
Intuicyjnie, w terminach języka Pascal, powiedzielibyśmy, że są to słowa, dla których nie ma istotnie lepszego programu niż write ('').
Wspomniana powyżej notacja 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
Dowód
Przypuśćmy, że powyższa funkcja jest obliczalna. Wówczas obliczalna byłaby również funkcja, która binarną reprezentację liczby (oznaczmy ją bin ()) przekształca na pierwsze w porządku wojskowym słowo , takie że (oznaczmy je ; porządek wojskowy porządkuje wszystkie słowa najpierw według długości a potem leksykograficznie). Niech będzie maszyną realizującą tę funkcję, tzn. . Wtedy oczywiście . Z drugiej strony, zgodnie z udowodnionym przed chwilą Faktem,
a założyliśmy, że , co dałoby nam
dla wszystkich , co jest oczywiście niemożliwe.
