В колледже мы изучали теорию вычислений в целом и машины Тьюринга более конкретно. Одним из замечательных теоретических результатов является то, что за счет потенциально большого алфавита (символов) вы можете уменьшить количество состояний до 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 -
Прости неформальный способ записать все это. Я все еще изучаю теоретические конструкции, стоящие за этим.