演化的时间复杂度与黄鼠狼程式

“突变率很低,地球年龄又很短,要想演化出人类这样具有高度文明的智慧生物是完全不可能的。”——这是智设论者用以攻击演化论的常见论点。2010年,美国宾夕法尼亚大学的数学家Herbert Wilf和遗传学家Warren J. Ewens则用数学方法对这种观点予以有力还击,他们给出的答案是:There’s Plenty of Time for Evolution[1]. 可以把基因组的演化想象成一个密码破解的过程。我们对这个密码几乎一无所知,但知道它的长度为L,其中的每个字符都来源于一个有K个字符的字母表。按照智设论者的观点,这个密码是这样来进行暴力破解的:用字母表中的字符随机生成一串长度为L的密码,与正确的密码相比对,如果不正确,那么再重新生成(不记忆已比对过的字符串),再比对,直到与正确的密码相一致为止。这个破解算法的时间复杂度为指数级的O(K^L),也就是说平均要K^L次才能破解出正确的密码。这是什么概念呢?让我们想象一个拥有20000个可突变基因位点的基因组,即L为20000,另外在基因组水平上,根据生物学统计信息,这里的K值可近似取40(具体怎么算出来的见文末注解[2]),那么要想正确演化出这样的基因组平均需要10^34040代,即使按每年可繁衍、演化100代计算,也需要10^34038年,而生命的演化史也只有3*10^9年而已。。 智设论者的想法肯定是错误的,那么到底是哪里出了问题呢?很简单,就是他们忽略了演化的一个关键因素:自然选择。基因突变是演化的原料,自然选择则是演化的动力。修改一下上文的模型,可以设定这样一个“间谍”,在你每次进行破解之后,这个“间谍”会告诉你哪些位置猜对了,这些猜对的位置便不用再猜,只用继续再猜那些没猜对的即可,这个“间谍”即相当于起到了“自然选择”的作用。这也是符合遗传学规律的,那些适应性强的基因(比如与表达眼睛相关的)一旦固定就很难消失,不会因为其它基因(比如与表达肝脏相关的)未能演化出来而被淘汰。根据这个模型,Herbert Wilf计算出的演化时间复杂度为O(K*logL),并给出了用于描述平均需要演化多少次的公式: 这里的β(L)是一个关于logL的周期函数。(具体论证过程请参考原论文。) 现在用这个公式再计算下上文中所述的那个例子,代入K=40,L=20000,结果约为390,只需要390代即可。 当然,这只是一个非常简化的关于演化的数学模型,生命的演化过程远比我们想象的要复杂得多。事实上,在1986年,道金斯也曾提出过一个“黄鼠狼程式”(Weasel program)来回击演化中类似的常见误解[3],但未能给出数学上的解释和证明。其灵感来源于“无限猴子定理”。