📜  为 L = {aibjck | 构建图灵机i*j = k; i, j, k ≥ 1}

📅  最后修改于: 2022-05-13 02:24:08.311000             🧑  作者: Mango

为 L = {a i b j c k | 构建图灵机i*j = k; i, j, k ≥ 1}

先决条件——图灵机
在给定的语言中,L = {a i b j c k | i*j = k; i, j, k ≥ 1},其中“a”、“b”和“c”的每个字符串都有一定数量的a,然后是一定数量的b,然后是一定数量的c。条件是这三个符号中的每一个都应至少出现一次。 “a”和“b”可以出现多次,但“c”的出现次数必须等于“a”和“b”的出现次数的乘积。假设字符串以“$”结尾。

例子 -

Input: a a b b b c c c c c c  
       Here a = 2, b = 3, c = 2 * 3 = 6  
Output: ACCEPTED
          
Input: a a b b c c c
       Here a = 2, b = 2, c = 3 but c should be 4 
Output: NOT ACCEPTED 

使用的方法 -从左侧扫描输入。

  1. 首先,将“a”替换为“X”并向右移动 1 步。然后跳过所有的 a 并向右移动。
  2. 当指针到达第一个'b'时停止。将一个“b”替换为“Y”,然后向右移动,跳过所有中间 b,并对应于被替换的“b”,现在将一个“c”替换为“Z”并向左移动。
  3. 现在向左移动,跳过所有的“Z”和“b”。
  4. 当指针到达最近的“Y”时向右移动。
  5. 如果指针指向“b”,则重复步骤 2 到 4,否则如果指针指向“Z”,则向左移动,同时将所有“Y”替换为“b”并跳过所有 a。
  6. 当指针指向最近的“X”时,向右移动一步。
  7. 如果指针仍指向“a”,则重复上述所有步骤,否则如果指针位于“b”,则向右移动,跳过所有“b”和“Z”。
  8. 当到达 $ 然后向左移动。该字符串已被接受。