存档:数学

博客记忆

四月 23, 2010 | c/c++, js/web, linux, mysql, php, 心情杂记, 数学 | RSS 2.0

很长时间没有更新日志,大概有几个月了,疏于对知识的学习和管理,可能是跟工作有点忙有关系吧,经常顾着不顾那个,放弃了诸多的学习机会,
不过希望以后能恢复,时间是一种财富,能让你积淀更多的对知识的理解,同时也能验证更多的真理,譬如坚持才是硬道理,这两个月坚持的最好的一件事情还算是对自己花销的记录很分类,方法比较土,就是使用网易的邮箱里的一个小插件,有时候别人问你一个月能花多少钱?像我这种不扫一屋的人是一无所知的,统计了下发现对多的是花在了吃上和没周末的超市。
记得以前写博客都是从外面copy一堆东西,可能是自己的知识欠缺的太多,发现一篇技术文章就copy过来,沾沾自喜一番感觉很有成就感,后来发现好多牛人都是自己写博客,发现自己土了,而且写的都是超高技术含量,,而且现在基本上很多的知识获取都是从blog获得的,自己也曾在google reader里面follow了一堆,曾经每天早上9点到公司都花费10分钟时间,不过有点不好,开始没分类好,造成后来好多看的时候乱,杂乱无章的,挑出那种令你很满意的需要去甄选,所以有时候就懒的去看了。
不过一些东西一旦写下来还是能整理下自己的思维的。而且能做下备忘,所以以后需要把这个习惯坚持下去。今天写这个主要是想试试用vim写博客,用的是vimpress插件,下载地址在http://www.vim.org/scripts/script.php?script_id=1953,下来后直接解压到.vim下就可以了,修改blog.vim下的秘密用户还xmlrpc就可以了。ok,here,travel start。

没有评论 »

N = NP ?

十一月 12, 2009 | 数学, 数据结构算法, 读书 | RSS 2.0

终于捡到一个时间来写这篇文章,其实我对p和np也不是很了解,只是觉得学计算机的起码应该知道,np问题应该算是计算机科学中的未解决的问题,关于n=np 也是一个未知的问题,Clay数学院评出的七个悬赏百万美元的难题。简单的讲p就是我们能在多项式时间内解决的问题?例如一些排序算法,初等的一些数学运算,p就是polynomial ,计算机科学里的算法复杂度是O(n),O(n^2)等都属于p问题,而np问题则是不能在多项式时间内解决的为难题,它是有20世纪70年代,数理逻辑领域两位计算机科学家的发现,Stephen A. Cook 和richard karp的论文,许多类型不同的问题抽象的逻辑问题其实是同一个问题伪装成不同的形式,np是一个世界之谜,当我们有限的心灵面对宇宙成指数,也许是比指数更高级的一个运算的运算的复杂度增长时,我们如何应对,为什么我们无法预测未来,变量太多,导致我们的运算成告诉增长的苦难,简单如天气预报来说,计算机发展十年天气预报才能多预报一天,但是预报的也不是百分之百的准啊,大家都会深有体会,世界时一个混沌中,在其中,我们和合自然抗衡还差很远。
在生活工作中,我们是在solving problems,而且一般我们处理的问题一般也是p问题,很简单的能把它解决,复杂性能不算太高,但是如果别人给你出一个问题说给我算一下10的100次方个素数是多少?你会傻眼的,为什么??很简单的问题的复杂度增长的太快,一个简单的例子是我们高中在学等比数列时候的一个小故事,向国外索要粮食,以2为底数,可见都速度惊人?何况以别的呢?现实生活中以指数式增长的例子比比皆是,《数字追凶》记得描述过一个这样的案子,甲流如果不控制,可以想象其传播速度会有多快?在有一个例子是计算机安全领域的一些加密算法,很显然我们如果采取逐个坚持,所谓的暴力破解去解rsa,des算法相信还是很困难的,但是给你密钥,验证就可以在多项式时间内完成。可见np问题是非确定计算模型下易验证的问题,np完全是一类看似不相关的问题,可以最终化解成一类问题,如果解决了这样一类 问题,这整个问题链条都可以迎刃而解,如果a问题能化解为b,b能化解为c,c能化解为d等等,这解决了最底层的则整座大厦将可以击破,著名的np完全问题 旅行售货员问题,哈密顿问题,相信学计算机的都应该学过,这些问题会出现在《离散数学》,《算法分析》课程中,如果城市有限,我们可以把旅行售货员去过的地方做成图,或者画一个树,画出所有可能到达的分支,利用回溯法即可解决问题,但是如果他要去一万个城市呢?复杂度可想而知,但如果知道了,我们可以轻松的验证,许多问题都属于此类,如果我们找到一个通用的方法解决np问题在多项式时间内,即n=np,这我们的则没有安全,估计也到了大同世界,只要有密码的地方我们可以运行下计算机,轻松破解,而不比等千万年。例如我们的rsa加密算法利用的是大整数的分解的复杂度,迷宫也是一个np问题,世界就是一个错综复杂的迷宫。
下图是wiki上的np,p问题的所属列表。
250px-Complexity_classes.svg
说到问题的转化和分解,想起编译原理课程中讲过的一些状态图,图灵机等,事物的转化状态,看似复杂的理论,起最终的解决可以固定到一些模式上,例如经常提到的狼和白菜和羊过河问题,这样的问题,可以通过分析状态,画出状态。把所有的解化解成固定的模式。
在np完全问题上,可喜的是今年第25界计算几何年会我国复旦大学的学者提出 ,”最小曼哈顿网络问题是一个NP完全问题“,获得最佳论文奖,np完全还是很多的存在在现实中。 附件为他们的论文。scg

