我最近发现了一种“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。有人可以将其翻译成更好的伪代码吗?我想试试这个算法,但我不知道他们用Mix做什么 - >删除 - >删除然后移动(20n + 10)...任何提示?
P.S。这个算法是O(n ^ 2)所以我怀疑它可能是一个类似于现有算法的版本。
答案 0 :(得分:3)
正如一些评论所推测的那样,该算法旨在在试管而不是硅上进行。
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中,我们使用引物代表哈密顿路径的起始和终点节点。 结果将是以Start节点序列开头的DNA字符串,然后进入edge-node-edge直到达到finish节点。
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序列。这应该是汉密尔顿主义的道路。对我来说,有一件事情并不完全清楚,就是它们如何防止重复访问顶点,但认为这是由于具有正确的浓度而自然产生,如上所述。
这很有趣的原因是化学基本上是并行运行这些计算。检查所有可能的路径 - 因为创建了所有兼容的DNA片段组合 - 但PCR和凝胶仅选择代表哈密顿路径的路径。这不是你可以在没有指数时间的计算机上做的事情。