第四十二章 DNA计算机
双向直飞航线,你该怎么做呢?
你可以想想,但我告诉你不论你怎么想都没用。因为这类问题的解法只有一个,那就是试!和我们暴力破解密码一样,一个一个试!
进一步的,如果你不只五个女朋友,而是有50个、500个、5万个、无穷个,你该怎么办?”
卢赫对着艾达否逐渐由认真转为嬉笑的脸,思索片刻,答道:“我觉得这个问题我不需要考虑。5个女朋友大眼一瞅在纸上画画也就出来了,如果再多,我肯定会先死在床上。”
“你个死变态。”艾达否一脸嫌弃道:
“很难对吧?这其实是一个时间复杂度为n!的问题,也就是说,如果你有n个女朋友,就要尝试n的阶乘次。如果你女朋友多达万个,就算是拥有4万个核心天河三号,也要算到你年过花甲。
可这个问题对于dna计算机来说,却是小菜一叠。它是这么算的:
假如你现在刚见完1号女朋友,准备奔赴到2号的怀抱。那么你离开1号女朋友的行为,就被编码为acac;奔赴2号女朋友的行为,被编码为gtgt。把这两串编码合起来,acacgtgt就代表你从1号到2号的路径。
接下来,你见完了2号女朋友,又匆匆赶往3号。这个过程可以再用编码表示为tctcagag。
也就是说,8个碱基就可以用来表示你和其中一个女朋友从见面到拜拜的全过程。这个时候你肯定就要问了,我要你规划一条连续的路径,可acacgtgt、tctcagag是分离的两条链,这还怎么能玩儿的下去?
很简单嘛,碱基对是可以互补的。你再找一条cacaagag,不就可以跟胶水一样,把那两条毫不相关的链给粘起来了吗?
接下来的事情就更简单了。你有几个女朋友,就用几串8位编码来表示和她们的见面和拜拜的过程。然后你把你的女朋友和胶水都合成一下,扩增个几万亿条,放在一起,养蛊。
根据碱基配对原则,胶水分分钟就能发挥作用,把各种女朋友给粘起来。这个时候,你会得到几万亿条路径。这就是路径遍历的所有结果。
那你又要问,我怎么把最省钱的那一条路径给筛选出来呢?
这也很简单,你的起点和终点是固定的。只要拿起点和终点作引物,扩增一下,起终点正确的路才能被扩增,不正确的会被逐渐稀释掉。至于有些路径上,你少见了几个女朋友,或者重复多见了几个女朋友,这些链的长度肯定是不对的。
最终,你把它们电泳一下,链长的和链短的分开,挑出长度刚好的链,测个序,答案不就出来了吗?”
艾达否说完,抢过卢赫手里的水,猛灌了几口,“要知道,1克的dna可以存储215pb的数据,相当于2亿部小电影。这还不算完,由于碱基配对的速度不慢,这215pb可以直接当作内存用,有几条链就相当于有几个线程并行运行。
有个神仙已经设计出了多项式时间的、基于dna算法的np完全算法,只不过减少时间复杂度的时候,牺牲掉了空间复杂度。这个算法实现起来,需要有指数数量的编码方式,和巨额的存储空间。
可这些对dna来说都是洒洒水,刚才都说了,dna的存储效率极高。因此,dna解决np完全问题,指日可待!”
卢赫听后连连拱手称赞道,“厉害,厉害。不过我有个问题,你刚才说的那个哈密顿路径算法,顶多就是个算法,它有逻辑判断能力吗?它算个哪门子计算机呦?”
艾达否拧紧瓶盖,把水瓶仍会卢赫怀里,“你还真是瞎狗端星星——死活看不出个样儿来。我就是给你举个简单的例子,至于逻辑判断,不就是几个通用逻辑门的组合吗?
与、或、非、与非、或非等通用逻辑门都已经被设计出来了。实际上,只要与非或者或非,所有的逻辑门就都可以实现。”
“呵呵。”卢赫细品了一下艾达否的话,品出了他正极力掩饰的东西,幽幽开口道:“门都已经实现了,可为什么这种神仙东西却迟迟不面世?”
艾达否的气势瞬间萎了下来,“因为还有点问题。你知道链置换过程吧,两条互补链相遇就会立刻粘起来,不管两条链一不一样长,先粘起来再说。就好比你找女朋友,一见钟情一般都是很难的,肯定是遇到合适的,就先谈起来再说。
可是如果日后遇到更合适了的呢?我想以你的人品,肯定会毫不犹疑地把原来那位甩掉,然后和更合适的谈。dna也一样,如果基链遇到了更搭配的互补链,就会通过链置换原理把当前的互补链踢掉,换成更匹配的一条。
比如与门,它的实现过程就是先给一条基链上贴上一条互补链,然后再给它两条更搭配的置换链,把原来那条互补链给挤出去。这样,两条置换链为输入真,原互补链为输出真,就形成了一
个基本的计算单元:与门。”
“你大爷的竟敢质疑我的人品,你不了解我,我可是很专一的一个人。”卢赫拿起怀里的水瓶,猛地砸向艾达否,“还有,你这是什么破烂与门,那输入链和输入链都是基链的一部分互补链,二者这么相似,