临溪笔记

Month: 七月, 2012

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

“突变率很低,地球年龄又很短,要想演化出人类这样具有高度文明的智慧生物是完全不可能的。”——这是智设论者用以攻击演化论的常见论点。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],但未能给出数学上的解释和证明。其灵感来源于“无限猴子定理”。

在50亿年后太阳变成红巨星之前能精确比对多少分子序列?

最近在构思一篇关于“计算人类末日”的文章,搜集了一些相关的资料,突然联想到了标题中的这道曾经的作业题,遂随手写下此文。。 (作者不是标题党,不过标题中的这个问题我还是要放到本文的最后再来回答。) 当分子生物学中唯一的法则“中心法则”饱受系统生物学家的攻击和批评[1]的同时,由基因组学发展出来的另一个“中心法则”——序列决定结构,结构决定功能——则显得更加无懈可击。而生物信息学也正是基于这一新的法则来分析海量的生物学数据的。由此,序列分析也成为了这一新学科的基础。这里的“序列”主要指的是生物大分子中的DNA、RNA和蛋白质。 序列分析中的主要工作之一是序列比对。通过检验不同序列间的相似性程度,可以对它们之间的同源性和进化关系进行判断。我们现在看到的那些进化树,虽然在一些细枝末节上还存在很大争议,但它们大多都是通过这种分子水平上的序列比对而构建起来的,比以往的博物学家们只能在形态学和解剖学上进行比较要精确得多了。 通过测序,我们可以把这些线性的生物大分子变成由特定字符集组成的字符串,存储到熟悉它们的计算机中。如DNA的字符集是{A,T,C,G},RNA是{A,U,C,G},蛋白质则是那20种基本氨基酸的单字母缩写。在计算机中用处理字符串的方法来分析这些序列,比用纯生物学的方法要方便、快捷、准确多了。 那么到底要如何比对这些序列呢?这里就不得不要提到一个算法——动态规划(Dynamic Programming).讲解“动态规划”的中文维基页面上用斐波那契数列的例子来解释这个算法是如何工作的。如果没有理解,也没有关系,因为心理学告诉我们,只要能把抽象的问题具体化,其实也没有什么是难理解的。所以这里让我们来考虑一下下面这个更加现实的问题。 假设你要去一个陌生的大城市旅游,但坏消息是你只有不到一天的时间,肯定不能把城市里所有的景点游览完。同时还有个好消息:你有这个城市的地图,可以提前规划路线。作为限定条件,在这个城市里游览的时候,你只能向东或向南前进,不能走回头路。那么你要如何选择路线才能尽可能多地浏览景点呢?这个问题也就是经典的“曼哈顿游客问题”(Manhattan tourist problem). “曼哈顿游客问题”中的地图。(在这里我们可以忽略那条斜街。)图像来源: An introduction to bioinformatics algorithms

圆为什么有360度?

从太阳、满月,到向日葵的花盘、水面的涟漪,自然界中的圆无处不在。“圆,一中同长也”(《墨经》),两千多年前的墨子是世界上第一个给出圆定义的人。圆形的轮子是人类历史上最重要的发明之一。由其衍生出来的齿轮在工业革命中起到了无法替代的作用。圆与我们的生活息息相关。但是,你真的了解圆吗? 圆为什么有360度 大家都知道圆有360度,但是你知道为什么要这样划分吗?为什么不是300度、400度,而一定是360度呢?别急,这事儿要从公元前说起…… 在古文明时期,人类把很多不能解释的自然现象归结为“天意”。 从对“天意”的判断与预知发展出了占星术,也促进了早期天文学的发展。经过长期肉眼的天文观测,古人终于有了一个重大发现——各星象的运动轨迹是一个圆!(……)它们在夜空中的位置每天都会比前一天稍移一些,直到一个周期——也就是一年后,又会恢复原位。现在你有没有发现,一年有365天与一个圆有360度之间的微妙关系? 其中一种理论认为,古巴比伦人继承了同为美索不达米亚平原上公元前三世纪苏美尔人的六十进制计数方法,将一年划分为360天(12个月,每月30天),因此根据上所述原因,一个圆也可以被划分为360等份,每一份即为“一度”。在巴比伦帝国被波斯人消灭300多年后,希腊天文学家阿里斯塔克斯和喜帕恰斯重新系统归纳总结了巴比伦人在天文学上的成就,“星座”和“天球”的概念首次出现,六十进制被继续发扬光大,天象划分基础被确立,“一个圆有360度”的说法也开始成为科学标准渐渐得到人们的肯定。 图1  未来一年在北京观测大熊星座运行轨迹(绿色显示为大熊星座)

墨家思想与纳什均衡

