TM 识别语言 ωωR:设计与实例分析
TM 设计思想:
为了识别语言 ωωR,我们可以设计一个多带图灵机。其中,第一个带用于读取输入字符串 ω 的前半部分,第二个带用于读取输入字符串的后半部分,并将其逆序存储在第三个带上。然后,我们可以比较第一个和第三个带上的内容来判断是否是 ω 的逆串。
TM 定义:
M = {Q, Σ, Γ, δ, q0, qaccept, qreject}
- Q:状态集合
- Σ:输入字母表
- Γ:带字母表
- δ:转移函数
- q0:初始状态
- qaccept:接受状态
- qreject:拒绝状态
具体定义如下:
- Q = {q0, q1, q2, q3, q4, q5, q6, q7, q8, q9}
- Σ = {'a', 'b'}
- Γ = {'a', 'b', '#'}
- q0:初始状态
- q9:接受状态
- q8:拒绝状态
转移函数 δ 的定义如下:
- δ(q0, 'a') = (q1, 'a', R):将输入字符串的第一个字符复制到第二个带上
- δ(q1, 'a') = (q1, 'a', R):将输入字符串的第一个字符复制到第二个带上
- δ(q1, 'b') = (q2, 'b', R):将输入字符串的第二个字符复制到第二个带上
- δ(q2, 'b') = (q2, 'b', R):将输入字符串的第二个字符复制到第二个带上
- δ(q2, '#') = (q3, '#', L):将第三个带上的内容清空
- δ(q3, 'a') = (q4, '#', L):将输入字符串的第一个字符复制到第三个带上,并将第一个带上的内容清空
- δ(q4, 'a') = (q4, 'a', L):将输入字符串的第一个字符复制到第三个带上
- δ(q4, 'b') = (q5, 'b', L):将输入字符串的第二个字符复制到第三个带上
- δ(q5, 'b') = (q5, 'b', L):将输入字符串的第二个字符复制到第三个带上
- δ(q5, 'a') = (q6, 'a', R):将第三个带上的内容复制回第一个带上
- δ(q6, 'a') = (q6, 'a', R):将第三个带上的内容复制回第一个带上
- δ(q6, 'b') = (q7, 'b', R):将第三个带上的内容复制回第一个带上
- δ(q7, 'b') = (q7, 'b', R):将第三个带上的内容复制回第一个带上
- δ(q7, '#') = (q8, '#', R):接受状态,输入字符串是ωωR
- δ(q0, 'b') = (q8, 'b', R):拒绝状态,输入字符串不是ωωR
实例 abba 的识别过程:
假设输入字符串为 abba。
- 初始状态为 q0,读取到 'a',将其复制到第二个带上,进入 q1。
- 在 q1 状态,读取到 'a',将其复制到第二个带上,继续保持在 q1 状态。
- 读取到 'b',将其复制到第二个带上,进入 q2 状态。
- 在 q2 状态,读取到 'b',将其复制到第二个带上,继续保持在 q2 状态。
- 读取到 'b',将其复制到第二个带上,进入 q2 状态。
- 在 q2 状态,读取到 'a',将第三个带上的内容清空,进入 q3 状态。
- 在 q3 状态,读取到 'a',将其复制到第三个带上,进入 q4 状态。
- 在 q4 状态,读取到 'a',将其复制到第三个带上,继续保持在 q4 状态。
- 读取到 'b',将其复制到第三个带上,进入 q5 状态。
- 在 q5 状态,读取到 'b',将其复制到第三个带上,继续保持在 q5 状态。
- 读取到 'b',将其复制到第三个带上,进入 q5 状态。
- 在 q5 状态,读取到 'a',将第三个带上的内容复制回第一个带上,进入 q6 状态。
- 在 q6 状态,读取到 'a',将第三个带上的内容复制回第一个带上,继续保持在 q6 状态。
- 读取到 'b',将第三个带上的内容复制回第一个带上,进入 q7 状态。
- 在 q7 状态,读取到 'b',将第三个带上的内容复制回第一个带上,继续保持在 q7 状态。
- 读取到 'a',将第三个带上的内容复制回第一个带上,进入 q7 状态。
- 在 q7 状态,读取到 '#',进入 q8 状态,拒绝状态,输入字符串不是 ωωR。
因此,输入字符串 abba 不是 ωωR。
原文地址: https://www.cveoy.top/t/topic/51K 著作权归作者所有。请勿转载和采集!