rys.1
rys.1
muuishuukai muuishuukai
109
BLOG

łańcuchy binarne 4: generatory 1

muuishuukai muuishuukai Nauka Obserwuj temat Obserwuj notkę 3

Jak dotąd przez "generator" rozumieliśmy algorytm czy program umożliwiający obliczenie pojedynczego łańcucha binarnego. Generatory takie możemy nazywać specyficznymi lub właściwymi. Jak widzieliśmy możliwości skracania takich generatorów są ograniczone. W praktyce nie jesteśmy w stanie obliczać wielu ?bardzo długich łańcuchów skończonych nie mówiąc już o nieskończonych. Jednakże oprócz generatorów właściwych istnieją jeszcze dwa bardzo interesujące generatory niewłaściwe (nazwy wprowadzam per analogiam do podzbiorów właściwych i niewłaściwych). Pierwszy z nich jest bardzo prosty: to generator umożliwiający obliczanie w n-tym kroku wszystkich łańcuchów n-długich. Działa on w schemacie drzewa binarnego i zilustrowany jest na rys.1. W pierwszym kroku wypisujemy dwa łańcuchy najkrótsze: 0 i 1. W drugim przepisujemy każdą pozycję z kroku poprzedniego:0,0,1,1 i dopisujemy do każdej pary 0,1 otrzymując 00,01,10,11 czyli wszystkie łańcuchy długości dwa. Powtarzając operację, dzięki banalnie łatwej procedurze możemy obliczać wszystkie, to znaczy nawet te niekompresowalne (specyficznie). To ciekawe, większości łańcuchów nie da się elegancko kompresować, ale wszystkie, nawet bardzo długie są kompresowalne i to ogromnie silnie. Rzecz jasna metoda ta ma zasadniczą wadę stanowiącą jedną ze zmór informatyków. Problem jest trudny, co w informatyce oznacza: wymaga wykładniczego czasu (lub pamięci) w stosunku do rozmiaru danych. Te dane to długość łańcuchów, które chcemy obliczyć czyli n. Wystarczy oczywiste spostrzeżenie że jest ich 2^n żeby poczuć o co chodzi. Jednym słowem "zasadniczo" możemy obliczać "nieobliczalne" obliczając wszystko. W praktyce będziemy jednak bardzo ograniczeni, Istnieje parę pomysłowych sztuczek mogących troszkę pomóc ale niezdolnych do usunięcia wykładniczo narastających obciążeń czasowych. Warto zaznaczyć, metodę tę rozważamy w tej chwili tylko w odniesieniu do dowolnie długich łańcuchów skończonych. Przypadek nieskończony rozważymy dalej osobno. Drugi generator niewłaściwy jest bardzo osobliwy, to generator losowy. Chcąc się nim zająć musimy od razu uczynić kilka uwag wstępnych. Po pierwsze bardzo wielu ludzi nie wierzy w istnienie takiego generatora to znaczy w występowanie w przyrodzie "prawdziwego" przypadku. Są wśród nich nawet fizycy kwantowi, których dziedzina uchodzi za zdecydowany bastion indeterminizmu w naukach przyrodniczych. Nic jednak nie stoi na przeszkodzie matematycznemu rozważaniu przypadku, rachunek prawdopodobieństwa jest tu sprawnym i wydolnym narzędziem. Po drugie nie wiadomo czy taki generator może być przedstawiony w postaci łańcucha binarnego. Sprawa jest otwarta chociaż wydaje się, że może to być niemożliwe (ale może wystarczać łańcuch długości 0). Słynne jest powiedzenie von Neumana: "kto próbuje programować procesy losowe ten grzeszy", teza oskarżenia została więc sformułowana ale dowód na jej rzecz nie. Jak działa generator losowy? w każdym kroku może równie dobrze zapisać 0 albo 1. Zatem może (choć nie musi) wygenerować dowolny łańcuch kompresowalny czy nie to już mu obojętne. Oczywiście konkretny, pewien łańcuch generowany jest z określonym (zazwyczaj znikomo małym) prawdopodobieństwem. Ponieważ łańcuchów "nieobliczalnych" (niekompresowalnych) jest znacznie więcej więc (prawdziwy) generator losowy prawie zawsze oblicza właśnie nieobliczalne (rekurencyjnie). Zauważmy: własności tej nie mają generatory pseudolosowe ponieważ same dają się zapisać skończonymi i niezbyt długimi programami czyli ostatecznie łańcuchami binarnymi. Łańcuchy przez nie obliczane są więc kompresowalne (między innymi dlatego paranoidalni, czyli dobrzy kryptografowie traktują takie generatory z podejrzliwością). Jeżeli generatory losowe działające nieskończenie długo lub/i nieskończenie szybko mogą obliczać liczby nieobliczalne i głównie to robią. Realistycznie rzecz biorąc żyjemy w świecie, w którym występują zjawiska losowe. Co to znaczy "realistycznie rzecz biorąc"? To znaczy, że nawet jeżeli nasz świat jest w swojej istocie całkowicie deterministyczny, na przykład tak jak wyobrażał to sobie Laplace to złożoność jego jest tak olbrzymia, że łancuchy "kodujące" parametry wielu procesów czy obiektów mają kosmiczne (dosłownie) długości i spokojnie możemy traktować je jako dla nas nieobliczalne i w tym sensie losowe. Precyzyjne rozstrzygnięcie problemu istnienia przypadku wymaga dokładnego zrozumienia jego natury a to stanowi problem naprawdę bardzo trudny i to pojęciowo a nie(koniecznie) obliczeniowo. Zatem dziedziny takie jak geografia czy historia zawsze będą bazować przedewszystkim na opisach uzyskiwanych dzięki obserwacji (to właśnie ich metoda "obliczania nieobliczalnego"). Nie każdy ma tekie szczęście jak mechanicy (klasyczni czy relatywistyczni).

Do przybliżonego szacowania losowości obiektów świetnie nadają się aparaty fotograficzne (najlepiej z kompresją "bezstratną"). Jeżeli sfotografujem białą równą ścianę, to plik będzie lekki, jeżeli blok to cięższy, a jeżeli suche igliwie pod sosną to jego rozmiary zbliżą się do maksymalnych.

Zachodzi pytanie: czy możemy odróżnić łańcuch losowy od nielosowego? Otóż ściśle rzecz biorąc nie. Dlaczego? Ponieważ generator losowy może wygenerować każdy łańcuch. Żeby odróżnić łańcuch losowy od nielosowego trzeba poznać metodę generowania ponieważ losowść jest własnością generatora a nie łańcucha. Jednak w praktyce tam gdzie mamy do czynienia z niekompresowalnością słusznie możemy podejrzewać generowanie losowe a w przpadku przeciwnym deterministyczne. I tak robimy ponieważ przypadek liczy zazwyczaj nieobliczalnie. 

muuishuukai
O mnie muuishuukai

Nowości od blogera

Komentarze

Inne tematy w dziale Technologie