我有以下算法问题:

确定识别Watson-Crick alindromes的DNA弦的空间复杂性。

沃森·克里克(Watson-Crick)的palindromes是弦,其逆转的补充是原始弦。这 补充 定义为字母的定义,受DNA的启发:A是T和C的补充是G的补体。WC-Palindrome的一个简单示例是ACGT。

我想出了两种解决这个问题的方法。

一个人需要$ Mathcal {O}(n)$ space。

  • 一旦计算机读取输入。必须将输入胶带复制到工作胶带中。
  • 然后,机器将从左侧读取输入和工作磁带,并比较每个条目以验证工作胶带中的单元格是输入中单元格的补充。这需要$ MATHCAL {O}(N)$ SPACE。

另一个需要$ Mathcal {O}( log n)$ space。

  • 在阅读输入时。计算输入胶带上的条目数。
  • 输入胶带阅读后
    • 将字母的补充复制到工作胶带上
    • 将字母L复制到工作胶带的末端
  • (循环点)如果计数器= 0,请清除工作搭配并写入是,然后停止
  • 如果输入胶带读取L
    • 将输入头移到左侧,该计数器指示的次数(需要第二个计数器)
  • 如果输入胶带读取r
    • 将输入头移到右侧,以计数器指示的次数(需要第二个计数器)
  • 如果在工作件上保持值的单元格与输入胶带上的当前单元格匹配
    • 将柜台减少两个
    • 根据r或l分别在工作带上,向左或向右移动一个或向右移动
    • 将l或r的补充复制到worktape代替当前的L或R
    • 继续循环
  • 如果值不匹配,请清除工作搭配并写下,然后停止

这大约是$ 2 log n+2 $空间,用于存储两个计数器,当前补充和值L或R。

我的问题

第一个需要线性时间和空间。第二个需要$ frac {n^2} {2} $ time和$ log n $ space。我从报价中给了我这个问题,并提出了这两种方法,但我不知道要使用哪种方法。我只需要给出问题的空间复杂性即可。

我困惑的原因

我倾向于说第二个是最好的选择,因为它在时间方面更好,但是这个答案只能来自我变得幸运并提出算法。似乎我想给出某事的空间复杂性,提出正确的算法并不需要运气。我想念什么吗?我什至是否应该提出解决方案来回答空间复杂性的问题?

有帮助吗?

解决方案

免责声明: 以下算法不将标准模型用于均方根空间复杂性(请参阅 WP:DSPACE),因为它写入输入胶带。此外,(watson-crick)palindromes的集合不在$ mathsf {dspace}( mathcal {o}(1))= mathsf {reg} $中。但是,这是用于许多实际目的的就地解决方案(例如,如果每个字母都是一个 char 在C)。

为了表明问题具有特定的空间复杂性,通常需要提出具有该空间复杂性的算法。这可能需要反复试验,但是更好的方法是对您正在查看的问题有很好的了解以及在算法和复杂性方面的丰富经验。

对于这个特定示例,有第三种算法不需要任何其他空间,并且需要$ o(n^2)$时间复杂性。该算法将是恒定的空间。

提示:当您可以使用输入占用的空间时,为什么要使用其他空间?

提示:沿着字符串的来回zip一次检查一个字符 - 使用图灵机的状态记住您正在检查哪个字符并删除已经检查的字符。

其他提示

问问题的方式,您应该提出一个 上限下限 在空间复杂性上。

第一部分通常是通过为您的问题展示算法来完成的,但要减少 其他一些经过良好研究的问题也将起作用(并间接产生算法)。由于您不认为空间的组合复杂性(时间和空间)很重要,即使时间增加也是如此。因此,您发现了$ Mathcal {O}( log n)$的上限。

第二部分通常更棘手,但是您可以轻松地表明恒定空间还不够,因为这会使您的语言变得常规。使用带有$ a^lb^{2l} a^l $的泵送引理,其中$ l $是假定的泵送数字将有能力。这仍然留下$ omema(1)$和$ Mathcal {o}( log n)$之间的巨大差距。

我找到了练习 (请参阅练习6) 这给出了一些提示。如果我正确解释了他们的提示,请尝试证明每个输入大小的Myhill-neber-thease关系的许多不同等效类。这类似于您不能区分超过$ c cdot gamma^{s(n)} $长度$ n $的字符串(其中$ gamma $是您的磁带字母和$ s(n)) $您的空间复杂性)。这将为您提供$ omega( log n)$的下限。


请注意,您不需要关心字母的补充,因为此操作是微不足道的,因此可以使用更多的状态来修改适合普通alindromes的所有内容以解决您的问题。

古典很可能 回文的时空权衡 在您的情况下也持有。该结果指出,识别空间中的palindromes $ s $必须花费时间$ omega(n^2/s)$,即2)。 $$在您的情况下,第一个算法具有$ ts = theta(n^2)$,第二个算法具有$ ts = theta(n^2 log n)$。还可以表明,空间的下限是$ omega( log n)$。我找不到最佳的上限 - 也就是说,是使用对数空间和时间$ o(n^2/ log n)$的算法,还是一般而言。 s $我们可以达到时间$ omega(n^2/s)$。作为练习,您可以尝试找到其他混合算法来插值的两种算法。

许可以下: CC-BY-SA归因
不隶属于 cs.stackexchange
scroll top