01 2010 档案
摘要:函数是一个强大的概念,很多理论都是以这种形式构建起来的。比如定理可以定义成函数的形式,有输入,输出,以及一系列过程,过程中又是由多个子定理构成 的,不断深入展开最后达到的是作为原子函数的公理。有些颇具魅力的函数,比如可以判断某程序是否死循环的程序,开发商要是发明出这种软件绝对可以发笔大 财。可是事实上科学家逐渐发现有些问题根本无法计算或者说找不出这样的函数,图灵已经用类似对角法的证明否定了刚才那种...
阅读全文
摘要:记得曾经有位图灵奖得主回忆自己写过最得意的程序时,他列出了一个C语言的自我打印程序。依稀记得有百行之多,好像还用了很多数组。现在想想构建这样一个程序的诀窍可以抽象的描述成:A"AB"B其中"AB"是程序中出现的字符串,AB分别是前后的程序代码。B中的程序功能需包括,打印"AB"的A部分,打印",打印"AB",打印",最后打印"AB"的B部分。这个问题的难点在于会使人产生无限递归定义的困境。但如果看...
阅读全文
摘要:对于图的路径搜索问题,有许多著名的算法。比如耳熟能详的Dijkstra最短路径算法,由于他的证明严密又是由计算机祖师级的人发明的所以经常出现在教材中。该算法的核心思路是通过按照最短路径递增的顺序生成所有从原点到某一点的路径。举个具有启发性的例子,假设我们已经知道了从原点O到除了终点D之外所有其他点的最短路径,那么该如何求最后一步呢?现在考察所有与D相连的点,比如只有两个,A和B,那么因为已经知道从...
阅读全文
摘要:一直以为排列是蛮基本的算法,没什么好研究的。因为有个很简单的算法,我们可以递推生成所需排列。比如已经知道两个元素的排列,a1 a2, a2 a1,引入第三个元素后,所需做的就是往前面结果里insert。a3 a1 a2, a1 a3 a2, a1 a2 a3 ... 这种定义显然是递归的,所以就会认为很容易转换出清晰的程序了。以前甚至还颇得意的用ruby写过这样自我感觉很好的程序。现在回想真是汗颜...
阅读全文