参考:
1 http://web.mit.edu/newsoffice/2009/explainer-pnp.html
2 计算机算法设计与分析
3 推理的迷宫

没有评论 »

谷堆悖论 连锁推理 图论解决推理题

十一月 9, 2009 | 数学, 读书 | RSS 2.0

断断续续的看了看《推理的迷宫》一书,paradox,puzzles and the frailty of knowledge。为作者博学所折服,哲学,对策论,计算机编程,物理,数学等多个领域,特别是逻辑学,总之作者依悖论导出作者的认识,人类文明的发展也是一次次在悖论危机中,找到新的分支,新的解释。自然科学一次次的升级,前进,发展。
特修罗的船:
传说中古希腊神特修斯有一艘战船,被雅典人作为历史文物保管起来。但是船上的一些木版已经腐烂了,必须要重新修补。就这样经过了许多许多年,这艘船的许多部分都被重修了。终于,船上再也没有最初的木版了。其实就是哲学的事物的发展的问题,所有的人都会同意撤掉一块木板后并不会改变船的身份,撤换一块还是原来的船,当问题是在某个时刻原来的船上的一块也不剩下了,如果此时还说是特修罗的船就不太合适了。
谷堆悖论:
无论什么时候从一堆沙子中,拿走一粒沙子,剩下的还是一堆沙子,会有这种可能,我们在一堆沙子中,取一粒,一粒,最终会出现剩下一粒的情景,我们取走后,就什么也没用了。
这些故事的现代版本是王浩悖论:
如果一个数x是小的,那么我们可以认为x+1是小的,那我们设x=0,大家都同意此时是小的,x+1是小哦,x+2是小的,依次得出所有的数都是小的,其实是荒唐的。
我的理解是按照哲学的解释是:事物发展到一定程度就会发生质变,量变引起质变,记得以前看过一本《数学头脑相遇的地方》讲的一个例子就是一个骆驼,你可以往它身上放稻草,一根接着一根,当总有时会,放了一根骆驼倒下了,其实也是这个道理,在数学上的解释也就是,变化发展依线性函数到一定程度就会突然变为不可预测的指数等多种混合模式发展,如果这个世界都是依照线性发展的,那我们就活的轻松自在了,我们可以预测二明天,因为在图上他的斜率是一定的,简单的用微积分的观念讲,变化率一定了,那就是const了,什么都会变的简单。我们认识世界的复杂度也会很简单。可惜的是现实不尽如人意。
解决谷堆悖论先认识下,连锁推理:
一个连锁推理是由一连串的推理构成的一个链条,在这种推理形式中,每一个命题的谓项和下一个敏体的主项相同,如:
所有大乌鸦是乌鸦,所有乌鸦是鸟,所有鸟是动物,所有动物都需要氧气,很明显我们能推出所有大乌鸦需要氧气。
还有一个经典的例子(引自《经典寓言中的逻辑学》):
一只猫泄漏了军事机密,讲的是德法在一次世界大战的战役中打的难解难分,战争的间隙,德国军官总是拿着望远镜监视法军的军事基地,发现一个重要战况:
他看见法国阵地后面的一个坟地上,每天早上都有一只价值不菲的波斯猫晒太阳,通过观察没有发现村庄,于是这个参谋对上级进行了汇报,指挥官非常重视,认真分析,得出结论,坟地下面有一个高级军官指挥部,刻不容缓,发动6个炮兵营开始发起猛烈攻击,结果可想而知,法军惨败,指挥部夷为平地。可以想想德国指挥部是如何分析得出的结论呢??
电梯问题:
电梯中有6个人,则或者其中至少有3个人互相认识,或者至少有3个人互相不认识,如何证明???
一个淫秽的版本是:大学宿舍任选6个学生,这或者至少有3个人,其中谁跟谁都在一起睡过,或者至少有3个人,其中谁跟谁都从未一起睡过?
这些问题展示了一个图论的数学分支,如果是计算机的话,大学课程里面一般会开《离散数学》,里面会讲到图论,一般也会挺过欧拉的七桥问题,都是图论的内容。上题翻译成图:
6个人表示6个点,任意两点间画一条线,表示二者关系,红线表示两人互相认识,黑线表示两人互相不认识:
a
b c
d e f
想象一下,画一下从a开始我们画五条线,表示我们要么认识,要么不认识,那么我们可以画5条线,无论如何三条线颜色相同,我们假定a至少认识3个人,继续画线,你就会发现矛盾。读者可以想象下,看来图论还是很有用的,数学与几何总是相得益彰,难怪当年笛卡尔梦中都在思考代数和几何联系啊。
雷声滚滚,得赶紧睡了。

没有评论 »

算法世界的哲学思考

九月 16, 2009 | 数学, 数据结构算法, 软件工程/编程技巧/设计模式 | RSS 2.0

