图灵机算法

Turing Machine Algorithm

你能帮帮我吗?我需要为使用以下两个字母字母表 a 和 b 的单带图灵机编写代码。
所以程序应该显示两个词的公共前缀。
例如:
g(aab,aaaba) -> aa; g(_,abab) -> _; g(aaba,baa) -> _; g(_,_) -> _; g(babaab,babb) -> bab
其中 g 是机器的功能,下划线表示空词,在词之间我们有 space
我尝试实施以下选项:
如果在开头我们看到字母 a,那么我们将其删除并移动到第二个单词的开头。如果我们在那里也看到一个字母 a,我们也将其擦除,并在两个单词后写入 a 到 a space。之后我们 return 到第一个单词的开头并重复此操作。当第一个单词的第一个字母和第二个单词的第一个字母不再匹配时,我们将删除剩下的所有内容。 但是我在代码方面遇到了一些麻烦,因为每次操作后两个单词之间的 space 会变长,我不知道如何控制它。当第一个或第二个单词完全是普通前缀时也会出现问题,例如:
g(baa,baabab) -> baa

你的做法似乎很合理。从您的描述来看,您似乎只是无法概括某些单独的步骤。

例如,要处理两个单词之间不断增长的 spaces,请记住在程序中的任何时候,两个单词都被一个或多个 spaces 分隔。因此,针对一般情况实施搜索操作。

对于常见的前缀情况,您必须处理最终 运行 字符无法比较的情况。所以在删除第一个单词的字符后,在寻找第二个单词的开头时,检查您传递的第一个字符是字母还是space。如果它是 space,则您处于前缀大小写中,需要注意不要稍后尝试返回第一个单词,因为您已经将其全部删除并且只有 space 离开了。同样,如果第二个词是前缀,你可以在搜索输出时检测到这一点。

尝试将算法分解为基本步骤并单独测试每个步骤。当您可以孤立地专注于一个简单的步骤,而不是必须将其作为更大算法的一部分进行测试时,确保您正确处理极端情况要容易得多。这样做是调试代码的一项基本技能,因此将此视为一项很好的练习。即使一开始看起来很痛苦,也要确保你有一个结构化的方法来分析问题并将你的代码分解成更小的部分,你最终将能够解决任何问题。编码愉快!