У коледжі ми вивчали теорію обчислення взагалі та машини Тьюрінга. Один з чудових теоретичних результатів полягає в тому, що ціною потенційно великого алфавіту (символів) можна зменшити кількість станів до лише 2.
Я шукав приклади різних машин Тюрінга, і загальним прикладом є матч / шашка "Парентез". По суті, він перевіряє, чи рядок дужок, наприклад (()()()))()()()
, врівноважений (попередній приклад повертав би 0 для незбалансованого).
Спробуйте, як я можу, я можу зробити так, щоб це було три державні машини. Я хотів би знати, чи хтось може звести це до теоретичного мінімуму 2 та яким був їхній підхід / стан / символи!
Просто для уточнення, дужки "просочені" між порожньою стрічкою, тому в наведеному вище прикладі
- - - - - - - (()()()))()()() - - - - - - -
буде введенням на стрічку. Алфавіт включатиме в себе (
, )
, 1
, 0
, -
, і *halt*
держава не вважається , як стан.
Для довідки, у мене є такий підхід трьох держав: Опис станів:
State s1: Looks for Closing parenthesis
State s2: Looks for Open parenthesis
State s3: Checks the tape to ensure everything is matched
Symbols: ),(,X
Переходи перераховані як:
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 -
Пробачте неформальний спосіб записати все це. Я все ще вивчаю теоретичні конструкції, що стоять за цим.