每每读到一些好的算法都会让人有叹为观止的感觉,巧妙的设计让我们回味起数学,物理等,物理的测万有引力,远古时代没有任何工具的情况下的测量出地球的半径,人就是这么一个奇妙的动物。想体味下巧妙,你可以看下《啊哈,灵机一动》google黑板报的《数学之美》系列,微软的《编程之美》等,大道至简,简单的道理抽象到了一定的高度就适应于任何事物,在我看来数学和哲学都是抽象到一定程度的事物,你可以体味下1+1=2,事物的都是有联系的普遍性。俗话说大道至简。
读计算机以来,自然也学到不少算法,虽然现在搞些web的开发,当初也是软件开发的,总是忘不了学过的那些经典的算法,经常及其老师讲解时候的费力和樯橹灰飞烟灭。自己体味好多计算机里面的算法,定理,思想,更大自然世界很协调。
先举几个简单的小例子:
1 将两只小猫放到足球场的对面,相距100码,他们以每分钟10码的速度相向行走。同时这两只小猫的母亲在足球场的一端,它可以以每分钟100码的速度跑步,猫妈妈从一只小猫跑到另一只小猫,来回轮流跑而速度不减,一直跑到两只小猫在中场相遇,问猫妈妈跑了多远?
2 渔民在池塘放养了大量鱼苗。养到一定程度后,我们要估计现在池塘中有多少鱼?
3 有一根27厘米的细长杆,在第3厘米,7厘米,11厘米,17厘米,23厘米在五个位置各放有一只蚂蚁,木杆很细,不能同时通过两次蚂蚁,开始时,蚂蚁头朝右还是朝左是任意的,他们只会超前或者调头,当不会后退。当任意两只蚂蚁碰头时,两只蚂蚁会同时掉头朝反方向走,假设蚂蚁每秒钟可以走一厘米的距离,所有蚂蚁离开木杆的最短时间和最长时间。
4 棋盘覆盖问题。在一个2k x 2k ( 即:2^k x 2^k )个方格组成的棋盘中,恰有一个方格与其他方格不同,称该方格为一特殊方格,且称该棋盘为一特殊棋盘。在棋盘覆盖问题中,要用图示的4种不同形态的L型骨牌覆盖给定的特殊棋盘上除特殊方格以外的所有方格,且任何2个L型骨牌不得重叠覆盖。

1005341

5 某一天,一个新研究员向托马斯爱迪生报到。爱迪生要求他计算出一个空灯泡壳的体积。在使用测径仪和微积分进行数小时饿计算后,这个新员工给出了答案150立方厘米,而爱迪生在几秒之内计算就给出了更接近155,他是如何实现的呢?

—————————————-给出部分提示————————–

1 不要用蛮力,首先通过两只小猫可以计算出猫妈妈的跑步的时间,两只小猫相距100米,每分钟20码在接近,故5分钟完成,所以猫妈妈是500米

2 这个牵涉到数学中的概率等的知识,概率统计还是挺实用的一门学科,可以考虑用极大似然估算算法,即捞出一定数量的鱼,不能过少,坐上标记,过一定时间取出看看标记的比例

3 和第一个的思想有点像,碰头后蚂蚁会继续潜行,看做是个体运动就好考虑了

4 第四题图片方格少,还好,如果多了,你就不一定能搞定了,还需保证是4的k次幂,其实可以采用分治的思想,即图上可以上下左右四部分,带黑色宽那个就可以填好了,挨着黑色块的即中心的可以填好了,然后就把其他的搞定,如果更多如何?就行切分,分治,分而治理。

5 想想阿基米德王冠的故事你就明白了

现在可以看到了

一题三给我们一个解决问题的思路用时间求解较容易,摊还分析就是用这样一个思路,一如一个附加变量,位势,

二题,五题也是给我们一种思路转换问题的思路。4题给我们一个解决问题分而治之。

可以看到什么样的哲学思想呢?首先事物是联系的,解决了这个事物,和其关系的别的也就可以相应的解决了,整体和局部的思想,局部解决了,整体也就好了。

看看别的算法

1 递归于分治策略,递归?现实生活中哪里有递归的影子?没想到?那就照照镜子吧,看到了,这个就是递归,事物本身的属性,局部整体的哲学思想

2 动态规划,类似分治递归,当他们的若干个问题不是独立的是联系的,第n个问题和n-1个问题是有关系的,

3 贪心算法很明晰矛盾分主要矛盾和次要矛盾,抓住了主要矛盾就抓住了问题的核心

4 概率算法:事物发展的不确定性,螺旋式发展。舍伍德算法,拉斯维加斯算法,我们经典的抛针算π的算法,蒙特卡洛算法,现在基本都忘记了。

5 线性规划,回溯法,分枝限界法 这些都是通过把问题抽象,合理的布局,解决之,算是事物之间的联系吧。别的暂时没行到。

6np完全性理论和近似算法:图灵机等,应该是事物的发展变化的各个状态,著名的图灵机问题,问题的各个态势的变化,这个算法我不熟。

暂时先想到这里,也算是对自己学过的算法课程的一个回忆。

没有评论 »

我理解的中西方文明

八月 26, 2009 | 心情杂记, 数学, 读书 | RSS 2.0

为什么华夏五千年的文明没有诞生大的科学,没有推动人类社会走向工业文明的社会的发展,为什么近代文明一次次的发展没有中国的影子?

