TM 识别语言ωωR - 由a,b组成的字符串的逆串
TM 设计思想:
设计一个TM,通过读取字符串ω并将其压入栈中,然后再读取字符串ωR并将其与栈中的字符逐一比较。如果所有字符都匹配成功,表示输入字符串属于语言ωωR。
TM 定义:
Q:状态集合{q0, q1, q2, q3, q4, q5, q6} Σ:输入字母表{a, b} Γ:栈字母表{a, b, Z0} δ:转移函数 q0:初始状态 q6:接受状态 Z0:空栈符号 F:停机状态
TM的转移函数定义如下:
δ(q0, 'a', Z0) = (q1, 'aZ0') // 将'a'压入栈中,进入状态q1 δ(q0, 'b', Z0) = (q2, 'bZ0') // 将'b'压入栈中,进入状态q2 δ(q1, 'a', 'a') = (q1, 'aa') // 将'a'压入栈中,保持状态q1 δ(q1, 'b', 'b') = (q1, 'bb') // 将'b'压入栈中,保持状态q1 δ(q1, 'ε', Z0) = (q3, Z0) // 当读取完字符串ω后,进入状态q3 δ(q2, 'a', 'a') = (q2, 'aa') // 将'a'压入栈中,保持状态q2 δ(q2, 'b', 'b') = (q2, 'bb') // 将'b'压入栈中,保持状态q2 δ(q2, 'ε', Z0) = (q4, Z0) // 当读取完字符串ωR后,进入状态q4 δ(q3, 'ε', 'a') = (q5, 'ε') // 弹出栈中的字符'a',进入状态q5 δ(q3, 'ε', 'b') = (q5, 'ε') // 弹出栈中的字符'b',进入状态q5 δ(q4, 'ε', 'a') = (q5, 'ε') // 弹出栈中的字符'a',进入状态q5 δ(q4, 'ε', 'b') = (q5, 'ε') // 弹出栈中的字符'b',进入状态q5 δ(q5, 'ε', Z0) = (q6, Z0) // 当栈为空时,进入接受状态q6
一实例的识别过程:
输入字符串为abba,首先将'a'和'b'依次压入栈中,然后继续将'a'和'b'压入栈中。接下来,开始逐一比较输入字符串的字符和栈中的字符。首先比较'a'和'a',然后比较'b'和'b',再比较'b'和'b',最后比较'a'和'a'。比较完后,继续弹出栈中的字符,直到栈为空。最终,TM进入接受状态q6,表示输入字符串abba属于语言ωωR。
原文地址: http://www.cveoy.top/t/topic/7P3 著作权归作者所有。请勿转载和采集!