(上) 很久没写日志,随便写写。 中国历史上曾经有过辉煌的百家争鸣时代,而当今国内的各种社会问题却被归因于国民的信仰缺失,这不得不说是一种讽刺。也许有人要说,即使没有掺杂政治的因素在里面,这些落伍的思想放至今日也是腐朽而毫无意义、早晚要被淘汰的,果真如此么?我看未必。不妨大胆假设一下,如果把诸子百家的核心思想拿到今天,哪个更有现实意义呢? 去年是令人心寒的一年。七月的动车事故与十月的药家鑫案,政府官员的冷漠与网络暴民的冷血,似乎仇恨才是推动社会进步的动力。于是我们看到“小悦悦”两次被车碾过,18位路人路过而不救。面对如此无爱的社会,我脑海中却闪过两个字:兼爱。 “兼爱”是墨家十点思想中最为核心的一点,意为不分社会等级、无差别的博爱。墨家创始人墨子(墨翟)出身工匠,同时也是位科学家,在力学、几何学、代数学、光学等方面都有重大贡献。蔡元培曾评价说“先秦唯墨子颇治科学”。建立在严密数理逻辑之上的墨家思想是诸子百家中最为理性的(我之前曾写过一篇《“词胜”与“理胜”》)。我一向对理性的人或事物颇具好感,在读了很多关于墨家的评注文章之后,也深信着看似理想化的墨家思想在今天也一定有着其现实而积极的意义。但是想让人信服,却又似乎少了些什么。 直到今年2月份接触到博弈论。接触博弈论绝非偶然。因为专业内容涉及进化论,而进化论的主流核心观点就是物竞天择,用来描述物种间竞争策略的最好的数学模型则非博弈论莫属。在学习过程中参考了耶鲁大学的《博弈论》公开课课程。在一节讲解纳什均衡的课堂上,老师和200多位学生做了这样一个博弈:现在有一个项目需要大家投资。每个人有两个选择:A投资10美元,B不投资。如果最后有90%以上的同学选择了投资,那么投了资的同学每人都有5美元的净利润进账,否则大家的回报都是0.规则很简单。老师让大家自己抉择,把选择写在本子上,禁止互相讨论。之后举手显示选A和选B的人几乎各占50%.紧接着又做了第二次博弈,规则一样,结果选A的人降至了20%左右。再做第三次的时候,表示还投资的人只剩下了一个。 嗯?好像有什么不对。明明是都投资就都能挣钱、只赚不赔的买卖,到最后怎么都变得如此保守?表面的答案是这里面存在两个纳什均衡,一个较优的,都投资,极大欢喜;一个较劣的,都不投资,不赔不赚。(当然这其中还有更深层的原因,不过我想放到下一篇文章中再说。)事实上这个例子我跟我的好几个朋友都说过。当我第一次讲的时候,还没有把它和“兼爱”联系起来,直到某一次才注意到《墨子》中的这段话:“既以非之,何以易之?子墨子言曰:‘以兼相爱交相利之法易之。’”(语出《墨子·兼爱中》。既已认为不相爱不对,那用什么去改变它呢?墨子说道:“用人们全都相爱、交互得利的方法去改变它。”) “兼相爱、交相利”,互爱互利,这不就是一种较优的纳什均衡么?爱是策略,而利才是实质。“兼爱”是为了更好的“交利”。而博弈论研究的正是如何使自己采用的策略能得到最大化的“利”,是建立在“利”之上的。自私性(不涉及道德评判、不含贬义)是每个有机体的自我属性(关于这方面最好的著作就是道金斯的那本《自私的基因》),而自私的一种体现就是使自己最大化获利(在生物学上的体现就是个体的繁殖、基因的传递)。墨子并没有回避“利”,而是利用它使人们相爱,达到“天下兼相爱则治”的终极目的(在上述那个博弈论例子中就是大家都投资都赚钱)。

用迷宫困住死理性派?没门!