我觉得应该从民族的思维形态和意识来探讨,总得讲西方的科学是一种质测的科学,是一种准确的科学,而中国的则是模糊的追求意境的一种算不上科学的科学,从我们从小到大也应该感觉到我们教育的不足,就像别人说的主流的文化是一元化的成功,就是在校看成绩,走出学校看名利,社会也是那名利来认可判断一个人的标准,所以在中国几千年的突然上倒是滋生了官场学问,对这些的追求成为带带不变的,“衣带渐宽终不悔,为伊消得人憔悴”,古代的一些借物用咏志者,官场不得志者大有人在,我在想如果这些人都没有这些所谓的名利观念,研究下科学该多好。所以我认为几千年的文明贯穿的主线还是孔子的中庸之道,穷则独善其身,达则兼并天下,当然在中国古代也有科学的发展,比如祖冲之的圆周率,徐光启,等寥若晨星,当他们永远是一小部分人的东西,很少能听说哪个朝代的大臣研究这些的,诗经,论语,唐诗宋词元明曲 到成了我们的经典,当我们从这里有能学到什么呢?是的做人,但是在现实生活中广做人是不够的,还需要做事,孔子,老子,孙子代表了古典中最经典的文化,孔子的教我们如何做人,老子具有了朴素的哲学思想,做什么事情都要有个度,而孙子呢?带给了我们《孙子兵法》,教我们做事,很明显我们大多数人忽视了孙子兵法,但恕不知孙子兵法在世界上备受推崇,从日本的松下等企业的商战,到海湾战争,据说当时胡佛总统桌上两本书,一本就是孙子兵法,可见我们祖先的智慧还是无穷的,当我们却很少去研究利用他们,看孙子兵法你可以看到好多闪光点,譬如兵势篇,我觉得很有超前的思想,激水之疾,至于漂石者,势也;鸷鸟之疾,至于毁折者,节也。是故善战者,其势险,其节短。势如NFEEC弩,节如发机。想想我们物理中学到的势能是不是被我们祖先的智慧说折服,还有很多,里面也有好多的朴素的哲学思想,也有现代的博弈论的思想,毕竟是双方对战吗?这样一本经典的著作,有多少人关注呢?

中西文明还有一大差别是对文化的追求上,中国古典文学里大多追求的意境,经典的例子就是:“你问我爱你有深,月亮代表我的心,你去问一问。。。。”,而西方这大多会肯定的说 “ I love u ”,这些都在思维方式的不同,哪一个切身的例子,比如以前我们在新光天地地下广场吃饭,经常会去找位置,找凳子,而一般我们去找凳子都会去问,”请问你的凳子还有人做吗?”,而有一次一个老外有一次向我们借,则说“can  I take the chair”,本来那个凳子没人做,按照我们的习惯思维说,也没太清楚那个人说的话,以为他在说,凳子有人做吗?我们所no,其实相反,闹了一个不大的笑话。这个就是我们思维习惯的不同,其实也是我们的逻辑体系的不同,看看爱因斯坦的话,爱因斯坦于1953年给斯威泽的信中说,“西方科学的发展是以两个伟大的成就为基础的,即希腊哲学家发明的形式逻辑体系(在欧几里得几何学中),以及通过 系统的实验发现有可能找出因果关系(在文艺复兴时期)。在我看来,中国的贤哲没有走上这两步,那是用不着惊奇的。若是这些发现(在中国)全都做出来了,那 反倒是令人惊奇的事情。”爱因斯坦实际上指出了:近代科学的发展在方法论上需要两大发现,即“从一般到特殊”的演绎法和以实验为基础的“从特殊到一般”的 分析和归纳法。这些也就是我们的不同。

其实这些都与我们的文化息息相关比如我们的方块字文化和西方的字母文化是不同的,在疾驰的地铁上,你大眼一看就理解看出墙上的模糊的字,而如果是因为英文,你必须完全看清楚才能下定义,这个就是我们的模糊的,而西方这是准确的,我们追求意境,他们追求质地,王国维的人间词话里对意境的讨论最多,词以境界为最上,有境界则自成高格,自有名句。大家只知道拿破仑的血腥,不知道拿破仑也是一名数学家,与拉格朗日等经常讨论问题,著名的拿破仑三角形,还记得以前读书的一个小细节,说笛卡尔的解析几何流行时,当时的贵族人人一本,很流行,他们觉得这个是一种荣耀,而且女王请笛卡尔给他们讲课,可见在西方文化中他们人人对科学都很重视。

说说西方文明的发源地,源自于古代埃及巴比伦等地域,那时候他们有些地域每年分给奴隶的土地都受河流冲刷,尼罗河的赠礼和这个有关吗?忘记了,导致他们每年要上交税等的不一样,就这样他们必须测量来决定上交的税等,这样就诞生了几何的雏形,也让人类产生了思考,对大自然的思考,对上帝的思考,一次次的发展,泰勒斯人类上第一位科学家,托勒密等都在人类文明上作出了卓越的贡献,他们都带我们带入了对自然的思考,对现实世界的抽象,从毕达哥拉斯的勾股定理的发现,对声乐的思考相处乐声和发生物体的长度有关,到无意间发现罪恶的根号2,无理数,又带入了我们进入了一次次的无穷的探索,毕达哥拉斯和后来的柏拉图都为科学的发展和传播作出了巨大贡献,毕达哥拉斯学派,到欧几里德独立思考写出了《几何原本》,更加抽象了自然界,虽然是当时看来研究这些是得不到什么,是纯粹的数学,不想中国的书中自有颜如玉,当他推动了人类文明的发展和进程,西方科学发展也遍地开放,文艺复兴等一次次锲机,走向了更远的地区,特别是数学的发展,数次转行中心,从古希腊到高斯领头的哥廷根大学,到现在美国为中心的数学中心,拥向了一代代为人类做出卓越贡献的,阿基米德,欧拉,费马,笛卡尔,乔治康拓,哥德尔, 伽罗瓦,哈牛顿,莱布尼茨,哈代,印度国宝拉马努金,庞加莱,希尔伯特,到现在的冯诺依曼,图灵,每一个名字都曾照亮了我们的人类的行程,太多太多。试想如果他们中有个一个是我们中国人会怎么样?

总之我的思想是以后我们民族应该引导我们学习西方的质测的科学,不止是读三字经,百家姓,也应该读读西方人的譬如《几何原本》,《什么是数学》《西方文化中的数学》,任何事物的精华值得我们去学习的,我们要汲取。也希望我们国家以后会诞生越来越多的科学牛人

没有评论 »

数学中看似无解的问题

