muuishuukai muuishuukai
103
BLOG

Łańcuchy binarne 5: obliczanie

muuishuukai muuishuukai Nauka Obserwuj temat Obserwuj notkę 5

Transformowanie łańcuchów nazywamy procesem obliczeniowym. Jest to szczególne ujęcie definicji procesu obliczeniowego w sensie Langtona (tego od słynnej mrówki Langtona, nieznających zachęcam do googlania): obliczanie jest procesem polegającym na przekształcaniu, gromadzeniu i generowaniu informacji. Definicja Langtona ma pewne zalety. Zastanówmy się czy spadający kamień rozwiązuje klasyczne równanie ruchu. Jeżeli nawet rozwiązuje to w jakimś bardzo analogicznym i przybliżonym sensie, biedak nie ma przecież nawet kartki i ołówka. Jeżeli jednak zapytamy czy jego upadek zmienia informację (odpowiedniego) układu o nasze wątpliwości znacznie maleją (choć niekoniecznie znikają). Zatem procesy przebiegające w przyrodzie możemy traktować jako obliczeniowe w sensie Langtona właśnie.

Tym co nas zazwyczaj interesuje jest przeprowadzenie łańcucha sformułowania problemu w łańcuch sformułowania jego rozwiązania. Oczywiście jeszcze bardziej może nas interesować samo rozwiązanie ale o tym potem. Zadajmy zatem pytanie: czy istnieje uniwersalna maszyna, to znaczy maszyna potrafiąca przekształcić każdy łańcuch w każdy łańcuch? Taka maszyna potrafiłaby, w szczególności, przeprowadzić łańcuch dowolnego problemu w łańcuch sformułowania rozwiązania. Odpowiedź jest znana: istnieje. Istnieje ponieważ do przeprowadzenia dowolnego łańcucha binarnego w dowolny inny wystarczają cztery operacje: usunięcia pozycji, dopisania 1, dopisania 0, zamiany pozycji na przeciwną. Każdą z tych operacji możemy zapisać dwuelementowym łańcuchem binarnym (ponieważ jest ich cztery) i z takich par tworzyć program maszyny uniwersalnej. Sytuacja wygląda więc tak:

łańcuch problemu: 0001

łancuch programu: 01010101

łańcuch wyniku: 1110

Jak widać przyjęliśmy, że 01 koduje zamianę pozycji na przeciwną. Jednym słowem dla każdej pary łańcuchów istnieje łańcuch programu transformujący jeden z elementów tej pary w drugi. Zatem maszyna uniwersalna istnieje. Nic nowego, najlepiej znanym jej przypadkiem jest maszyna Turinga. Pojawia się jednak pewien kłopot: chcąc uzyskać sformułowanie rozwiązania musimy za każdym razem wprowadzać program, musimy znać metodę transformacji. Zadajmy więc pytanie: czy może istnieć maszyna znajdująca dla siebie odpowiednie programy, rozwiązująca także problem znalezienia programu? Taka, której wystarczy podać zadanie i poczekać na rozwiązanie i działająca przynajmniej teoretycznie w każdym przypadku? Maszynę taką możemy nazywać maszyną totalną. Pod pewnym warunkiem maszyna taka istnieje i to nie jedna. Pierwszą grupę tworzą maszyny wykorzystujące przeszukiwanie siłowe to znaczy omówione już generowanie wszystkich łańcuchów n-długich w schemacie drzewa binarnego. Maszyna siłowo (brute force) generuje po kolei wszystkie łańcuchy binarne i sprawdza je jako łańcuchy programów transformujących czyli sprawdza rozwiązanie i akceptuje łańcuch prowadzący do sprawdzonego. W tym momencie sformułowaliśmy warunek konieczny i wystarczający dla istnienia maszyn totalnych. Po pierwsze muszą mieć możliwość sprawdzania, po drugie klasa problemów rozwiązywalnych zawęża się do klasy problemów o sprawdzalnych rozwiązaniach. Jednak zawężenie klasy problemów jest właściwie tylko pozorne. Dlaczego? Ponieważ rozwiązanie problemu niesprawdzalnego jest trywialne, każdy łańcuch jest odpowiedzią a najelegantszą łańcuch pusty. Tam gdzie rzecz jest niesprawdzalna możemy opowiadać cokolwiek, ale oszczędniej jest siedzieć cicho i taki jest właśnie sens słynnej brzytwy Ockhama. Oczywiście nie powinno nas to powstrzymywać przed stawianiem aktualnie niesprawdzalnych hipotez, przed twórczością nie będącą niczym innym jak właśnie przeszukiwaniem możliwości. Jeżeli jednak dobrze się nam powodzi możemy snuć dowolnie długie i fantastyczne opowieści ale musi nas być na nie stać (musimy mieć na nie odpowiedni czas obliczeniowy lub luksusowe nadwyżki pamięci). Siłowa maszyna totalna potrafi obliczyć każdą funkcję rekurencyjnie to znaczy metodą systematycznego i powtarzalnego przeszukiwania łańcuchów generowanych deterministycznie. Rzecz jasna maszyna taka jest abstrakcyjnym konstruktem teoretycznej informatyki i z powodu wykładniczej złożoności obliczeniowej jej realne możliwości są niewielkie (chociaż nieco większe niż mogłoby się wydawać, zwłaszcza jeżeli potrafimy użyć pewnych sztuczek). Drugi rodzaj maszyn totalnych bazuje na generowaniu losowym. Są one także zdolne do obliczania każdej funkcji obliczalnej metodami nierekurencyjnymi (losowymi). Przy ich użyciu możemy generować szybko długie łańcuchy ale liczymy na szczęście. Oczywiście (w przypadku łańcuchów skończonych) maszyna losująca w schemacie bezzwrotnym także daje gwarancję rozwiązania w czasie porównywalnym z przeszukującą siłowo, obie są więc równoważne w tym sensie, że "przeszukują wszystko". Czytelnik zorientowany w problematyce hipotezy Churcha-Turinga zauważy zapewne, że maszyny totalne stanowią tu pewne rozwiązanie. Co ważne, maszyny te mogą obliczać także liczby "nieobliczalne" co wynika z własności ich generatorów. Maszyny uniwersalne, maszyny totalne mogą wydawać się majaczeniami szalonego informatyka, a jednak są to najbardziej rozpowszechnione maszyny na świecie. Każdy z nas ma ich w sobie i przy sobie co najmniej ze dwieście bilionów. Kwasy nukleinowe kodujące informację organizmów składają się z czterech nukleotydów (kod czwórkowy). Istnieją trzy podstawowe rodzaje losowych bądź nie mutacji punktowych: delecja (usunięcie), insercja (wstawienie), substytucja (zamiana). Skąd np. bakteria "wie", że rozwiązała problem? Stąd, że jest. Co ciekawe, w toku procesu obliczeniowego (ewolucji) pojawiają się złożone struktury neuronalne zdolne do przeszukiwania siłowego optymalizowanego dzięki pamięci (wiadomo, że pewnych obszarów nie warto przeszukiwać).

muuishuukai
O mnie muuishuukai

Nowości od blogera

Komentarze

Inne tematy w dziale Technologie