Przeglądam teorię obliczeń dla zabawy i to pytanie nęka mnie od dłuższego czasu (zabawne, że nie pomyślałem o tym, gdy nauczyłem się teorii automatu w mojej szkole licencjackiej). Więc „dlaczego” dokładnie badamy deterministyczne i niedeterministyczne automaty skończone (DFA / NFA)? Oto kilka odpowiedzi, które wymyśliłem po monologowaniu, ale wciąż nie widzę ich ogólnego wkładu w moment „aha”:
- Studiować, czym są i nie są w stanie np. Mieć ograniczeń
- Dlaczego?
- Ponieważ są one podstawowymi modelami obliczeń teoretycznych i stanowiłyby podstawę innych, bardziej wydajnych modeli obliczeń.
- Co czyni je „podstawowymi”? Czy to dlatego, że mają tylko jeden bit pamięci i przejścia stanu?
- OK, a co z tego? W jaki sposób wszystko to przyczynia się do odpowiedzi na pytanie dotyczące obliczalności? Wydaje się, że maszyny Turinga naprawdę dobrze to rozumieją i istnieją „mniejsze” modele obliczeń, takie jak PDA, DFA / NFAs / Regexes itp. Ale jeśli nie znamy FA, to na czym im brakuje?
Więc chociaż „rozumiem” do pewnego stopnia, nie jestem w stanie odpowiedzieć sobie na to pytanie? Jak najlepiej wytłumaczysz „po co studiować D / N-FA”? Na jakie pytanie chcą odpowiedzieć? Jak to pomaga i dlaczego jest to pierwsza rzecz nauczana w teorii automatów?
PS: Mam świadomość różnych aplikacji leksykograficznych i dopasowywania wzorców, które można zaimplementować jako takie. Nie chcę jednak wiedzieć, do czego można go używać praktycznie, ale jaki był powód jego użycia / wynalazku / projektu podczas kulminacji studiowania teorii obliczeń. Historycznie rzecz biorąc, co doprowadziło nas do tego i do czego to ma prowadzić zrozumienie „aha”? Jeśli miałbyś wyjaśnić ich znaczenie studentom CS dopiero rozpoczynającym naukę teorii automatów, jak to zrobiłeś?
Odpowiedzi:
Osobiście podobało mi się kilka Aha! chwile od studiowania podstawowej teorii automatów. NFA i DFA tworzą mikrokosmos dla teoretycznej informatyki jako całości.
Mógłbym kontynuować. (I dalej.) * Uważam, że warto mieć automaty z tyłu głowy i co jakiś czas je przywoływać, aby zrozumieć nową koncepcję lub uzyskać intuicję na temat matematycznych pomysłów na wysokim poziomie. Wątpię, aby wszystko, o czym wspomniałem powyżej, można było przekazać w kilku pierwszych wykładach kursu, a nawet w pierwszym kursie. Są to długoterminowe nagrody oparte na początkowej inwestycji dokonanej w początkowych wykładach kursu teorii automatów.
Aby odnieść się do twojego tytułu: Nie zawsze szukam oświecenia, ale kiedy to robię, wolę skończone automaty. Pozostań spragniony, przyjacielu.
źródło
Istnieje wiele dobrych teoretycznych powodów, aby badać N / DFA. Dwa, które natychmiast przychodzą na myśl, to:
Maszyny Turinga (naszym zdaniem) rejestrują wszystko, co jest obliczalne. Możemy jednak zapytać: jakie części maszyny Turinga są „niezbędne”? Co się stanie, gdy ograniczysz maszynę Turinga na różne sposoby? DFA to bardzo poważne i naturalne ograniczenie (pozbawianie pamięci). PDA są mniej surowym ograniczeniem itp. Teoretycznie interesujące jest zobaczyć, co daje ci pamięć i co się stanie, gdy przejdziesz bez niej. Wydaje mi się to bardzo naturalnym i podstawowym pytaniem.
Maszyny Turinga potrzebują nieskończonej taśmy. Nasz wszechświat jest skończony, więc w pewnym sensie każde urządzenie komputerowe jest DFA. Wydaje się, że jest to ważny i znowu naturalny temat do nauki.
Pytanie, dlaczego warto studiować DFA, przypomina pytanie, dlaczego należy nauczyć się twierdzenia Godela o kompletności, gdy prawdziwą interesującą rzeczą jest jego twierdzenie o niekompletności .
Powodem, dla którego są pierwszym tematem w teorii automatów jest to, że naturalne jest budowanie do bardziej skomplikowanych trybów od mniej skomplikowanych.
źródło
Aby dodać jeszcze jedną perspektywę do pozostałych odpowiedzi: ponieważ możesz robić rzeczy za pomocą automatów skończonych, w przeciwieństwie do maszyn Turinga.
Niemal każda interesująca właściwość maszyn Turinga jest nierozstrzygalna. Przeciwnie, w przypadku automatów skończonych prawie wszystko jest rozstrzygalne. Równość językowa, integracja, pustka i uniwersalność są rozstrzygalne. W połączeniu z tymi skończonymi automatami są zamknięte pod prawie każdą operacją, o której myślisz, a że operacje te są obliczalne, możesz zrobić prawie wszystko, co kiedykolwiek chciałbyś zrobić z automatami skończonymi.
Oznacza to, że jeśli możesz uchwycić coś za pomocą automatów skończonych, automatycznie zyskujesz wiele narzędzi do analizy. Na przykład podczas testowania oprogramowania systemy i ich specyfikacje można modelować jako automaty skończone. Następnie można automatycznie przetestować, czy system poprawnie implementuje specyfikację.
Maszyny Turinga i skończone automaty uczą zatem ludzi interesującego i wszechobecnego kontrastu: więcej mocy opisowej idzie w parze z mniejszą łatwością obsługi. Automaty skończone niewiele mogą opisać, ale możemy przynajmniej z nimi coś zrobić.
źródło
Stan. musisz nauczyć się, że można modelować świat (w przypadku niektórych problemów) jako skończoną przestrzeń stanu i w tych ustawieniach można myśleć o obliczeniach. Jest to prosty wgląd, ale niezwykle przydatny, jeśli wykonujesz jakiekolwiek programowanie - możesz napotkać stan raz za razem, a FA daje ci sposób na ich przemyślenie. Uważam to za wystarczającą wymówkę do nauczania całej klasy. Oczywiście stan może być deterministyczny lub niedeterministyczny. Tak więc DFA i NFA, ale możesz konwertować między nimi itp.
Drugą rzeczą do nauczenia jest twierdzenie Haltinga. Co jest związane z twierdzeniem o niekompletności Godela. (Nie możesz zbudować maszyny, która może obliczyć wszystko, i istnieją matematyczne twierdzenia, których nie można ani udowodnić, ani obalić, i jako takie musiały być traktowane jako aksjomaty. To znaczy, żyjemy w świecie, który nie ma skończonego opisu ani prawdziwego wyrocznie - tak dla nas!)
Teraz zrobiłem licencjat z matematyki i przyzwyczaiłeś się do myśli, że uczysz się rzeczy, których nie masz pojęcia, dlaczego się uczysz (teoria grupy, teoria miar, teoria mnogości, przestrzenie Hilberta itp. Itd. Itd.) , BTW]). Jest coś do powiedzenia na temat uczenia się, jak się uczyć - następnym razem będziesz musiał nauczyć się dziwnej matematyki (ponieważ musisz jej użyć, aby zrobić coś tam w prawdziwym świecie), która wygląda bardzo dziwnie. Trzecią rzeczą, której należy się nauczyć, jest dojrzałość matematyczna - umiejętność dyskutowania na różne tematy, wiedza o tym, czy dowody są poprawne czy nie, spisywanie dowodów itp. Jeśli już to masz, ten kurs jest łatwy i nie przejmujesz się tym zbytnio wiele, dlaczego się tego uczysz.
Z wyjątkiem tych, kurs jest całkowitą stratą czasu, podobnie jak wszystko inne. W szczególności możesz prowadzić szczęśliwe życie, nie znając tych rzeczy. Ale to dosłownie prawda o całej wiedzy. Mniej więcej. Dla mnie warto studiować na uniwersytecie, jeśli spojrzysz na świat inaczej po nauce. To zdecydowanie jeden z kursów, który zmienił sposób myślenia o świecie. O co jeszcze możesz zapytać?
źródło
Chociaż tak naprawdę nie jest to powód, dla którego zostały pierwotnie zbadane, skończone automaty i rozpoznawane przez nich zwykłe języki są na tyle łatwe do przełożenia, że zostały użyte jako elementy składowe bardziej skomplikowanych teorii matematycznych. W tym kontekście zobacz szczególnie automatyczne grupy (grupy, w których elementy mogą być reprezentowane przez łańcuchy w zwykłym języku i w których produkty elementów przez generatory grup można obliczyć za pomocą przetworników skończonych stanów) i miękkie przesunięcia (pod przesunięcia przestrzeni przesunięcia, których zakazane słowa tworzą zwykły język). Istnieją więc powody, aby je studiować, nawet jeśli interesuje Cię czysta matematyka, a nie informatyka.
Automaty skończone zostały również wykorzystane w projektowaniu algorytmów dla innych rodzajów obiektów. Na przykład algorytm Culika do testowania odwracalności jednowymiarowego automatu komórkowego obejmuje konstruowanie, modyfikowanie i testowanie właściwości niektórych NFA. A artykuł FOCS z 1986 roku autorstwa Natarajana pokazał, jak rozwiązać pewien problem w projektowaniu mechanicznych linii montażowych, redukując go do obliczeń dotyczących automatów skończonych.
źródło
Zadajesz (przynajmniej) dwa różne pytania: (a) Jakie części teorii opierają się obecnie na automatach skończonych? (b) Dlaczego przede wszystkim opracowano automaty skończone? Myślę, że najlepszym sposobem rozwiązania tego ostatniego jest przyjrzenie się starym papierom, takim jak:
Oto dwa pierwsze akapity:
Krótko mówiąc, zostały one opracowane jako model prawdziwych komputerów, które mają ograniczone zasoby.
źródło
Innym powodem są stosunkowo praktyczne modele teoretyczne. Maszyna Turinga, oprócz niemożliwości nieskończonej taśmy, jest dość niezręczna w stosunku do tego, jak to jest programować komputer (zwróć uwagę, że nie jest to dobra analogia na początek!). PDA i DFA są jednak całkiem podatne na bycie modelami rzeczywistych programów w tym sensie, że projekt PDA / DFA często można łatwo przekształcić w prawdziwy program. Na przykład projekt kompilatora wykorzystuje je w szerokim zakresie. Tak więc w tego rodzaju punktach łączących teorię i praktykę rozumiemy, w jaki sposób wszystko to łączy się oraz co możemy, a czego nie możemy zrobić.
źródło
Sprawdź grę „Living Binary Adder” tutaj: http://courstltc.blogspot.com/2012/12/living-binary-adder-game.html Kiedyś prezentowałem tę grę moim studentom we wczesnych rozdziałach o DFA / NFA. Ilustruje dwie ważne rzeczy w teorii automatów:
To czasem przynosi uczniom chwilę „Aha”.
źródło
Koncepcja DFA jest bardzo przydatna przy projektowaniu wydajnych rozwiązań wielu rodzajów problemów. Jednym z przykładów jest sieć. Każdy protokół można zaimplementować jako maszynę stanu. Wdrożenie rozwiązania w ten sposób sprawia, że kod jest prostszy, a prostszy oznacza niższy wskaźnik defektów. Oznacza to również, że zmiany w kodzie są łatwiejsze i mają mniejszy wpływ, ponownie mając niższy wskaźnik wad.
Niektórym trudno jest postrzegać protokół sieciowy jako maszynę stanową, ale dla tych, którzy mogą sprawić, że skok będzie bardzo satysfakcjonujący pod względem zwrotu wysiłku.
źródło
Właściwie to moi uczniowie czasami dokładnie o to pytają - po spędzeniu dużej części semestru na automatach skończonych i wreszcie dotarciu do maszyn Turinga. Po co spędzać tyle czasu na słabszym formalizmie, skoro dostępny jest silniejszy? Dlatego wyjaśniam nieodłączny kompromis między mocą ekspresyjną a złożonością analityczną. Bogatsze modele są zazwyczaj trudniejsze do analizy. Dychotomia DFA vs. TM jest ekstremalna, ponieważ problem członkostwa jest dla jednej osoby trywialny, a dla drugiej nieobliczalny. Mniej ekstremalnym przykładem może być DFA vs. PDA. Problem członkostwa dla tych ostatnich okazuje się być skuteczny do rozwiązania, ale rozwiązanie wcale nie jest trywialne. Widzimy to w wielu gałęziach matematyki i nauk ścisłych: studiuj prosty model, aby uzyskać jak najdokładniejsze zrozumienie, co zwykle prowadzi również do wglądu w bardziej złożone modele.
źródło
Widzę kilka odpowiedzi nazywających FM mniejszymi niż maszyny Turinga.
W zajęciach podyplomowych skupiłem się głównie na ich równoważności, a nie na wyróżnieniach. Dla każdego badanego modelu FSM musieliśmy udowodnić ich równoważność z maszynami Turinga. Odbywa się to poprzez wdrożenie maszyny Turinga w FSM. IIRC, badaliśmy także niektóre inne modele obliczeniowe, które nie wdrażają TM, ale zapominam, jakie to były. Chodzi o to, że jeśli możesz zaimplementować TM, możesz uruchomić dowolny program TM na modelu, biorąc pod uwagę wystarczająco duży analog taśmy dla uruchomionego problemu.
Odpowiedź na pytanie brzmiała: TM jest podstawowym modelem obliczeniowym, ale niezbyt praktycznym, jeśli chodzi o budowę użytecznych maszyn. Stąd modele FSM.
Zostało mi to przyniesione do domu, gdy mniej więcej w tym samym czasie (1984) odkryłem język FORTH. Jego silnik wykonawczy jest oparty na czystej realizacji PDA z dwoma stosami. Idąc głębiej, lubię ten sam silnik w kompilatorach ekspresji
Chociaż dla mnie prawdziwym wpływem FSM było odkrycie książki „Teoria automatów skończonych” Trakhtenbrota i Korzyńskiego (?), Gdy miałem 18 lat, odkrycie, które zasadniczo dało mi karierę.
źródło