这是一种充满复杂通道的建筑物,很难找到从其内部到达入口或从入口到达中心的道路。在世界的不同文化发展时期,这些奇特的建筑物始终吸引人们沿着弯弯曲曲、困难重重的小路吃力地行走,寻找真相。还在找出口吗?不妨看看死理性派是怎么走迷宫的吧。 迷宫的历史和它的结构 迷宫最早出现于希腊神话中——用来囚禁 克里特岛国王 米诺斯 的半人半牛的怪物儿子 弥诺陶洛斯 。米诺斯每年都会送 7 对童男童女进来供他儿子享用。后来在米诺斯女儿阿里阿德涅的帮助下,雅典英雄 忒修斯 靠着一团金线,摸进迷宫顺利地杀死了这头怪物。 早期的一些绘画艺术还原了这座传说中克里特岛迷宫。很多人发现,这座迷宫虽然很绕,却并没有岔路,只要“一条道走到黑”,就能来到中心。也就是 欧拉路径 ,即从迷宫的入口到中心遍历了所有的边且没有重复。 从左至右:迷宫中的弥诺陶洛斯,14世纪杰里科地图,克里特式迷宫。 图像来源:Wikipedia 想象一根有限长的绳子,如果要用这根绳子来围成一条路径,且使得人在走这条路径的时间花费尽量长,那么最直接的方法就是建造这样的“克里特式迷宫”,让线圈紧密地盘绕再盘绕。 克里特式迷宫可以当做很美的装饰画,也能在工业实践中得到广泛应用,但它因为没有极具迷惑性的岔路,“迷”的属性并不算突出。因此后来就从这种最初的迷宫中,又发展出了各类复杂的迷宫。 从数学上来说,形状奇怪、看起来让人眼花缭乱的各种各样的迷宫,无非是一个图。当我们不考虑各结点的具体位置,而只考虑其相对位置,也不考虑各条边的具体长度和形状时,就可以把迷宫的拓扑结构画出来。 对于非克里特型迷宫(克里特型迷宫中没有分岔和歧路,不能用“图”表示),可根据其拓扑结构分为两大类,单连通的和多联通的。单连通的迷宫,图中没有回路。多联通的迷宫,图中包含回路。那如何判断一张迷宫地图是单连通的还是多联通的呢?只要看它的墙的结构就行了:如果迷宫中的墙都是互相连着的,那它就是单连通的;如果迷宫中有孤立的、不与其他墙相连的墙,这个迷宫就是多联通的。迷宫的类型不同,在其中行走到达目的地的策略也就不同。 破解黑暗中的迷宫 对于事先我们并不知晓全貌的迷宫,或者即使我们能了解到它的全貌(比如一些旅游景点中的迷宫),但置身其中时仍会有“旁观者清,当局者迷”的感觉。这样的迷宫该如何破解呢? 当然,你可以选择神话中忒修斯拉线绳的方法——如果你有足够长的绳子的话,这无疑是最保守和安全的方法。但这里要介绍的几种比它巧妙的多的方法。 首先就是“左/右手法则”方法。顾名思义,就是进入迷宫后,选择一个方向,之后贴着墙壁一直走下去。这是最常见的走迷宫方法,其原理其实在上面“克里特式迷宫”中也已提到,就在于考察迷宫的拓扑结构,无论围墙是多么的蜿蜒曲折,把它抻直了也就是一根线段而已,迷宫的出入口分别对应着这条线段的两个端点。我们从入口进(或者选择该条线段上任意一点开始),沿着这条线笔直走下去,当然会走到出口。但这个法则也时常有失灵的时候。因为它的前提是“入口和出口都在一条线段上”,也就是说这堵墙必须是连通的才行,而如果遇到“回字形”迷宫,出口和入口并不连通,则会出现绕了一圈返回原地的情况。

彩虹为什么是弯的?

作者:D-Horse 想必很多人都见过彩虹(至少彩虹的照片你见过吧)。一说到它,你脑海里总能浮现出一道七色圆弧。但你知道彩虹为什么是弯的吗?彩虹真的是恰好七种颜色吗?彩虹的秘密,死理性派告诉你。 古代人对彩虹的观察和研究 对彩虹的研究最早可以追溯至公元前 4 世纪。亚里士多德是第一个认真研究彩虹的人,他曾指出彩虹最为重 要的几个特征,比如: 如果太阳在地平线上升起得不太高,彩虹就会出现。彩虹不会出现在夏日的中午 我们可以同时看到两条形状相同但颜色顺序排列相反的彩虹,其中外侧那条显得略为松散 彩虹主要由三种(或四种)颜色组成(现代的RGB三原色理论亦基于此) 但是有一个很重要的现象亚里士多德并没有注意到,那就是两条虹中间的区域亮度较暗,直到公元约 200 年雅典哲学家亚历山大(Alexander of Aphrodisia)才观察到这个现象,所以后人就将这条暗带命名为“亚历山大暗带”(dark band of Alexander)。另外,亚里士多德对彩虹的解释并不正确,他认为只有大的镜子可以反射出物体的全部外形,他把天空中的水滴比做小镜子,认为这个镜子太小了,不可能反射出整个太阳,但是又必须得有什么东西反射出来,所以会有颜色呈现出来。而且,亚里士多德也没有注意到光的折射作用。 在此之后,古罗马哲学家 塞内卡 、波斯物理学家 海什木 等人也都曾发表过自己的看法。中国北宋时期一位叫 孙思恭 的精通天文历算的进士也曾说过“虹乃雨中日影也,日照雨则有之”(沈括《梦溪笔谈》),这些均只停留在对现象的思考上,没有更多深入和本质性的研究。 彩虹是怎么形成的 我们现在知道,彩虹的形成和光的折射有关。所以直到人们发现折射定律,彩虹问题才有条件被解决。光入射到不同介质的界面上会发生反射和折射,入射光和折射光位于同一个平面上,且与法线的夹角满足如下关系: 其中, n 1 和 n 2 分别是两个介质的折射率, θ 1 和 θ 2 分别是入射光(或折射光)与法线的夹角,叫做入射角和折射角。这个定律最早在公元 984 年被波斯科学家 IbnSahl 精确描述。随后又被英国科学家 托马斯·哈利奥特 ( 1602 年)、荷兰物理学家 威理博•斯涅尔 ( 1621 年)、法国数学家笛卡尔( 1637 年)等人先后独立发现这个定律。 其中,笛卡尔利用折射定律,成功解释了彩虹是如何形成的。笛卡尔假想在一个 […]

