Na studiach poznawaliśmy ogólnie teorię obliczeń, a dokładniej maszyny Turinga. Jednym z wielkich wyników teoretycznych jest to, że kosztem potencjalnie dużego alfabetu (symboli) można zmniejszyć liczbę stanów do zaledwie 2.
Szukałem przykładów różnych maszyn Turinga, a częstym przedstawionym przykładem jest dopasowywanie / sprawdzanie nawiasów. Zasadniczo sprawdza, czy ciąg nawiasów, np. (()()()))()()()
Jest zrównoważony (poprzedni przykład zwróciłby 0 za niezrównoważone).
Staram się, jak mogę, że mogę być tylko maszyną trójstanową. Chciałbym wiedzieć, czy ktokolwiek może sprowadzić to do teoretycznego minimum 2 i jakie było ich podejście / stany / symbole!
Dla wyjaśnienia, nawiasy są „umieszczone” pomiędzy pustą taśmą, więc w powyższym przykładzie
- - - - - - - (()()()))()()() - - - - - - -
byłoby wejściem na taśmę. Alfabet obejmowałyby (
, )
, 1
, 0
, -
, a *halt*
państwo nie liczy się jako państwo.
Dla porównania, trzy podejście stanowe, które mam, jest następujące: Opis stanów:
State s1: Looks for Closing parenthesis
State s2: Looks for Open parenthesis
State s3: Checks the tape to ensure everything is matched
Symbols: ),(,X
Przejścia wymienione jako:
Action: State Symbol NewState WriteSymbol Motion
// Termination behavior
Action: s2 - *halt* 0 -
Action: s1 - s3 - r
//Transitions of TM
Action: s1 ( s1 ( l
Action: s1 ) s2 X r
Action: s1 X s1 X l
Action: s2 ( s1 X l
Action: s2 X s2 X r
Action: s3 ( *halt* 0 -
Action: s3 X s3 X r
Action: s3 - *halt* 1 -
Wybacz nieformalny sposób zapisywania tego wszystkiego. Wciąż uczę się teoretycznych konstrukcji.