八月 11, 2009 | 数学 | RSS 2.0

也是经常提到的比较经典的问题,证明给人以巧妙,不可思议的感觉。两个,也是晚上放答案:

1 一个人上山,从早上6点种出发,晚上六点到达山顶。晚上留住在山上,第二天也是早上6点准时从山顶出发,晚上6点到达山顶,试问,有没有一点,此人两天中同一时刻在同一地点?

2 这个是《什么是数学》中的一个问题,即一个不规则的平面区域,能否有一条直线平分它,及分成面积相同的区域,继续,如果有两块不规则的 区域,能有有一条直线同时平分这两块区域?及两块区域被分后,两块都被平分

——————————我是分割线——————–

没有评论 »

无理数和有理数的证明

八月 11, 2009 | 数学 | RSS 2.0

今日看到两个非常好的证明,先放到这里,晚上放答案

1 如何证明根号2是无理数?

2 如何证明无限循环小数是有理数

——————————-我是分割线————————————–

证明如下:

首先要明白如果是有理数必须能表示能两个数的比的形式

1 假定存在两个整数,a和b,a是b的根号2倍,则a^2=2* b^2,首先这两个数,不失一般性,即不可约,现在假设a为奇数,则出现矛盾,则假设a为偶数,这可以表示为2c,这上式可以表示为4c^2= 2b^2这有出现可约的形式,则矛盾,所以数再次矛盾,总的数是不能表示为两个数的比例的形式

2 设有一个循环无穷的小数0.123123123.。。。。。。。。。。。。。。。令它为x,则1000x=123.123123123.。。。。。于是1000x-x=123.00000000得到循环节,这999x=123,这x可以表示成两个数的bi的形式,这为有理数

没有评论 »

密码传奇和重构

八月 8, 2009 | 数学, 读书 | RSS 2.0

近段时间读了两本书,一本是《密码传奇》,一本是《重构》 改善既有代码的设计,本来看似无关的两本书,但还是有些联系的,有些时候我喜欢比较看是无关的东西,比如以前我在看拿破仑转时,我喜欢把曹操和拿破仑比,他们这些优秀的人身上还是有些相同点的,比如军纪严明,都爱才,比如曹操和拿破仑,只要有能力,就提拔,所以拿破仑的一些比较出名的爱将以前都是地痞流氓之类的,曹操也是。两人都很有才华,譬如曹操是我国著名的思想家,文学家,军事家,拿破仑在数学方面有独到的建树,比如拿破仑的一个三角形定理,在远征埃及时,带了一批优秀的数学家,哲学家,比如著名的拉格朗日,都参与拿破仑讨论问题。那时候他们远征埃及的征船上聚集了当时世界最有智慧的头脑。

记得当时读拿破仑传时候激情澎湃,天生的将才,今天读《密码传奇》更多的也是感觉到智慧的力量,从一些牛叉叉的人身上让我们看到人的智慧是无穷的,人类的密码战也是人类智商的最高pk,二战时期的发展,也奠定了密码学的基础,Enigma也成为一段美谈。给我留下的几点是:

1 首先是《密码传奇》里面提到的作者给予光环的三个人,当然第一个是enigma的创造者谢尔比乌斯,一位老板,第二个是波兰的数学家,数学三杰,雷尔夫斯基,等,一个在二战时候夹缝中生存的国家,诞生了牛叉的数学家。最后一个当然是在计算机界传奇的人物,计算机之父,图灵。大家应该知道图灵奖。

2 enigma的设计的巧妙和破解的巧妙。enigma 利用密码学的多表的替代和代表替代相结合,为了解决解密和加密的问题的,中间加了反射板,这样解密和加密用同一台的机器。解密的巧妙就是数学巧妙 的运用,波兰数学家运用群伦知识,作者顺便介绍了群伦之爹,法国数学家伽罗瓦,这个在世界所有大学数学系悬挂的一张年轻的数学家的脸,那就是群伦之父,记得她给数学家柯西,傅里叶写过论文,介绍他的理论,当然他们都没有注意这个数学家,法兰西科学院的泊松读过他的论文,当没有看懂,最后伽罗瓦为了爱情而决斗显出了年轻的生命,但就在他在决斗的前一夜写下了他的理论,为人类留下了宝贵的财富。奠定了群伦的发展,这个也就是破解enigma运用的东西,后来的图灵也是超级牛叉的布莱奇利庄园也是聚集了当时剑桥大学,牛津大学大批的数学家,语言分析家,他们发明了bomba。机器破解

3 传奇的人物,传奇的庄园,一个人的智商加速了二战的结束,一个人的智商促进了世界的和平,这个人就是图灵,尽管天才总有人不解,比如同性恋。当还是在人类历史宝贵的东西。

4 本书的作者的,虽然不是计算机等专业,当作者把enigma的密码模式,破解原理解释的很清楚,虽然我没有完全明白。

再来谈重构,讲的一些方法还是很实用的,简单的包括函数的抽取。获益匪浅,打算仔细研究下,然后写个总结

1条评论 »

浅谈程序员的数学修养 (转)

四月 30, 2009 | 数学 | RSS 2.0

