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

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
Niwinski (dyskusja | edycje)
m Zastępowanie tekstu – „<math> ” na „<math>”
 
(Nie pokazano 48 wersji utworzonych przez 4 użytkowników)
Linia 1: Linia 1:
[[Image:kolmogrow.jpg||thumb|right|200px|Andriej Nikołajewicz Kołmogorow (1903-1987)]]
[[Image:kolmogrow.jpg||thumb|right|200px|Andriej Nikołajewicz Kołmogorow (1903-1987)]]


==Złożonośc informacyjna Kołmogorowa==
==Złożoność informacyjna Kołmogorowa==


Odwołajmy się do codziennego doświadczenia. Chyba każdy się
Odwołajmy się do codziennego doświadczenia. Chyba każdy się
zgodzi, że niektóre liczby można zapamiętać łatwiej niż inne
zgodzi, że niektóre liczby można zapamiętać łatwiej niż inne
i nie zależy to tylko od wielkości liczby. Bez trudu
i nie zależy to tylko od wielkości liczby. Bez trudu
zapamiętamy liczbę <math>1\underbrace{00\ldots 0}_{100} </math>
zapamiętamy liczbę <math>1\underbrace{00\ldots 0}_{100}</math>
czy nawet  
czy nawet  
<center><math>100^{\overbrace{100^{\ldots^{100}} }^{100}} </math></center>
<center><math>100^{\overbrace{100^{\ldots^{100}} }^{100}}</math></center>
natomiast zapamietanie 20  ,,losowych" cyfr sprawi nam kłopot.
natomiast zapamietanie 20  „losowych˝ cyfr sprawi nam kłopot.
No, chyba, że to będą np.
No, chyba, że to będą np.
<center>
<center>
31415926535897932384
31415926535897932384
</center>
</center>
wtedy, nawet jeśli nie ,,trzymamy" tych cyfr w pamięci, możemy je
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
w razie potrzeby odtworzyć, np. korzystając z formuły Leibniza
<math>\frac{1}{1} - \frac{1}{3}  
<math>\frac{1}{1} - \frac{1}{3}  
+ \frac{1}{5} - \frac{1}{7} + \frac{1}{9} - \cdots = \frac{\pi}{4}</math>.
+ \frac{1}{5} - \frac{1}{7} + \frac{1}{9} - \cdots = \frac{\pi}{4}</math>.


Nie inaczej ma się sprawa z tekstami. Mamy swiadomość, że przy odpowiednim
Nie inaczej ma się sprawa z tekstami. Mamy świadomość, że przy odpowiednim
nakładzie pracy i czasu potrafilibyśmy się nauczyć na pamięć
nakładzie pracy i czasu potrafilibyśmy się nauczyć na pamięć
wybranej księgi ,,Pana Tadeusza" (a może nawet całego poematu),
wybranej księgi „Pana Tadeusza˝ (a może nawet całego poematu),
natomiast zapamietanie -- powiedzmy -- 10 stron ,,losowych" symboli
natomiast zapamiętanie - powiedzmy - 10 stron „losowych˝ symboli
wydaje się przekraczać możliwości zwykłego człowieka. No chyba, że
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ę, ze
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ę  
jest to tekst w obcym języku, którego jednak jesteśmy w stanie się  
nauczyć.
nauczyć.
Linia 31: Linia 31:
liczb odpowiedź jest stosunkowo prosta: niektóre liczby całkowite można
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  
opisać znacznie krócej niż podając ich rozwinięcia dziesiętne; wystarczy wtedy  
zapamiętać ów krótszy ,,opis".  
zapamiętać ów krótszy „opis˝.  
W pierwszym przybliżeniu, za złożoność liczby bylibysmy więc skłonni uznać
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,
długość jej najkrótszego opisu. Jednak widzieliśmy już na pierwszym wykładzie,
Linia 42: Linia 42:


Przyjmiemy, że obiekty, które chcemy opisywać, to słowa
Przyjmiemy, że obiekty, które chcemy opisywać, to słowa
nad alfabetem <math> \{ 0, 1 \} </math>; zarówno liczby naturalne, jak też
nad alfabetem <math>\{ 0, 1 \}</math>; zarówno liczby naturalne, jak też
słowa nad większymi alfabetami można łatwo sprowadzić do tego przypadku.
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 <math>w </math> przyjąć długość najkrótszego
Ideą Kołmogorowa było, by za złożoność słowa <math>w</math> przyjąć długość najkrótszego
programu generującego to słowo, przy  wybranym języku programowania, np. języku
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
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
Turinga, jednak - jak wkrótce się przekonamy - wybór ten nie ma
większego znaczenia, podobnie jak zresztą wybór innego języka programowania
większego znaczenia, podobnie jak zresztą wybór innego języka programowania
(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
go uzywać bardzo intensywnie -- jeśli ktoś woli, może nadal myśleć o ulubionym języku
(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
programowania. Ważną własnością maszyn Turinga jest, że można je kodować za pomocą
go używać bardzo intensywnie - jeśli ktoś woli, może nadal myśleć o ulubionym języku
słów binarnych, jedno z wielu możliwych kodowań opisane jest w pierwszym wykładzie
programowania. Wszystkie rozważane przez nas maszyny Turinga są deterministyczne
z [[Złożoność Obliczeniowa/ZO Wykład 1|Złożoności obliczeniowej]].
i używają binarnego alfabetu wejściowego (<math>\{ 0, 1 \}</math>).
 
{{kotwica|wazne_kodowanie|}}
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  
[[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'', tj. maszyny <math> U</math>
Turing podał konstrukcję ''maszyny uniwersalnej''.
o następujących własnościach (zob. Języki, automaty i obliczenia, Wykład 12):
 
Będziemy używać następującej notacji:
 
* <math>M (w) \downarrow</math> : maszyna <math>M</math> zatrzymuje się dla danych wejściowych <math>w</math>.
 
* <math>M (w) \uparrow</math> : maszyna <math>M</math> zapętla się dla danych wejściowych <math>w</math>.


(1) jeśli na wejściu jest <math> w = v u</math>, gdzie <math>v</math> jest kodem
* <math>M (w) = v</math> : <math>M (w) \downarrow</math> i wynikiem obliczenia jest <math>v</math>.
pewnej maszyny <math> M_v </math>, to <math> U</math> symuluje działanie <math> M_v </math>
 
na <math> u</math>.
 
{{definicja|[Uniwersalna maszyna Turinga]|universe|'''Uniwersalna maszyna Turinga''' jest to dowolna maszyna <math>U</math> o następujących własnościach:
 
(1) jeśli na wejściu jest słowo <math> v u</math>, gdzie <math>v</math> jest kodem pewnej maszyny <math>M_v</math>, to <math>U</math> symuluje działanie <math>M_v</math> na <math>u</math>.


W szczególności
W szczególności


(1a) jeśli <math> M_v </math> się zatrzymuje, to <math> U</math> też się zatrzymuje
(1a) jeśli <math>M_v (u) \downarrow</math>, to <math>U (v u) \downarrow</math> i
z tym samym wynikiem, który oznaczamy <math> U(w) </math> (<math> = M_v (u)</math>),
<math>M_v (u) = U (v u)</math>,
 
(1b) jeśli <math>M_v (u) \uparrow</math>, to <math>U (v u) \uparrow</math>.
 
(2) Jeśli słowo wejściowe <math>w</math> nie ma prefiksu będącego kodem maszyny, to <math>U (w) \uparrow</math>.}}
 
{{definicja|[Złożoność Kołmogorowa]|Kołmogorow| '''Złożonością informacyjną Kołmogorowa''' słowa ''x'' jest
<center><math>
C_U (x) = \min \{ |v| :  U (v) = x \}
</math></center>
}}
 
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>M(y) = x</math>.
 
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
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
nie od <math>x</math>.
 
{{fakt||fakt_Kolmogorowa| Niech <math>M</math> będzie dowolną maszyną Turinga i niech
<center><math>
C_M (x) = \min \{ |v| : M(v) = x \}</math></center>
 
Wtedy istnieje taka stała <math>c_{UM}</math>, że
<center><math>
C_U (x) \leq C_M (x) +  c_{UM}
</math></center>
dla każdego <math>x</math>.
}}
 
{{dowod|||
Niech <math>\langle M \rangle</math> oznacza kod maszyny <math>M</math>. Wtedy, zgodnie z definicją
<math>U</math>, <math>M(v) = U ( \langle M \rangle v )</math>, dla każdego <math>v</math>, dla
którego którakolwiek ze stron jest określona. Mamy więc
<center><math>
C_U (x) \leq \min \{ |\langle M \rangle | + |v| : M(v) = x \} = C_M (x) + |\langle M \rangle |</math></center>
Wystarczy więc przyjąć <math>c_{UM} = |\langle M \rangle |</math>.
}}
 
{{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> C_U (x) \leq C_{U'} (x) +  c_{UU'}
</math></center>
dla każdego <math>x</math>.
}}
 
{{wniosek|[szacowanie]|wniosek_identycznosc| Istnieje stała <math>c_{U}</math>, że
<center><math>
C_U (x) \leq |x| + c_{U}</math></center>
}}
 
{{dowod|||
W powyższym fakcie wystarczy przyjąć za  <math>M</math> maszynę obliczajacą funkcję
identycznościową.
}}
 
 
Wybierając dowolną funkcję <math>x \mapsto v</math>, gdzie <math>U (v) = x</math>
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#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
którego  <math>C_U (x) \geq |x|</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).
}}
 
Intuicyjnie, w terminach języka Pascal, powiedzielibyśmy, że są to słowa, dla których nie ma
istotnie lepszego programu niż ''write'' ('<math>x</math>').
 
Wspomniana powyżej notacja <math>x \mapsto v</math> 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||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.
 
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> C_M (w_n) \leq | \mbox{bin } (n) |</math>.
Z drugiej strony, zgodnie z udowodnionym przed chwilą
[[Teoria informacji/TI Wykład 13#fakt_Kolmogorowa|Faktem]],
<center><math> C_U (w_n) \leq C_{M} (w_n ) +  c_{UM}
</math></center>
a założyliśmy, że  <math> n \leq C_U (w_n)</math>, co dałoby nam
<center><math>
n \leq | \mbox{bin } (n) | +  c_{UM}
</math></center>
dla wszystkich <math> n</math>, co jest oczywiście niemożliwe.
}}
 
==Złożoność bezprefiksowa==
Wprowadzimy teraz pewne techniczne wymaganie dla maszyn Turinga, które pociągnie za sobą modyfikację pojęcia informacyjnej złożoności algorytmicznej.  Ta nowa definicja
jest wygodniejsza przede wszystkim przy określeniu "prawdopodobieństwa stopu" i stałej Chaitina,
czym zajmiemy się na następnym wykładzie.
Otóż, podobnie jak w teorii kodów, wygodnie jest wykluczyć przypadek, kiedy jedno akceptowalne
słowo wejściowe jest prefiksem innego takiego słowa. Można argumentowć, że wprowadzenie odpowiedniego ograniczenia
na maszyny Turinga jest zgodne z intencją złożoności Kołmogorowa, ponieważ podobna
własność  jest spełniona w większości języków
programowania, gdzie koniec programu (również programu z danymi) jest ściśle określony.
 
Zbiór słów <math>L \subseteq \{ 0,1 \}^*</math> jest ''bezprefiksowy'', kiedy żadne słowo w <math>L</math> nie
jest prefiksem innego słowa w <math>L</math>. Maszynę Turinga <math>M</math> nazwiemy bezprefiksową, o ile
język <math>L (M)</math> jest bezprefiksowy. Z samej postaci maszyny nie jest łatwo wydedukować, czy jest ona bezprefiksowa, czy nie; w istocie nietrudno jest wykazać,
że w ogólności jest to problem nierozstrzygalny. Na pierwszy rzut oka jest to istotna przeszkoda dla stworzenia
"bezprefiksowej maszyny uniwersalnej".
Okazuje się jednak, że dowolną maszynę Turinga można w pewnym sensie efektywnie "poprawić" do maszyny bezprefiksowej
i w ten sposób z listy wszystkich maszyn Turinga otrzymać listę
maszyn bezprefiksowych
<math>N_0, N_1, \ldots</math>, tak że każdy częsciowo-obliczalny język bezprefiksowy ''L'' znajdzie się
na tej liście jako <math>L = L(N_i)</math>,  dla pewnego ''i''.
 
W dalszym ciągu, oprócz częsciowego porządku
[[Teoria informacji/TI Wykład 1#prefiks-drzewo|bycia prefiksem]] (oznaczanego <math>\leq</math>) będziemy
na zbiorze <math>\{ 0,1 \}^*</math> rozważać  porządek liniowy typu <math>\omega</math>.
Może to być na przykład tzw. ''porządek wojskowy'',
{{kotwica|wojsko|}}
który
porządkuje słowa najpierw według długości, a słowa tej samej
długości leksykograficznie:
<center><math>
u \sqsubseteq w \Longleftrightarrow |u| < |w| \vee ( |u| = |w| \wedge (\exists x,y,y') \,
u = x 0 y \wedge w = x 1 y' ) )
</math></center>
 
{{fakt|[Maszyny bezprefiksowe]|bezprefiksy|
Istnieje algorytm, który dla danej maszyny Turinga ''M'' znajduje maszynę <math>M'</math> taką, że
 
(i) <math>M'</math> jest bezprefiksowa.
 
(ii) <math>L(M') \subseteq L(M)</math>.
 
(iii) Jeśli <math>M(x) \downarrow</math> i dla każdego <math>y \neq x</math>, prefiksowo porównywalnego
z ''x'' (tzn. <math>y < x</math> lub <math>x < y</math>), zachodzi <math>M(y) \uparrow</math>, to
 
<center><math>
M'(x) = M(x) </math></center>
 
W szczególności, jeśli maszyna ''M'' jest bezprefiksowa, to


(1b) jeśli <math> M_v </math> się zapętla, to <math> U</math> też się zapętla.
<center><math>
L(M') = L(M)</math></center>
}}


(2) jeśli słowo wejściowe <math> w </math> nie ma prefiksu będącego kodem maszyny,
{{dowod|||
to <math> U</math> się zapętla.
Mając dane <math>M</math>, nasz algorytm konstruuje maszynę <math>M'</math>, której działanie opiszemy nieformalnym programem.


Zauważmy, że w powyższej definicji słowo <math> u</math> może być puste; wtedy
1. Input (dla <math>M'</math>) <math>= x = x_1 \ldots x_k</math>.
<math> U</math> symuluje działanie <math> M_v </math> startującej przy pustej taśmie.
Właśnie ten przypadek będzie nas szczególnie interesował.


{{definicja|[Złożoność Kołmogorowa]|Kołmogorow| '''Złożonością informacyjną Kołmogorowa''' słowa ''x'' jest
2. <math>A := \varepsilon</math>  (* ''A'' będzie przebiegać kolejne prefiksy <math>x</math> *).
 
3. Przeglądaj wszystkie słowa w <math>\{ 0, 1 \}^*</math> w porządku wojskowym
<math>\varepsilon = w_0, w_1, w_2, \ldots , w_i, \ldots</math> i
"ruchem zygzakowym" symuluj działanie <math>M</math> na wejściu <math>A w_i</math>.
 
Dokładniej, symulacja przebiega w fazach: <math>0,1,\ldots ,i, \ldots</math> W i-tej fazie wykonuje się kolejny krok w obliczeniach maszyny <math>M</math> na słowach
<math>A w_0,  A w_1, \ldots , A w_{i-1}</math> oraz pierwszy krok w obliczeniu <math>M</math> na
<math>A w_i</math>.
 
Jeśli w czasie tej symulacji stwierdzisz, że <math>M (A w_i) \downarrow</math>,  GOTO 4.
 
4.
'''if'''  <math>w_i = \varepsilon</math>  '''then'''
  '''if''' <math>A = x</math>  '''then''' STOP ACCEPT;
  Output <math> =  M (A w_i ) = M(x)</math>
  '''else'''  STOP REJECT
'''else'''
  '''if''' <math>A = x_1 \ldots x_{\ell } , \ell < k</math>
  '''then''' <math>A: = x_1 \ldots x_{\ell } x_{\ell + 1 }</math>; GOTO 3
  '''else''' (* <math>w_i > \varepsilon \wedge A = x</math> *)  STOP REJECT
 
Bezprefiksowość maszyny <math>M'</math> (warunek (i)) wynika z faktu, że obliczenie dla wejścia <math>x</math>
zawiera w sobie obliczenie dla wejścia  <math>x' < x</math>. Gdyby więc zaszły warunki akceptacji
dla wejścia <math>x'</math> (tzn. <math>w_i = \varepsilon</math> i <math>A = x'</math>), to
w przypadku wejścia <math>x</math> nastąpi wyjście przez (pierwsze) STOP REJECT.
 
Warunek (ii) jest oczywisty, bo jeśli <math>M'</math> daje Output, to
<math>M'(x) = M(x)</math>.
 
Wreszcie, jeśli  <math>M (x) \downarrow</math>, ale nie zachodzi to dla żadnego właściwego prefiksu ani rozszerzenia <math>x</math>, to ruch zygzakowy gwarantuje wykrycie <math>M (A w_i) \downarrow</math>, dla <math>A = x</math> i <math>w_i = \varepsilon</math>, a zatem STOP ACCEPT (warunek (iii)).
}}
 
 
{{definicja|[Bezprefiksowa uniwersalna maszyna Turinga]|bezprefiks_uniwers|
'''Bezprefiksowa uniwersalna maszyna Turinga''' jest to dowolna bezprefiksowa maszyna <math>U</math>, spełniająca warunek (2) definicji [[Teoria informacji/TI Wykład 13#universe|maszyny uniwersalnej ]] oraz spełniająca waruki (1a,b), o ile <math>v</math> jest kodem pewnej '''bezprefiksowej'''maszyny Turinga <math>M_v</math>.
 
(Sens: <math>U</math> jest uniwersalna dla maszyn bezprefiksowych.)}}
 
Maszyny takie istnieją:
 
{{fakt||bezprefiksy_ano|Maszyna <math>U'</math> otrzymana z maszyny uniwersalnej <math>U</math> ("zwykłej") przez konstrukcję z [[Teoria informacji/TI Wykład 13#bezprefiksy|Faktu]], jest bezprefiksową uniwersalną maszyną Turinga.}}
 
{{dowod|||
Jedynym nieoczywistym stwierdzeniem jest, że dla bezprefiksowej maszyny, <math>M_v (x) \downarrow</math>  pociąga za sobą <math>U' (v x) \downarrow</math>. Mamy <math>U (v x) \downarrow</math>; wystarczy więc sprawdzić, że zachodzą założenia warunku (iii) [[Teoria informacji/TI Wykład 13#bezprefiksy|Faktu]]. Istotnie, dla  <math>v x < y</math>  lub <math>v \leq y < v x</math>, mamy <math>U (y) \uparrow</math>, ponieważ <math>M_v</math> jest z założenia bezprefiksowa i <math>M_v (z) \uparrow \Longleftrightarrow U(vz) \uparrow</math>. Jeśli natomiast <math>y < v</math>, to również <math>U (y) \uparrow</math>, ponieważ [[Teoria informacji/TI Wykład 13#wazne_kodowanie|samo kodowanie]] jest bezprefiksowe (a więc <math>y</math> nie jest wtedy postaci <math>\langle M \rangle  u</math>, dla żadnej maszyny <math>M</math>, a w takim przypadku <math>U</math> się zapętla.)}}
 
{{kotwica|nie_wiadomo_po_co|}}
 
{{definicja|[Bezprefiksowa złożoność Kołmogorowa]|bez_Kołmogorow| '''Bezprefiksową złożonością informacyjną Kołmogorowa''' słowa ''x'' jest
<center><math>
K_U (x) = \min \{ |v| :  U (v) = x \}
</math></center>
gdzie <math>U</math> jest bezprefiksową maszyną uniwersalną.
}}
 
Kiedy wybór maszyny <math>U</math> nie ma znaczenia, będziemy czasem pisać po prostu <math>K(x)</math>.
 
Dowód [[Teoria informacji/TI Wykład 13#fakt_Kolmogorowa|Faktu]] gwarantującego niezmienniczość przechodzi
bez zmian.
 
{{fakt||fakt_bez_Kolmogorowa| Niech <math>M</math> będzie dowolną prefiksową maszyną Turinga i niech
<center><math>
K_M (x) = \min \{ |v| : M(v) = x \}</math></center>
 
Wtedy istnieje taka stała <math>c_{UM}</math>, że
<center><math>
<center><math>
K_U (x) = \min \{ |v| : v \mbox{ jest kodem i } U (v) = x \}
K_U (x) \leq K_M (x) + c_{UM}  
</math></center>
</math></center>
dla każdego <math>x</math>.
}}
}}


Innymi słowy, <math> K_U (x) </math> jest najkrótszym kodem maszyny, która generuje <math> x</math>
 
startując z pustej taśmy.
Natomiast nie mamy odpowiednika  [[Teoria informacji/TI Wykład 13#wniosek_identycznosc|Wniosku]],
bo maszyna obliczająca identyczność nie jest bezprefiksowa.

Aktualna wersja na dzień 22:17, 11 wrz 2023

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 (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. Wszystkie rozważane przez nas maszyny Turinga są deterministyczne i używają binarnego alfabetu wejściowego ({0,1}).

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.

Będziemy używać następującej notacji:

  • M(w) : maszyna M zatrzymuje się dla danych wejściowych w.
  • M(w) : maszyna M zapętla się dla danych wejściowych w.
  • M(w)=v : M(w) i wynikiem obliczenia jest v.


Definicja [Uniwersalna maszyna Turinga]

Uniwersalna maszyna Turinga jest to dowolna maszyna U o następujących własnościach:

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

W szczególności

(1a) jeśli Mv(u), to U(vu) i Mv(u)=U(vu),

(1b) jeśli Mv(u), to U(vu).

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

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

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

Innymi słowy, CU(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ść CU(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
CM(x)=min{|v|:M(v)=x}

Wtedy istnieje taka stała cUM, że

CU(x)CM(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

CU(x)min{|M|+|v|:M(v)=x}=CM(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
CU(x)CU(x)+cUU

dla każdego x.

Wniosek [szacowanie]

Istnieje stała cU, że
CU(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|=CU(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 CU(x)|x|.

Definicja [Słowa losowe]

Słowo x spełniające CU(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 xCU(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 CU(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 CM(wn)|bin (n)|. Z drugiej strony, zgodnie z udowodnionym przed chwilą Faktem,

CU(wn)CM(wn)+cUM

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

n|bin (n)|+cUM

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

Złożoność bezprefiksowa

Wprowadzimy teraz pewne techniczne wymaganie dla maszyn Turinga, które pociągnie za sobą modyfikację pojęcia informacyjnej złożoności algorytmicznej. Ta nowa definicja jest wygodniejsza przede wszystkim przy określeniu "prawdopodobieństwa stopu" i stałej Chaitina, czym zajmiemy się na następnym wykładzie. Otóż, podobnie jak w teorii kodów, wygodnie jest wykluczyć przypadek, kiedy jedno akceptowalne słowo wejściowe jest prefiksem innego takiego słowa. Można argumentowć, że wprowadzenie odpowiedniego ograniczenia na maszyny Turinga jest zgodne z intencją złożoności Kołmogorowa, ponieważ podobna własność jest spełniona w większości języków programowania, gdzie koniec programu (również programu z danymi) jest ściśle określony.

Zbiór słów L{0,1}* jest bezprefiksowy, kiedy żadne słowo w L nie jest prefiksem innego słowa w L. Maszynę Turinga M nazwiemy bezprefiksową, o ile język L(M) jest bezprefiksowy. Z samej postaci maszyny nie jest łatwo wydedukować, czy jest ona bezprefiksowa, czy nie; w istocie nietrudno jest wykazać, że w ogólności jest to problem nierozstrzygalny. Na pierwszy rzut oka jest to istotna przeszkoda dla stworzenia "bezprefiksowej maszyny uniwersalnej". Okazuje się jednak, że dowolną maszynę Turinga można w pewnym sensie efektywnie "poprawić" do maszyny bezprefiksowej i w ten sposób z listy wszystkich maszyn Turinga otrzymać listę maszyn bezprefiksowych N0,N1,, tak że każdy częsciowo-obliczalny język bezprefiksowy L znajdzie się na tej liście jako L=L(Ni), dla pewnego i.

W dalszym ciągu, oprócz częsciowego porządku bycia prefiksem (oznaczanego ) będziemy na zbiorze {0,1}* rozważać porządek liniowy typu ω. Może to być na przykład tzw. porządek wojskowy, który porządkuje słowa najpierw według długości, a słowa tej samej długości leksykograficznie:

uw|u|<|w|(|u|=|w|(x,y,y)u=x0yw=x1y))

Fakt [Maszyny bezprefiksowe]

Istnieje algorytm, który dla danej maszyny Turinga M znajduje maszynę M taką, że

(i) M jest bezprefiksowa.

(ii) L(M)L(M).

(iii) Jeśli M(x) i dla każdego yx, prefiksowo porównywalnego z x (tzn. y<x lub x<y), zachodzi M(y), to

M(x)=M(x)

W szczególności, jeśli maszyna M jest bezprefiksowa, to

L(M)=L(M)

Dowód

Mając dane M, nasz algorytm konstruuje maszynę M, której działanie opiszemy nieformalnym programem.

1. Input (dla M) =x=x1xk.

2. A:=ε (* A będzie przebiegać kolejne prefiksy x *).

3. Przeglądaj wszystkie słowa w {0,1}* w porządku wojskowym ε=w0,w1,w2,,wi, i "ruchem zygzakowym" symuluj działanie M na wejściu Awi.

Dokładniej, symulacja przebiega w fazach: 0,1,,i, W i-tej fazie wykonuje się kolejny krok w obliczeniach maszyny M na słowach Aw0,Aw1,,Awi1 oraz pierwszy krok w obliczeniu M na Awi.

Jeśli w czasie tej symulacji stwierdzisz, że M(Awi), GOTO 4.

4.

if  wi=ε  then
  if A=x  then STOP ACCEPT;
  Output =M(Awi)=M(x)
  else  STOP REJECT
else
  if A=x1x,<k 
  then A:=x1xx+1; GOTO 3
  else (* wi>εA=x *)  STOP REJECT

Bezprefiksowość maszyny M (warunek (i)) wynika z faktu, że obliczenie dla wejścia x zawiera w sobie obliczenie dla wejścia x<x. Gdyby więc zaszły warunki akceptacji dla wejścia x (tzn. wi=ε i A=x), to w przypadku wejścia x nastąpi wyjście przez (pierwsze) STOP REJECT.

Warunek (ii) jest oczywisty, bo jeśli M daje Output, to M(x)=M(x).

Wreszcie, jeśli M(x), ale nie zachodzi to dla żadnego właściwego prefiksu ani rozszerzenia x, to ruch zygzakowy gwarantuje wykrycie M(Awi), dla A=x i wi=ε, a zatem STOP ACCEPT (warunek (iii)).


Definicja [Bezprefiksowa uniwersalna maszyna Turinga]

Bezprefiksowa uniwersalna maszyna Turinga jest to dowolna bezprefiksowa maszyna U, spełniająca warunek (2) definicji maszyny uniwersalnej oraz spełniająca waruki (1a,b), o ile v jest kodem pewnej bezprefiksowejmaszyny Turinga Mv.

(Sens: U jest uniwersalna dla maszyn bezprefiksowych.)

Maszyny takie istnieją:

Fakt

Maszyna U otrzymana z maszyny uniwersalnej U ("zwykłej") przez konstrukcję z Faktu, jest bezprefiksową uniwersalną maszyną Turinga.

Dowód

Jedynym nieoczywistym stwierdzeniem jest, że dla bezprefiksowej maszyny, Mv(x) pociąga za sobą U(vx). Mamy U(vx); wystarczy więc sprawdzić, że zachodzą założenia warunku (iii) Faktu. Istotnie, dla vx<y lub vy<vx, mamy U(y), ponieważ Mv jest z założenia bezprefiksowa i Mv(z)U(vz). Jeśli natomiast y<v, to również U(y), ponieważ samo kodowanie jest bezprefiksowe (a więc y nie jest wtedy postaci Mu, dla żadnej maszyny M, a w takim przypadku U się zapętla.)

Definicja [Bezprefiksowa złożoność Kołmogorowa]

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

gdzie U jest bezprefiksową maszyną uniwersalną.

Kiedy wybór maszyny U nie ma znaczenia, będziemy czasem pisać po prostu K(x).

Dowód Faktu gwarantującego niezmienniczość przechodzi bez zmian.

Fakt

Niech M będzie dowolną prefiksową 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.


Natomiast nie mamy odpowiednika Wniosku, bo maszyna obliczająca identyczność nie jest bezprefiksowa.