Teoria informacji/TI Wykład 13
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 nawetnatomiast 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. Wszystkie rozważane przez nas maszyny Turinga są deterministyczne i używają binarnego alfabetu wejściowego ( ).
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:
- : maszyna zatrzymuje się dla danych wejściowych .
- : maszyna zapętla się dla danych wejściowych .
- : i wynikiem obliczenia jest .
Definicja [Uniwersalna maszyna Turinga]
(1) jeśli na wejściu jest słowo
, gdzie jest kodem pewnej maszyny , to symuluje działanie na .W szczególności
(1a) jeśli
, to i ,(1b) jeśli
(2) Jeśli słowo wejściowe , to . nie ma prefiksu będącego kodem maszyny, to .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
, żedla 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ęcWystarczy 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ąceTwierdzenie
Dowód
Przypuśćmy, że powyższa funkcja jest obliczalna. Wówczas obliczalna byłaby również funkcja, która binarną reprezentację liczby Faktem,
(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ąa założyliśmy, że
, co dałoby namdla wszystkich
, 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
jest bezprefiksowy, kiedy żadne słowo w nie jest prefiksem innego słowa w . Maszynę Turinga nazwiemy bezprefiksową, o ile język 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 , tak że każdy częsciowo-obliczalny język bezprefiksowy L znajdzie się na tej liście jako , dla pewnego i.W dalszym ciągu, oprócz częsciowego porządku bycia prefiksem (oznaczanego ) będziemy na zbiorze 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:
Fakt [Maszyny bezprefiksowe]
Istnieje algorytm, który dla danej maszyny Turinga M znajduje maszynę
taką, że(i)
jest bezprefiksowa.(ii)
.(iii) Jeśli
i dla każdego , prefiksowo porównywalnego z x (tzn. lub ), zachodzi , toW szczególności, jeśli maszyna M jest bezprefiksowa, to
Dowód
Mając dane
, nasz algorytm konstruuje maszynę , której działanie opiszemy nieformalnym programem.1. Input (dla
) .2.
(* A będzie przebiegać kolejne prefiksy *).3. Przeglądaj wszystkie słowa w
w porządku wojskowym i "ruchem zygzakowym" symuluj działanie na wejściu .Dokładniej, symulacja przebiega w fazach:
W i-tej fazie wykonuje się kolejny krok w obliczeniach maszyny na słowach oraz pierwszy krok w obliczeniu na .Jeśli w czasie tej symulacji stwierdzisz, że
, GOTO 4.4.
ifthen if then STOP ACCEPT; Output else STOP REJECT else if then ; GOTO 3 else (* *) STOP REJECT
Bezprefiksowość maszyny
(warunek (i)) wynika z faktu, że obliczenie dla wejścia zawiera w sobie obliczenie dla wejścia . Gdyby więc zaszły warunki akceptacji dla wejścia (tzn. i ), to w przypadku wejścia nastąpi wyjście przez (pierwsze) STOP REJECT.Warunek (ii) jest oczywisty, bo jeśli
daje Output, to .Wreszcie, jeśli
, ale nie zachodzi to dla żadnego właściwego prefiksu ani rozszerzenia , to ruch zygzakowy gwarantuje wykrycie , dla i , a zatem STOP ACCEPT (warunek (iii)).
Definicja [Bezprefiksowa uniwersalna maszyna Turinga]
Bezprefiksowa uniwersalna maszyna Turinga jest to dowolna bezprefiksowa maszyna maszyny uniwersalnej oraz spełniająca waruki (1a,b), o ile jest kodem pewnej bezprefiksowejmaszyny Turinga .
(Sens: , spełniająca warunek (2) definicji jest uniwersalna dla maszyn bezprefiksowych.)Maszyny takie istnieją:
Fakt
Dowód

Definicja [Bezprefiksowa złożoność Kołmogorowa]
gdzie
jest bezprefiksową maszyną uniwersalną.Kiedy wybór maszyny
nie ma znaczenia, będziemy czasem pisać po prostu .Dowód Faktu gwarantującego niezmienniczość przechodzi bez zmian.
Fakt
Wtedy istnieje taka stała
, żedla każdego
.
Natomiast nie mamy odpowiednika Wniosku,
bo maszyna obliczająca identyczność nie jest bezprefiksowa.