浅谈程序员的数学修养

    可能有很多朋友在网上看过google公司早几年的招聘广告,它的第一题如下了:{first 10-digit primefound in consecutive digitse}.com,e中出现的连续的第一个10个数字组成的质数。据说当时这个试题在美国很多地铁的出站口都有大幅广告,只要正确解答了这道题,在浏览器的地址栏中输入这个答案,就可以进入下一轮的测试,整个测试过程如同一个数学迷宫,直到你成为google的一员。

  又如Intel某年的一道面试题目:巴拿赫病故于1945年8月31日。他的出生年份恰好是他在世时某年年龄的平方,问:他是哪年出生的?这道看似很简单的数学问题,你能不能能快地解答呢?

  下面则是一道世界第一大软件公司微软的招聘测试题:中间只隔一个数字的两个素数被称为素数对,比如5和7,17和19,证明素数对之间的数字总能被6整除(假设这两个素数都大于6),现在证明没有由三个素数组成的素数对。这样的试题还有很多很多,这些题目乍初看上去都是一些数学问题。但是世界上一些著名的公司都把它们用于招聘测试,可见它们对新员工数学基础的重视。数学试题与应用程序试题是许多大型软件公司面试中指向性最明显的一类试题,这些试题就是考察应聘者的数学能力与计算机能力。

  某咨询公司的一名高级顾问曾说:微软是一家电脑软件公司,当然要求其员工有一定的计算机和数学能力,面试中自然就会考察这类能力。微软的面试题目就考察了应聘人员对基础知识的掌握程度、对基础知识的应用能力,甚至暗含了对计算机基本原理的考察。所以,这样的面试题目的确很“毒辣”,足以筛选到合适的人。

  四川大学数学学院的曹广福教授曾说过:“一个大学生将来的作为与他的数学修养有很大的关系”。大学计算机专业学生都有感触,计算机专业课程中最难的几门课程莫过于离散数学、编译原理、数据结构,当然像组合数学、密码学、计算机图形学等课程也令许多人学起来相当吃力,很多自认为数据库学得很好的学生在范式、函数依赖、传递依赖等数学性比较强的概念面前感到力不从心,这些都是因为数学基础或者说数学知识的缺乏所造成的。

  数学是计算机的基础,这也是为什么考计算机专业研究生数学都采用最难试题(数学一)的原因,当然这也能促使一些新的交叉学科如数学与应用软件、信息与计算科学专业等飞速发展。许多天才程序员本身就是数学尖子,众所周知,BillGates的数学成绩一直都很棒,他甚至曾经期望当一名数学教授,他的母校——湖滨中学的数学系主任弗雷福·赖特曾这样谈起过他的学生:“他能用一种最简单的方法来解决某个代数或计算机问题,他可以用数学的方法来找到一条处理问题的捷径,我教了这么多年的书,没见过像他这样天分的数学奇才。他甚至可以和我工作过多年的那些优秀数学家媲美。当然,比尔也各方面表现得都很优秀,不仅仅是数学,他的知识面非常广泛,数学仅是他众多特长之一。”。影响一代中国程序人的金山软件股份有限公司董事长求伯君当年高考数学成绩满分进一步说明了问题。很多数学基础很好的人,一旦熟悉了某种计算机语言,他可以很快地理解一些算法的精髓,使之能够运用自如,并可能写出时间与空间复杂度都有明显改善的算法。

  程序设计当中解决的相当一部分问题都会涉及各种各样的科学计算,这需要程序员具有什么样的基础呢?实际问题转换为程序,要经过一个对问题抽象的过程,建立起完善的数学模型,只有这样,我们才能建立一个设计良好的程序。从中我们不难看出数学在程序设计领域的重要性。算法与计算理论是计算机程序设计领域的灵魂所在,是发挥程序设计者严谨,敏锐思维的有效工具,任何的程序设计语言都试图将之发挥得淋漓尽致。

  程序员需要一定的数学修养,不但是编程本身的需要,同时也是培养逻辑思维以及严谨的编程作风的需要。数学可以锻炼我们的思维能力,可以帮助我们解决现实中的问题。可以帮助我们更高的学习哲学。为什么经常有人对一些科学计算程序一筹莫展,他可以读懂每一行代码,但是却无法预测程序的预测结果,甚至对程序的结构与功能也一知半解,给他一个稍微复杂点的数学公式,他可能就不知道怎么把它变成计算机程序。很多程序员还停留在做做简单的MIS,设计一下MDI,写写简单的Class或用SQL语句实现查询等基础的编程工作上,对于一些需要用到数学知识的编程工作就避而远之,当然实现一个累加程序或者一个税率的换算程序还是很容易的,因为它们并不需要什么高深的数学知识。

  一名有过10多年开发经验的老程序员曾说过:“所有程序的本质就是逻辑。技术你已经较好地掌握了,但只有完成逻辑能力的提高,你才能成为一名职业程序员。打一个比方吧,你会十八般武艺,刀枪棍棒都很精通,但就是力气不够,所以永远都上不了战场,这个力气对程序员而言就是逻辑能力(其本质是一个人的数学修养,注意,不是数学知识)。”

  程序员的数学修养不是一朝一夕就可以培养的。数学修养与数学知识不一样,修养需要一个长期的过程,而知识的学习可能只是一段短暂的时间。下面是一些我个人对于程序员如何提高与培养自己的数学修养的基本看法。

  首先,应该意识到数学修养的重要性。作为一个优秀的程序员,一定的数学修养是十分重要也是必要的。数学是自然科学的基础,计算机科学实际上是数学的一个分支。计算机理论其实是很多数学知识的融合,软件工程需要图论,密码学需要数论,软件测试需要组合数学,计算机程序的编制更需要很多的数学知识,如集合论、排队论、离散数学、统计学,当然还有微积分。计算机科学一个最大的特征是信息与知识更新速度很快,随着数学知识与计算机理论的进一步结合,数据挖掘、模式识别、神经网络等分支科学得到了迅速发展,控制论、模糊数学、耗散理论、分形科学都促进了计算机软件理论、信息管理技术的发展。严格的说,一个数学基础不扎实的程序不能算一个合格的程序员,很多介绍计算机算法的书籍本身也就是数学知识的应用与计算机实现手册。

  其次,自身数学知识的积累,培养自己的空间思维能力和逻辑判断能力。数学是一门分支众多的学科,我们无法在短暂的一生中学会所有的数学知识,像泛函理论、混沌理论以及一些非线性数学问题不是三五几天就可以掌握的。数学修养的培养并不在与数学知识的多少,但要求程序员有良好的数学学习能力,能够很快地把一些数学知识和自己正在解决的问题联系起来,很多理学大师虽然不是数学出身,但是他们对数学有很强的理解能力和敏锐的观察力,于是一系列新的学科诞生了,如计算化学、计算生物学、生物信息学、化学信息学、计算物理学,计算材料学等等。数学是自然学科的基础,计算机技术作为理论与实践的结合,更需要把数学的一些精髓融入其中。从计算机的诞生来看它就是在数学的基础上产生的,最简单的0、1进制就是一个古老的数学问题。程序设计作为一项创造性很强的职业,它需要程序员有一定的数学修养,也具有一定的数学知识的积累,可以更好地把一些数学原理与思想应用于实际的编程工作中去。学无止境,不断的学习是提高修养的必经之路。

  第三,多在实践中运用数学。有些高等学校开设了一门这样的课程——《数学建模》。我在大学时期也曾学过,这是一门内容很丰富的课程。它把很多相关的学科与数学都联系在一起,通过很多数学模型来解决实际的生产生活问题,很多问题的解决需要计算机程序来实现。我在大学和研究生阶段都参加过数学建模竞赛,获得了不少的经验,同时也进一步提高了自己的数学修养。实际上,现在的程序设计从某些角度来看就是一个数学建模的过程,模型的好坏关系到系统的成败,现在数学建模的思想已经用于计算机的许多相关学科中,不单只是计算机程序设计与算法分析。应该知道,数学是一门需要在实践中展示其魅力的科学,而计算机程序也是为帮助解决实际问题而编制的,因此,应该尽量使它们结合起来,在这个方面,计算机密码学是我认为运用数学知识最深最广泛的,每一个好的加密算法后面都有一个数学理论的支持,如椭圆曲线、背包问题、素数理论等。作为一名优秀的程序员,应该在实际工作中根据需要灵活运用数学知识,培养一定的数学建模能力,善于归纳总结,慢慢使自己的数学知识更加全面,数学修养得到进一步提高。

  第四,程序员培养制度与教学的改革。许多程序员培养体制存在很多缺陷,一开始就要求学员能够快速精通某种语言,以语言为中心,对算法的核心思想与相关的数学知识都一笔带过,讲得很少,这造成很多程序员成为背程序的机器,这样不利于程序员自身的快速成长,也不利于程序员解决新问题。我在长期的程序员培训与计算机教学工作采用了一些与传统方式不一致的方法,收到了一定的效果。很多初学程序的人往往写程序时有时候会有思维中断,或者对一些稍难的程序觉得无法下手,我采用了一些课前解决数学小问题的方法来激励大家的学习兴趣,这些小问题不单单是脑筋急转弯,其中不少是很有代表意义的数学思考题。通过数学问题来做编程的热身运动,让学员在数学试题中激发自己的思维能力,记得有位专家曾经说过,经常做做数学题目会使自己变聪明,很长时间不去接触数学问题会使自己思维迟钝。通过一些经典的数学问题来培养学员的思维的严谨性和跳跃性。很多人可能不以为然,其实有些看似简单的问题并不一定能够快速给出答案,大脑也是在不断的运用中变更加灵活的。不信吗?大家有兴趣可以做做下面这道题目,看看能不能在1分钟之内想到答案,这只是一道小学数学课后习题。很多人认为自己的数学基础很好,但是据说这道题目90%以上的人不能在一个小时内给出正确答案。试试,如果你觉得我说的是错的。

  证明:AB+AC>DB+DC(D为三角形ABC的一个内点)。

  最后,多学多问,多看好书,看经典。我在这里向大家推荐两部可能大家已经很熟悉的经典的计算机算法教材,它们中间很多内容其实就是数学知识的介绍。第一部是《算法导论》,英文名称:Introduction to Algorithms,作者:Thomas H. Cormen,Charles E. Leiserson ,Ronald L. Rivest ,CliffordStein。本书的主要作者来自麻省理工大学计算机,作者之一Ronald L.Rivest由于其在公开秘钥密码算法RSA上的贡献获得了图灵奖。这本书目前是算法的标准教材,美国许多名校的计算机系都使用它,国内有些院校也将本书作为算法课程的教材。另外许多专业人员也经常引用它。本书基本包含了所有的经典算法,程序全部由伪代码实现,这更增添了本书的通用性,使得利用各种程序设计语言进行程序开发的程序员都可以作为参考。语言方面通俗,很适合作为算法教材和自学算法之用。另一部是很多人都应该知道的Donald.E.Knuth所著《计算机程序设计艺术》,英文名称:The Art of Computer Programming。Donald.E.Knuth人生最辉煌的时刻在斯坦福大学计算机系渡过,美国计算机协会图灵奖的获得者,是本领域内当之无愧的泰斗。有戏言称搞计算机程序设计的不认识Knuth就等于搞物理的不知道爱因斯坦,搞数学的不知道欧拉,搞化学的不知道道尔顿。被简称为TAOCP的这本巨著内容博大精深,几乎涵盖了计算机程序设计算法与理论最重要的内容。现在发行的只有三卷,分别为基础运算法则,半数值算法,以及排序和搜索(在写本文之际,第四卷已经出来了,我也在第一时间抢购了一本)。本书结合大量数学知识,分析不同应用领域中的各种算法,研究算法的复杂性,即算法的时间、空间效率,探讨各种适用算法等,其理论和实践价值得到了全世界计算机工作者的公认。书中引入的许多术语、得到的许多结论都变成了计算机领域的标准术语和被广泛引用的结果。另外,作者对有关领域的科学发展史也有深入研究,因此本书介绍众多研究成果的同时,也对其历史渊源和发展过程做了很好的介绍,这种特色在全球科学著作中是不多见的。至于本书的价值我觉得BillGates先生的话足以说明问题:“如果你认为你是一名真正优秀的程序员读Knuth的《计算机程序设计艺术》,如果你能读懂整套书的话,请给我发一份你的简历”。作者数学方面的功底造就了本书严谨的风格,虽然本书不是用当今流行的程序设计语言描述的,但这丝毫不损伤它“程序设计史诗”的地位。道理很简单,它内涵的设计思想是永远不会过时的。除非英语实在有困难,否则建议读者选用英文版。我个人就是阅读的该书的英文版,虽然花了不少money和时间,但是收获颇丰,值得。

  总之,要想成为一名有潜力有发展前途的程序员,或者想成为程序员中的佼佼者,你一定要培养良好的数学修养。切记:对于一名能够灵活自如编写各种程序的人,数学是程序的灵魂。

