O(n * log(n))图灵机只有1个磁带用于"相同数量的a' s和b' s给定的单词"?

时间:2018-05-08 06:35:54

标签: algorithm time-complexity turing-machines

我需要为语言L = {w |构建一个带有1个磁带的TM w是一个包含相同数量的a和b的单词,例如:abba,aababb}

TM必须只有1个磁带,并且必须在O(n log(n))时间内运行。我知道如何在O(n ^ 2)中做到这一点,但我不知道如何使它 log(n)。

如果我有输入w =" aaaa .... abbbbb .... bb"例如,在w = a ^ n / 2 * b ^ n / 2(这是最坏的情况)的情况下,我每次都会倒退(为每个b删除每个a),所采取的步骤将是1, 2,3,4 .....ñ。 Sum(1到n)是O(n ^ 2)......

帮助?任何想法?

1 个答案:

答案 0 :(得分:3)

在高层次上,我想到的解决方案从左到右按顺序处理。在任何时候,都有一个已处理的单词的前缀,以及尚未处理的单词的后缀。假设delta是前缀中a的数量减去b的数量,磁带在每次迭代开始时都是这样的:

<big-endian abs(delta)><sign(delta)><suffix>
                                    ^
                                tape head

要处理下一个字母(即后缀中的第一个字母),请根据字母是delta还是a来添加/减去b中的一个字母,以及是否签名是+-,在此过程中将delta一个空格的表示移动到右侧。最后,检查delta是否为零。

使用双补码表示可能更容易,其中最左边的数字被假定为无限重复,但我不确定是否有任何隐藏的障碍。