📜  为 L = {an bm a(n+m) | 构建图灵机n,m≥1}

📅  最后修改于: 2021-09-27 06:23:21             🧑  作者: Mango

L = {a n b m a (n+m) | n,m≥1} 代表一种我们只使用 2 个字符的语言,即 a 和 b。语言的第一部分可以是任意数量的“a”(至少为 1)。第二部分是任意数量的“b”(至少为 1)。语言的第三部分是“a”的数量,其计数是字符串第一部分中 a 的计数和字符串第二部分中 b 的计数之和。任何属于此类别的字符串都将被该语言接受。字符串的开头和结尾用 $ 符号标记。

例子:

Input  : a a b b b a a a a a  // n=2, m=3 
Output : Accepted

Input  : a a b a a a a       // n=2, m=1 
Output : Not accepted

使用的方法——

  1. 将第一部分中的“a”转换为“X”,然后忽略所有中间符号向右移动。当在“b”之后遇到“a”时,将其转换为“Z”并向左移动并停在“X”旁边的位置。重复上述过程。
  2. 当第一部分中的所有 a 都被转换后,对第二部分应用相同的过程。在第三部分将“b”转换为“Y”,将“a”转换为“Z”。

    当整个第一和第二部分都被转换,如果第三部分也被转换,那么字符串将被接受,否则将不被接受。

    脚步 –

    Step-0:将“a”转换为“X”,向右移动进入状态1。如果符号是“b”,忽略它,向右移动进入状态4。

    Step-1:如果符号是“a”,忽略它并向右移动,保持相同状态。如果符号是“b”,忽略它,向右移动并转到状态 2。

    Step-2:如果符号是“Z”,忽略它并向右移动,保持相同状态。如果符号是“b”,忽略它并向右移动,保持相同的状态,如果符号是“a”,则将其转换为“Z”,向左移动并转到状态3。

    Step-3:如果符号是“Z”,忽略它并向左移动,保持相同状态。如果符号是“b”,忽略它并向左移动,保持相同状态。如果符号是“a”,忽略它向左移动,保持相同状态,如果符号是“X”,忽略它向右移动,进入状态0。

    Step-4:如果符号是“b”,忽略它向左移动,进入状态5,如果符号是“Z”,忽略它向左移动,进入状态5。

    Step-5:将“b”转换为“Y”,向右移动进入状态6,如果符号是“Z”,忽略它向右移动,进入状态8。

    Step-6:如果符号是“Z”,忽略它并向右移动,保持相同状态。如果符号是“b”,则忽略它并向右移动,保持相同状态,如果符号是“a”,则将其转换为“Z”,向左移动并转到状态7。

    Step-7:如果符号是“Z”,忽略它并向左移动,保持相同状态。如果符号是“b”,忽略它向左移动,保持相同状态,如果符号是“Y”,忽略它向右移动,进入状态5。

    Step-8:如果符号是“Z”,忽略它向右移动,保持相同状态,如果符号是“$”,忽略它向左移动,转到状态9。

    步骤 9:接受字符串