没有评论 »

常见的数学思想(转)

四月 30, 2009 | 数学 | RSS 2.0

  对于搞工程和技术的朋友来讲,在工作中常常遇到一些实际问题,而采用常规的思维方式无法很好的解决这些问题,那么这个时候我们就需要用数学语言和数学工具,而使用数学工具的前提却是用数学思想的方法来描述问题。。下面转帖几种常用的数学思想方法,仅供学习和参考

  函数思想
  把某一数学问题用函数表示出来,并且利用函数探究这个问题的一般规律。这是最基本、最常用的数学方法。

  数形结合思想
  “数无形,少直观,形无数,难入微”,利用“数形结合”可使所要研究的问题化难为易,化繁为简。把代数和几何相结合,例如对几何问题用代数方法解答,对代数问题
用几何方法解答,这种方法在解析几何里最常用。例如求根号((a-1)^2+(b-1)^2)+根号(a^2+(b-1)^2)+根号((a-1)^2+b^2)+根号(a^2+b^2)的最小值,就可以把它放在坐标系中
,把它转化成一个点到(0,1)、(1,0)、(0,0)、(1,1)四点的距离,就可以求出它的最小值。

  分类讨论思想
  当一个问题因为某种量的情况不同而有可能引起问题的结果不同时,需要对这个量的各种情况进行分类讨论。比如解不等式|a-1|>4的时候,就要讨论a的取值情况。

  方程思想
  当一个问题可能与某个方程建立关联时,可以构造方程并对方程的性质进行研究以解决这个问题。例如证明柯西不等式的时候,就可以把柯西不等式转化成一个二次方程的判别式。

  整体思想
  从问题的整体性质出发,突出对问题的整体结构的分析和改造,发现问题的整体结构特征,善于用“集成”的眼光,把某些式子或图形看成一个整体,把握它们之间的关联
