Tak, masz rację, komputery są deterministyczne automatyzacji. Modele niedeterministyczne są bardziej przydatne do celów teoretycznych, czasem rozwiązanie deterministyczne nie jest tak oczywiste w definicji (lub powiedzmy opisie problemu) i tak trudno jest je znaleźć. Następnie jedno podejście polega na tym, że najpierw projektuje się model niedeterministyczny, który może być stosunkowo łatwy do zaprojektowania, a następnie próbuje przekształcić go w model deterministyczny. Poniżej próbowałem wykazać, co mam na myśli na przykładzie. Rozważ wyrażenie regularne:
(01)*01(0 + 1)*
Załóżmy teraz, że jeśli zostaniesz poproszony o narysowanie DFA dla języka wygenerowanego przez powyższe RE.
Z mojej wiedzy o projektowaniu federacjami, wiem, że (1) gdy *
występuje w wyrażeniu regularnym wskazany Potrzebuję odpowiada pętli w FA (2) operacje oddzielając podobnego a.b
środka coś takiego: .(q0)─a→(q1)─b→(q2)
Więc przy pierwszej próbie narysowałem NFA, takie jak:
Myślałem, że nie jest to rozwiązanie deterministyczne, ale wygląda na bardzo prosty FA, który można łatwo zaprojektować przy użyciu danego wyrażenia regularnego. Mój rodzaj analogii do pokazania podobieństwa między powyższym wyrażeniem regularnym a moim NFA jest następujący:
- Pętla w stanie q 0 powinna być dla
(01)*
01
(po (01)*
) daje(q0)─0→(q1)─1→(q2)
(0 + 1)*
daje pętlę własną w stanie q 2 dla etykiety 0, 1
Według mojej analogii uważam, że FA, który narysowałem powyżej, jest stosunkowo łatwy do wyciągnięcia z danego RE. I na szczęście w klasie automatów skończonych każdy model niedeterministyczny można przekształcić w równoważny model deterministyczny. Mamy algorytmiczną metodę konwersji NFA na DFA . Więc mogę łatwo przekonwertować powyżej NFA na DFA:
Inna część jest niestety nie zawsze możliwa jest konwersja modelu niedeterministycznego na model deterministyczny, na przykład klasa deterministycznego automatyzmu push-down jest podzbiorem klasy deterministycznego automatyzmu push-down „ diagram Venna ” i nie zawsze można przekonwertować NPDA na PDA.
Zwykle, gdy nie jest możliwe przekształcenie rozwiązania niedeterministycznego w deterministyczne, wówczas za pomocą rozwiązania niedeterministycznego definiujemy rozwiązanie deterministyczne w subdomenie (lub, powiedzmy, częściowej), zamiast w domenie pełnej. Lub definiujemy rozwiązanie na kilka innych sposobów (np. Chciwe podejście), które oczywiście mogą nie dać optymalnego rozwiązania .
Czasami niedeterminizm jest skutecznym mechanizmem precyzyjnego i skutecznego opisywania niektórych skomplikowanych problemów / rozwiązań, na przykład maszyny niedeterministyczne mogą służyć jako model algorytmu wyszukiwania i cofania się (czytaj: Jak ciąg znaków w modelu niedeterministycznym z wykorzystaniem wstecznego ). Modele przeciwstawne deterministyczne lepiej reprezentują wydajne, zminimalizowane i mniej zbędne rozwiązania.
W tym miejscu chciałbym również zacytować z Wikipedii użycie niedeterministycznego algorytmu :
W projektowaniu algorytmów często stosuje się niedeterministyczne algorytmy, gdy problem rozwiązany przez algorytm z natury pozwala na wiele wyników (lub gdy istnieje jeden wynik z wieloma ścieżkami, za pomocą których można go odkryć, każdy z nich jest równie preferowany). Co najważniejsze, każdy wynik, który wytwarza algorytm niedeterministyczny, jest prawidłowy, niezależnie od tego, jakie wybory algorytm dokonuje podczas pracy.
Wiele problemów można konceptualizować za pomocą niedeterministycznych algorytmów, w tym najbardziej znanego nierozwiązanego pytania w teorii obliczeń, P vs NP.
Jak wspomniał także @Keshlam w swoim komentarzu : „Niedeterminizm” jest w praktyce używany w odniesieniu do jakiejkolwiek nieprzewidywalności w wyniku jakiegoś procesu. Na przykład programy współbieżne wykazują zachowanie niedeterministyczne - dwa wykonania tego samego programu z tymi samymi danymi wejściowymi mogą dawać różne wyniki (jeśli nie zastosowano mechanizmu kontroli współbieżności ). Przeczytaj więcej na ten temat w „Przydatności braku determinizmu” .
Sugerowałbym również przeczytanie następujących linków:
1. Jaka jest różnica między niedeterminizmem a przypadkowością?
2. 9.2.2 Modele niedeterministyczne vs. probabilistyczne: (a). Niedeterministyczny: nie mam pojęcia, co zrobi natura. (b). Probabilistyczny: Obserwuję przyrodę i zbieram statystyki.
3. Programowanie niedeterministyczne