📜  为语言 L = {ww | 构建图灵机w∈{0,1}}

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

先决条件——图灵机
语言 L = {ww |赢; {0, 1}} 表示每个由 0 和 1 组成的字符串都属于这种语言。解决这个问题的逻辑可以分为两部分:

  1. 找到字符串的中点
  2. 找到中点后,我们匹配符号

示例 –让我们借助示例来理解它。让字符串1 0 1 1 0 1,所以 w = 1 0 1 并且字符串的形式是 (ww)。
我们要做的第一件事是找到中点。为此,我们将开头的 1 转换为 Y 并向右移动到字符串的末尾。这里我们将 1 转换为 y。

现在我们的字符串看起来像 Y 0 1 1 0 Y。现在向左移动直到找到 X 或 Y。当我们这样做时,将其右侧的 0 或 1 分别转换为 X 或 Y,然后在右侧执行相同操作结尾。现在我们的字符串看起来像 YX 1 1 X Y。此后,也转换这些 1,最后它看起来像 YXY Y X Y。

此时,您已经实现了第一个目标,即找到中点。现在将中点左侧的所有X和Y分别转换为0和1,因此字符串变为1 0 1 YX Y。 现在,将1转换为Y并向右移动,直到在字符串右侧部分的开头找到Y并将此 Y 转换为空白(由 B 表示)。现在字符串看起来像 Y 0 1 BX Y。

类似地,将其应用于 0 和 x 之后是 1 和 Y。在此字符串看起来像 YXYBB B。现在您没有 0 和 1,并且字符串右侧的所有 X 和 Y 都被转换为空白,因此我们的字符串将被接受。

假设:我们将用 X 替换 0,用 Y 替换 1。

使用的方法 –
的第一件事是找到字符串的中点,从字符串入分别X或Y的开始和转换0或1的从字符串的末尾对应的0或1到X或Y。连续这样做后,当所有的 0 和 1 分别转换为 X 和 Y 时,就会达到一个点。此时,您位于字符串的中点。这样,我们的第一个目标就实现了。

现在,将中点左侧的所有 X 和 Y 转换为 0 和 1。此时字符串的前半部分是 0 和 1 的形式。字符串的后半部分是 X 和 Y 的形式。

现在,从字符串的开头开始。如果您有一个 0,则将其转换为 X 并向右移动直到到达下半部分,如果我们找到 X,则将其转换为空白(B)。然后往回遍历,直到找到X或Y。我们将其右边的0或1分别转换为X或Y,并相应地将其在字符串后半部分的X或Y转换为空白(B)。

继续这样做,直到转换的字符串转换成X和Y和字符串右边为空白的所有符号的左边部分的所有符号。如果任何一部分已完全转换,但另一半中的某些符号仍保持不变,则该字符串将不被接受。如果您没有在后半部分找到 X 或 Y,分别对应前半部分的 0 或 1。那么字符串也不会被接受。

例子:

Input  : 1 1 0 0 1 1 0 0 
Output : Accepted

Input  : 1 0 1 1 1 0 1
Output : Not accepted
  • 第1步:
    如果符号为 0,则将其替换为 X 并向右移动
    如果符号为 1,则将其替换为 Y 并向右移动,
    转到状态 Q1 和步骤 2
    ———————————————
    如果符号是 X 用 X 替换它并向左移动或
    如果符号是 Y 用 Y 替换它并向左移动,
    转到状态 Q4 和步骤 5
  • 第2步:
    如果符号为 0,则将其替换为 0 并向右移动,保持相同状态
    如果符号为 1,则将其替换为 1 并向右移动,保持相同状态
    ———————————————
    如果符号是 X 用 X 替换它并向左移动或
    如果符号是 Y 用 Y 替换它并向左移动或
    如果符号是 $ 用 $ 替换它并向左移动,转到状态 Q2 和步骤 3

  • 第 3 步:
    如果符号为 0,则将其替换为 X 并向左移动,或
    如果符号为 1,则将其替换为 Y 并向左移动,
    转到状态 Q3 和步骤 4
  • 第四步:
    如果符号为 0,则将其替换为 0 并向左移动,保持相同状态
    如果符号为 1,则将其替换为 1 并向左移动,保持相同状态
    ———————————————
    如果符号是 X 用 X 替换它并向右移动或
    如果符号是 Y 用 Y 替换它并向右移动,
    转到状态 Q0 和步骤 1
  • 第 5 步:
    如果符号是 X 用 X 替换它并向左移动或
    如果符号是 Y 用 Y 替换它并向左移动
    转到状态 Q4 和步骤 6
  • 第 6 步:
    如果符号是 X,则将其替换为 0 并向左移动,保持相同状态
    如果符号是 Y 将其替换为 1 并向左移动,保持相同状态
    – – – – – – – – – – – – – – – – – – – –
    如果符号是 $ 用 $ 替换它并向右移动
    转到状态 Q4 和步骤 7
  • 第 7 步:
    如果符号为 0 替换为 X 并向右移动,转到状态 Q6 和步骤 8
    如果符号为 1 替换为 Y 并向右移动,转到状态 Q7 和步骤 9
    – – – – – – – – – – – – – – – – – – – –
    如果符号是 B 用 B 替换它并向左移动,接受字符串,转到最终状态 Q9
  • 步骤 8:
    如果符号为 0,则将其替换为 0 并向右移动,保持相同状态
    如果符号为 1,则将其替换为 1 并向右移动,保持相同状态
    如果符号是 B 用 B 替换它并向右移动,保持相同状态
    – – – – – – – – – – – – – – – – – – – –
    如果符号是 X 用 B 替换它并向左移动
    转到状态 Q8 和步骤 10
  • 第 9 步:

    如果符号为 0,则将其替换为 0 并向右移动,保持相同状态
    如果符号为 1,则将其替换为 1 并向右移动,保持相同状态
    如果符号是 B 用 B 替换它并向右移动,保持相同状态
    – – – – – – – – – – – – – – – – – – – –
    如果符号是 Y 用 B 替换它并向左移动
    转到状态 Q8 和步骤 10

  • 第 10 步:
    如果符号为 0,则将其替换为 0 并向左移动,保持相同状态
    如果符号为 1,则将其替换为 1 并向左移动,保持相同状态
    如果符号是 B 用 B 替换它并向左移动,保持相同的状态
    – – – – – – – – – – – – – – – – – – – –
    如果符号是 Y 用 Y 替换它并向右移动或
    如果符号是 X 用 X 替换它并向右移动
    转到状态 Q5 和步骤 7