我有以下算法问题:
确定识别作为Watson-Crick回文的DNA字符串的空间图灵复杂性。
Watson-Crick回文是指其原始字符串反向排列的字符串。的补体被定义信明智的,通过DNA启发:A是T的补体和C是G.一个简单的例子的用于WC-回文的补ACGT。
我提出了两种解决方法。
一个需要空间。
- 一旦机器完成读取输入。输入磁带必须以相反的顺序复制到工作磁带上。
- 然后,机器将从左侧读取输入和工作带,并比较每个条目,以验证工作带中的单元格是输入单元格的补充。这需要空间。
另一个需要空间。
- 在读取输入时。计算输入磁带上的条目数。
- 输入磁带读完后
- 将信件的补语复制到工作带上
- 将字母L复制到工作带的末尾
- (循环点)如果计数器= 0,请清除工作带并输入是,然后暂停
- 如果输入磁带显示L
- 将输入头向左移动计数器指示的次数(需要第二个计数器)
- 如果输入磁带显示R
- 将输入头向右移动计数器指示的次数(需要第二个计数器)
- 如果保存在工作带上的值的单元格与输入磁带上的当前单元格匹配
- 将计数器减2
- 向左或向右移动一个,分别取决于R或L在工作带上
- 将L或R的补语复制到工作带以代替当前的L或R
- 继续循环
- 如果值不匹配,请清除工作带并输入否,然后暂停
这大约占空间,用于存储两个计数器,当前补码和值L或R。
我的问题
第一个需要线性时间和空间。第二个需要时间和空间。我从报价中得到了问题,并提出了这两种方法,但是我不知道该选择哪种方法。我只需要说明问题的空间复杂性。
我感到困惑的原因
我倾向于说第二个是最好的选择,因为它在时间上比较好,但是答案仅来自我很幸运并想出一种算法。看起来,如果我想给某些东西添加空间复杂性,那么不需要运气就可以得出正确的算法。我想念什么吗?我是否应该甚至提出解决问题的方法来解决空间的复杂性?