你的密码安全吗?小心那些隐藏的陷阱

作者:D-Horse 美国国家安全局(NSA)为了破译恐怖组织的密码以挫败其阴谋,斥巨资建造了一台可以破解一切密码的机器:万能解密机。这是美国作家丹•布朗在其小说《数字城堡》中虚构的情节。以人类今日之科技实力,打造这样一台无坚不摧的“神器”还只是个遥远的梦想,但如何在网络社会中保护自己的个人隐私一直是个现实的问题。20多年来,现代人已经掌握了“数字城堡”——密码的构造方法,自认为可以高枕无忧,但事实远非如此。 越复杂的密码越安全吗 很不幸,答案是否定的。人们通常认为,把密码设得越复杂,别人就越难猜到,但这样一来无疑增加了记忆的难度。而对于那些企图窥探你秘密的人来说,他们也只是想不到,而非“猜不到”。现如今,还有几个人破译密码是靠大脑“猜”的呢? 这就正如 XKCD 所说的那样:经过二十年的努力,我们成功地陷入一个误区,那就是把密码设的越来越难以记忆,然而却被计算机很轻松地就破解出来了。 保证密码强度的关键是什么 那保证密码强度的关键到底是什么呢?其实,上面的漫画已经给出了答案:密码长度。 这里引入信息学中的信息熵(我们常听人说这个信息多、那个信息少,对信息“多少”的量化就是信息熵),用它来作为密码强度的评估标准。信息熵计算公式为 H = L * log 2 N,其中,L表示密码的长度,N的取值见下表:

70亿世界人口是怎么来的

作者:D-Horse 1999 年 10 月 12 日凌晨 0 时 2 分,波黑首都萨拉热窝一名男婴的诞生标志着 世界人口达到了 60 亿。时光流转,仅仅 12 年之后,2011 年 10 月 31 日,菲律宾婴儿, 丹妮卡·卡马乔 的诞生象征着世界人口突破 70 亿。也许很多人会感到诧异,这个“ 70 亿”到底是怎么算出来的。别急,让我们从头说起…… 人口是如何增长起来的 早期人类以狩猎和觅食为生,世界范围内数量约为 100 万,到农业得到发展之前,其数量也未超过 1500 万。而公元 4 世纪时,东、西罗马帝国人数总和已超过 5600 万。但随之而来的 查士丁尼大瘟疫 几乎给欧洲文明以毁灭性打击,其人口数量从公元 541 年到公元 8 世纪间锐减 50% 。随后欧洲文明渐渐复苏,人数从公元 1000 年的 3850 万上升至 1340 年的 7350 万。好景不长, 1347 年 黑死病 席卷而来, 3 年时间世界范围内死亡 7500 万人,整个 14 […]

细菌掷骰子吗?

作者:D-Horse 传说骰子的发明人是三国时期的文学家曹植,是为了占卜之用。时至今日,它已演化为人类广泛用于赌博和休闲娱乐的工具,深入千家万户。除老百姓外,科学家们对骰子也可谓情有独钟,甚至在上个世纪还爆发了关于“上帝掷骰子吗”的大讨论。当然,我今天并不想讨论这么大的一个话题,但依然不妨碍我把掷骰子试验背后隐藏的二项分布和大数定理引入自然界,用它对一些生物学现象进行探讨和分析。比如下面我们可以来研究下“细菌掷筛子吗”这个问题。 从投针到掷骰子 1777年法国数学家布丰[1] 别出心裁地想到一种计算圆周率π的方法:随机投针法。他对此方法的描述是:在平面上画有一组间距为D的平行线,将一根长度为L(L<D)的针任意掷在这个平面上,则此针与平行线中任一条相交的概率是p=2L/(πD),π即为圆周率。1901年意大利数学家马里奥•拉扎里尼(Mario Lazzarini)重复了这个试验。他总共投掷了3408次针,得到π的值为355/113,已经精确到了小数点的第6位。关于它的解法可以参看wikipedia页面布丰投针问题。有同学想验证这个试验但又没有针和时间怎么办呢?那就来尝试运行一下这个计算机模拟程序吧。