,进行有目的的、有意识的整体处理。整体思想方法在代数式的化简与求值、解方程(组)、几何解证等方面都有广泛的应用,整体代入、叠加叠乘处理、整体运算、整体设元
、整体处理、几何中的补形等都是整体思想方法在解数学问题中的具体运用。

(整体思想和系统论密切相关,请参看我的博文,钱学森系统方法论)

  转化思想
  在于将未知的,陌生的,复杂的问题通过演绎归纳转化为已知的,熟悉的,简单的问题。三角函数,几何变换,因式分解,解析几何,微积分,乃至古代数学的尺规作等数
学理论无不渗透着转化的思想。常见的转化方式有:一般 特殊转化,等价转化,复杂 简单转化,数形转化,构造转化,联想转化,类比转化等。

  隐含条件思想
  没有明文表述出来,但是根据已有的明文表述可以推断出来的条件,或者是没有明文表述,但是该条件是一个常规或者真理。

  类比思想
  把两个(或两类)不同的数学对象进行比较,如果发现它们在某些方面有相同或类似之处,那么就推断它们在其他方面也可能有相同或类似之处。

  建模思想
  为了描述一个实际现象更具科学性,逻辑性,客观性和可重复性,人们采用一种普遍认为比较严格的语言来描述各种现象,这种语言就是数学。使用数学语言描述的事物就
称为数学模型。有时候我们需要做一些实验,但这些实验往往用抽象出来了的数学模型作为实际物体的代替而进行相应的实验,实验本身也是实际操作的一种理论替代。

  化归思想
  化归思想就是化未知为已知,化繁为简,化难为易.如将分式方程化为整式方程,将代数问题化为几何问题,将四边形问题转化为三角形问题等.实现这种转化的方法有:待定系数法,配方法,整体代人法以及化动为静,由抽象到具体等转化思想

  归纳推理思想
  由某类事物的部分对象具有某些特征,推出该类事物的全部对象都具有这些特征的推理,或者由个别事实概括出一般结论的推理称为归纳推理(简称归纳),简言之,归纳推理是由部分到整体,由个别到一般的推理

  概率统计思想
  另外,还有概率统计思想等数学思想,例如概率统计思想是指通过概率统计解决一些实际问题,如摸奖的中奖率、某次考试的综合分析等等。另外,还可以用概率方法解决一些面积问题。

1条评论 »