代码之家  ›  专栏  ›  技术社区  ›  Kiril

用DNA计算图的哈密顿路径

  •  0
  • Kiril  · 技术社区  · 14 年前

    我最近发现了一种“DNA计算”算法(不是遗传编程或遗传算法),它试图在图中找到哈密顿路径,但我对伪代码有点困惑。。。注意,符号有点混乱,因为我复制了它 from a PDF paper on DNA computing :

    Input: for each node v and edge (u; v),
      Tv contains Sv (and Sv)
      T0uv contains Suv (and Suv)
    Mix(fTi; T0 uvg,T)
    Remove(T,T0,fSfg)
    Remove(T0,T0,fStg)
    Move length 20n+10 strings from T0 to T00
    if Detect(T0')
    then return ``Yes''
    else return ``No''
    

    对于具有更好的符号和背景信息的伪代码 please see the paper . 有人能把它翻译成英文吗 更好的

    另外,这个算法是O(n^2),所以我怀疑它可能是一个类似于现有算法的版本。

    1 回复  |  直到 14 年前
        1
  •  3
  •   Rob Lachlan    14 年前

    正如一些评论中推测的那样,该算法是在试管上而不是硅上进行的。

    Input: for each node v and edge (u; v),
      Tv contains Sv (and Sv)
      T0uv contains Suv (and Suv)
    

    因此,我们为图中的每个节点初始化一个试管,其中包含代表该节点的DNA片段,并为图中的每个边初始化一个试管。代表节点的DNA序列是随机生成的。我们不想让他们彼此接触。代表边缘的DNA序列被设计成与它们连接的节点重叠。也就是说,如果节点与边缘相连,那么节点的DNA会粘附在边缘的DNA上(这是使整个技术发挥作用的关键点)。DNA序列需要被放大(两者都要有足够的DNA,这样DNA的浓度就与相同两个节点之间的边数成正比)。

    Mix(fTi; T0 uvg,T)
    Remove(T,T0,fSfg)
    Remove(T0,T0,fStg)
    

    我们把所有的DNA序列放在一个试管里,然后运行 Polymerase Chain Reaction. 在PCR中,我们使用表示哈密顿路径起始和结束节点的引物。 结果将是以起始节点序列开始的DNA串,然后沿着节点边缘移动,直到到达结束节点。

    Move length 20n+10 strings from T0 to T00
    if Detect(T0')
    then return ``Yes''
    else return ``No''
    

    那么我们 run the DNA on a gel ,并挑选出正确长度的DNA序列。这应该是一条哈密顿路径。有一件事我还不完全清楚,他们是如何防止重复访问顶点,但我认为这是自然的,有正确的浓度,如上所述。