《道德经——何谓太极》 一个没学过算法的人所想的算法。 算法一太极 太极指阴阳相结合。 这是我在思考什么是算法的时候,而此时我第一个接触的算法就是f(n) 函数。 做了几个编程算法题之后 我突然灵机一想,有没有一种算法,代表了所有的算法呢,脑子灵机一动,很自然的联想到了唯一接触过的函数了。 因为我实际的用函数来解决了几个问题,在我所解决的几个问题中,说白了都是不同属性的东西的叠加,从中得出一个结果。 这就像是道家所说的阴阳之道。一个问题如果你放到一起,那就是一片馄饨,但是你把他们的东西解析开来,各司其职,算法就出来了。而到最后就会变成最简单根本的f(n)函数。 虽然公式是函数,不过这里面更多的是一个悟性,所以我姑且命名为太极算法。我没有接触过函数,这是我的初步认知,但是我会尝试用这个算法的哲学思想,去尝试看看我能解决什么样的各类数学题目。 PS:通常而言,f(n),f指formula,n指一个数目。通常都是一个难题,要怎样解决,于是一个f(n)=n=一个固定的值,f拥有一个或多个值,因此f是n的函数。 而我这里的概念则是,f是n的函数,f有一个或多个值。n也是f的函数,而且n也有一个或多个值,于是一个求解的值,通过一个叫做‘="的符号,代表等于,有时候代表过滤器filter,取出想要得到的结果,于是值就求得了。 《阴阳函数》 一个矛盾论追随者,听说了远古的东方有本叫做道德经的经书,蕴含了两极的智慧,于是特地跑到异大陆来交流。 他找到了一个道士,他问道士说:“听说东方有一套理论——太极,能让两种极端并存在一起,这个原理能在计算机上实现吗?” 道士说:”你为什么这么问?“ 矛盾论追随者很自信的说:”因为冷和热是不能共存的,大和小是不能共同存在的,有和无是不可能是一体的,我想要证明哲学是一门不实际的学科。“ 道士浅笑说道:”你能用数学来描述一滴水的本质的定义吗?“ 矛盾论者说道:“当然,无论是毫升,还是公升,又或是毫克,千克,体积,热量,温度,都能计算出这个水的本质。” 道士摇头说:”这是属性的定义,并非本质的定义。这样写出来的代码将会又长又烦,大量的重复了不必要的叙述。“ 矛盾论者问道:“那么什么是正确的叙述方式。” 道士说:“阴和阳是相辅相成的,正是因为阴和阳拥有完全不同的性质,所以才能成为水的本质,温度,体积,重量,那是叙述水当下的状态,并非叙述了水的本质。太极的精神正是中庸,持恒,只有保持着循环不息的阴阳,万物才得以生长。” 矛盾论者不服气,他认为这些哲学上的理论一点都不实用,他很气愤的大声问道:“那么什么公式是水的本质?,什么公式能让矛盾并存?“ 道士笑说:”一滴水要蒸发所需的时间,是一滴水形成的时间的函数。而一滴水要形成的时间,是一滴水蒸发所需的时间的函数,无论是任何元素。这就是阴阳的函数。” 矛盾论者浑身一震,他明白了。 “这就是太极的智慧。” f(n) = 两种截然不同的函数公式的叠加 后记 在写完这篇文章之后,我发给了一位计算机系的学生交流了一下,所得到的反响并不乐观,他认为这并不是很实用的公式,而且还不同于他平时所用到的方法。于是我给他举了几个例子,并用这个公式去做解答,他对此更有意见了,他认为这个角度的思考方法太哲学了,我是在以哲学的角度去给数学求解,他认为这是吃力不讨好的做法,而且也不是正确的做法。 我只能说,我也不敢说我的算法是正确的,毕竟我初学算法的日子只有一天,我是今天才第一次接触算法的思维的。但是我却不认同他的说法,因为他认为哲学并非实用的学科,而我没有意思要向他解释什么是哲学,而且大多的人都忘记了一件事情,绝大多数的哲学,都是从最实际的技巧中,提升为哲学领域的,哲学并非是一种不实用的学科。 写于吉隆坡 2008年6月27日 The Taiji of Programing Thinking or The Taiji of Coding Thinking 这篇文章是继第一篇太极算法的文章,主要是因为有了更深的文字领悟。 起因是在于初步的阅读了C++ Programming Style的中文译版后,其中所提到的种种算法思维,其实都不够完美。 这本书的思维方式,不可否认出发点是实际的,但是却是单向的,在他的观念中,解决问题的方法是一个方法,以及一个最优化的方法。 而这点在他面临“多重继承”如此较为复杂的定义格局时,出现了无法彻底给多重继承写下较为适合的基本定义。 而在我所写出来的阴阳算法中,多重继承本就不复杂,也不是多重继承,但是以阴阳的准则给各个值下定义,囊括在主要的函数内叠加,就能起到其文中所构思的多重定义的部分,并且你会发现,多重定义一点也不难,也不会是你的绊脚石,而且是很实用的一种算法。 我并不打算深入解释这个阴阳算法,根据我向几个人解释的结果是,他们对此深表不以为然,我必须承认那是我的知识不足,无法把很深奥实用的道理化成简单并且能让人们理解或感悟的说法。 我将尝试用我所能解释的方法来说。 f(F) 是指2个函数的对应,一个是阴,一个是阳,他们必须是不同的基本属性,才能产生对应的作用,才能描述完整的一个环境。而这个环境,在c++ programming style中认为,是所谓的不好掌握的多重继承。 如果一个东西是阴,对应的东西也是阴,那么这个函数本身就没有其意义了。 让我们来看下面的一个例子: 有一条通道,一次只能走一个人,此时分别有5个人站在通道内,通道总长27米,5个人分别站在第3米,7米,11米,17米,23米,他们走的挺快,一秒能走1米,但是他们的面向方向是不一样的,当他们碰头时,会掉头朝各自的反方向走,这样的情况下,2头都是出口,他们最短全部走出通道的时间和最长走出通道的时间要多久? 以下是阴阳函数的解决方法 f(F) f = 通道的函数 例子:{长度,等} {其他各种属性} F = 5个人的各自函数 例子:{a,b,c,d,e} {步伐} {其他各种属性} f(F) = 描述了整个完整的情况,两个函数是对应的,此时再从中提取你所需要的值,就能从这个算法得益了。 通道,是一种属性,对应着 人 这另一种属性,两种完全不同定义的属性函数产生对应关系,便是阴阳函数了。假设f是人,F也是人,那么这个对应就不成立,因为这个对应并没有完整的描述了整个场景而只是在两个同属性的值之间产生计算关系。阴阳函数的意思便在这里,什么是阴,什么是阳?他们怎么产生关联,为什么阴和阳并不矛盾,能并存与世上? 相信到了这里,你们应该明白了吧。 写于2008年6月28日 吉隆坡 八卦图 今天是我学习算法的第三天,第一天我写了阴阳函数,第二天我向人求证未果,第三天早上我读数据结构,发现阴阳算法竟然就是数据结构中所说的矩阵中的平方阶一模一样,所不同的是,我概念中的阴阳算法更概括。 如今我知道了,我所提出的f(n)算法并不是我所独创,虽然我相信阴阳函数可以解决绝大多数的刁钻问题,不过有的时候并不一定是最好的解决方法。 我相信阴阳生四相,四相生八卦之道,在庞大的数据结构前,图表会比线性平方阶更易于管理,而图表可以以八卦的理念来进行管理。 所谓八卦,首先,订制看得见的图表是容易,订制看不见的图表却是困难的,当你制定一个图表结构的时候,功能运作的相应关系是明显的,可以预先判断用户所需要的功能,而里面所相互占据的内存对应则是不明朗的,你无法预先就完全准确的判断用户所需要的内存量。 如今的高级语言,可以以动态的方式替程序员管理内存,但是程序员必须还是如早期亲自管理内存分配的程序员一样,心中具备不明朗性的内存对应的概念,以及明朗性的程序功能对应的概念,这就是阴阳共存之道。 管理内存之道,不外乎占用与释放两者,而管理程序则是算法与实现,这4者可称为四相,阴阳生四相,四相生八卦,八卦生六十四卜。当你分明了程序的可见性和不可见性,即为阴阳;各自中又分出占用与释放,构思与实现,即为四相;其中又划分为手动与自动,用户定义与自动定义,用户可变动设计,与用户不可变动设计,可实现与不可实现之返回,此时八卦雏形就形成了;将阴阳分明成两个阵营,相互叠加调用,一个完整的软件架构图表就以实际面貌实现了,根据这个基础上,可生六十四卜乃至无穷。 比如说,一个完整的图形操作系统OS是一个完整的八卦图之实现,其中在上面使用的软件又是另一个架构八卦图的实现,并且这个主要的操作系统上,可以实现各种各样的软件安装,那么这个操作系统所能做到的事情,就数不完了。 先前说提到的阴阳算法仅仅是一个完整的算法,而八卦图则是一个完整的架构。 下面来说一个故事。 《数据结构和八卦图》 道士和计算机教授下棋,教授想考考这位世外高人对于软件的理解。 “听说你对大自然的规律有一套理解,你认为如今的科学发展是否和大自然的定律产生了矛盾呢?” 道士笑而答道:“从小可见大,自然之道便是如此,大道和科学并没有矛盾的地方。” 教授下了一子,又问道:“那么自然的道,要怎样才能融入软件之中呢?” 道士:“一个优秀的软件,本身便是大道的体现,所以不用去深究如何才能体现大道的精神。” 教授不满了,怎么能把人类的智慧劳动结晶归功到无法证明的道家理论上呢。 道士笑说:”道可道,非常道,大道的含义无法用语言解释,但是我们可以从一个棋盘的架构,从小见大,窥一斑而览全豹。“ ”棋盘的棋子是可见的,棋子含义是不可见的。棋盘是可见的,棋盘的格局算法是不可见的,棋子的摆阵是可见的,原理是不可见的,棋盘的开局步伐是可见的,智慧是不可见的;对弈的结果是可见的,而对弈的规则与思维逻辑却是不可见的。” 教授恍然大悟:”我明白了,软件的界面是可见而设计架构是只能感悟而不能见的;算法的实现是明显可见的,而里面所蕴含的智慧是隐性的;文件的大小是可见的而内存的调用释放是不可见的;执行的效率是可见的,而编程功力的千锤百炼是不可见的;友善功能是可设计的,而用户反应是不可预料的。“ “乾坤震艮,离坎兑巽。馄饨生阴阳,阴阳生四相,四相生八卦,八卦生万物。一个完整的八卦图便可以是一个软件的合理架构,或者是一个合理的棋盘,能完成数之不尽的对弈,诞生数之不尽的结果,正如我们过去有数之不尽的棋谱流传下来,就是这个道理。” 教授说道:”我明白了“ ”这就是八卦的含义“ 写于2008年6月29日,刚读了一点数据结构后 吉隆坡。 八卦图 今天是我学习算法的第三天,第一天我写了阴阳函数,第二天我向人求证未果,第三天早上我读数据结构,发现阴阳算法竟然就是数据结构中所说的矩阵中的平方阶一模一样,所不同的是,我概念中的阴阳算法更概括。 如今我知道了,我所提出的f(n)算法并不是我所独创,虽然我相信阴阳函数可以解决绝大多数的刁钻问题,不过有的时候并不一定是最好的解决方法。 我相信阴阳生四相,四相生八卦之道,在庞大的数据结构前,图表会比线性平方阶更易于管理,而图表可以以八卦的理念来进行管理。 所谓八卦,首先,订制看得见的图表是容易,订制看不见的图表却是困难的,当你制定一个图表结构的时候,功能运作的相应关系是明显的,可以预先判断用户所需要的功能,而里面所相互占据的内存对应则是不明朗的,你无法预先就完全准确的判断用户所需要的内存量。 《道德经和物理论》 求知者巧遇道士,得知道士通晓道德经大智慧,逐求教 道士说:”你为何要寻求大智慧?“ 求知者说:”我是一名物理学者,虽然精通算法,但是总觉知识不圆满。曾经听闻伏羲创造八卦,阐述天地中本质,我欲入其门而不得。” 道士微小:“大智慧非大智慧,从小见大,一览全豹,就算是路边的小石,也可以解答你的疑问。“ 说着,道士拿起了一个小石头,放下,石头便掉到地上去。 道士说:”你可曾见石头往上飞?“ 求知者曰:”没有。“ 道士点头说:”水滴下落是因为水滴有质,火焰朝上是因为火无形。雷在天上是因为其无形,山在地下是因为其有质。”道士说:”清者升,浊者降,宇宙为何是空,陨石为何是质,为何天上有风,为何我们脚下有石头,这就是道的含义。“ 求知者答道:“我明白一点了,你是以太极的阴阳道理来比喻物理的本质。无形的能量是一种本质,有形的物质是另一种本质。有形的原子被星球的引力牵引,在我们的地球表面形成大气,无形的能量则不受引力的制约,自由的飘荡在宇宙之中,所以宇宙是真空,所以没有摩擦力,而物质和空气有摩擦力,陨石进入大气层会燃烧,真是因为他的本质,而电波进入大气层则不受阻碍,也是因为他的本质,这就是阴阳的本质。” 道士笑说:“世间万物,不过有形与无形而已,这就是太极的含义。” 求知者又问道,”那么阴阳如何衍生四相,四相如何衍生万物?“ 道士说:”所谓四相,不过东南西北,方位也;所谓四相,不过高低远近,长短也;所谓四相,不过古往今来,时空也。所谓四相,正是天道循环,生生不息,乃是世界的本质,我们肉身存于可碰触的点线面,但我们可曾能碰触火焰?我们可曾能看见思维?“ 求知者恍然大悟的说:”这下我明白了,我们的世界是由各种三维组成的,而三维中存在着我们不能碰触的第四维空间,就像我们不能碰触收音机的电波一样。阴阳不过有形与无形而已,物理也不过有质无质而已。” 道士笑说:“正是如此,乾为天,离为火,巽为风,震为雷;坤为地,坎为水,艮为山,兑为泽;天火风雷为阳,地水山泽为阴,阳上阴下,不过如此而已,卫星会绕着地球转,正是因为卫星有质,无线电为何不绕着地球转,这是因为电波无质,石头为什么会下落?” 求知者笑说:“因为石头有质。” 道士说道:“这就是太极的智慧。” 我正在使用左手打字,原因却很简单,只是因为我最近在学习时,很不喜欢一边用两只手打字,一边要抄写笔记的感觉,为此我体验了一天内对钢笔丢丢拾拾多达几百次的感觉。 当时我就在想——如果单手打字能像双手一样便捷就好了,在寻找了几个软件之后,我还是决定不要偷懒,从今天开始使用一个左手打字,在整个键盘上跳来跳去的打字。 之所以不考虑其他的方案的原因是:真正的单手键盘找不到;最小巧的外置键盘只有笔记本键盘而且还是无法一只手覆盖全部按键,其他的比如单手键盘软件、驱动,都是要安装的,对linux系统的支持度实在是未知,而且考虑到如果以后在网吧之类的地方,没有相关的驱动这个技能就不能算全面的能在大多场合使用。 种种因素的考虑之下,似乎只有“不偷懒”,坚持学习并习惯单手在键盘上跳跃打字才是最合理的做法,于是只好开始放弃使用右手,我安慰自己说人家键盘手还要在2米长的键盘上弹奏呢,单手在小键盘上跳跃打字应该还不至于超出人类能力以外。目前为止这篇文章全部是用左手打的,说真的单个右手打字会比左手来得快,我跟就觉得键盘的设计是更适合右手的,而我只能使用左手来操作这种右手式键盘。因为我是右撇子,必须用右手握笔,所以只能用左手打字,对此我表示我是深深的受打击了。 《智慧和智商》 道士和道童参加门萨协会的聚会。里面全部是智商超越一般人的会员。 其中智商最高的人听说了道士的智慧,特意询问道士和道童的智商。 当他知道了道士和道童的智商只是刚好足够入会的底线后,显得有点讪然。 道士微笑不语,指了指旁边的书,又指了指自己的脑袋。再指了指水池边的水流,又指了指自己的脑袋。 聪明人顿时明白了,恭恭敬敬的鞠躬离去。 旁边的人不明白怎么回事,偷偷的询问道童。 道童说:“第一个比喻,书比喻的是知识,脑比喻的是智商,表示知识和智商是不挂钩的,智商再高,也不能不透过学习,就能得到知识。” “第二个比喻,水流和脑袋比喻着人的思维是一直在流动的,人也不应该将自己的认知固步自封,智商差距并不代表智慧的差距,勤劳的人一定比聪明而不勤劳的人更有智慧。” “天行健,君子以自强不息。这就是道的智慧” 写于2008年7月2日 吉隆坡 《低级语言和高级语言》 道童问道士:“听说汇编语言等等的最低层的机器语言才能完全的操作计算机,这是真的吗?” 道士说:“是真的。” 道童又问:“那么我们为什么需要c语言等等的高级语言呢?” 道士说:“你在纸上写字的时候,纸张是买来的,毛笔是买来的,墨迹是买来的,你可曾自己制作这些?重要的是写出来的文章,还是从新制造毛笔的过程?哪一个更有价值?” 道童恍然大悟。 过了几天,道童又来问:“既然重要的是内涵,为什么我们还要学汇编语言?” 道士说:“纸笔可曾中断过供应?是谁让纸笔不断供应并且不断的发明更好的产品来供我们使用?如果再也没有人制作纸笔,那么我们的文明会怎样?” 道童若有所悟。 道士说:“专业的艺术家虽然不去自己制作颜料,但是不会不懂得如何制作颜料。” 道童恍然大悟。 《计算机发展》 科学家,先知和道士一起散步,科学家看起来很烦恼。 “我用的计算机太慢了,进程间的通信、文件的读取、函数的调用,都完全无法真正的进行工作,只有超级电脑才能够真正的进行科学运算,不,应该说,超级电脑也只是刚好足够进行科学运算,但是我们没有能力买下一个顶级的超级电脑。” 先知安慰科学家说:“别灰心,科技的进步速度那么快,10年前的电脑和现在比起来,性能相差了数十倍,再过10年肯定会好的。” 科学家又说:“但是性能再提高500倍也不够我们使用,很多时候不是软件做不到,而是硬件跟不上,软件已经远远抛下硬件在发展了。” “当我们为了科学运算,不得不开发一个新的软件的时候,将近一半的时间不是专注在算法,而是专注在如何优化,让软件运行的更有效率,我们给软件进行了瘦身工作,从最低层的机器语言开始瘦身,但是进行大规模运算的时候,我们的集群工作站还是显得力不从心。” “这大大的消耗了我们的精力,虽然我们的团队里有顶级的黑客,但是他花了好几个月的时间给软件进行瘦身,而科学家在那几个月只能不断的干等,说到底,就是计算机的性能太低了。” 先知说:“我能从过去的经验判断,或许再过20年,也可能30年,电脑的发展就能达成你的心愿了。” 两人开始描绘未来美好的硬件前景。 只有道士沉默不语,两人都很奇怪,就问道士的意见。 道士说:“你们可有想过,正是因为硬件是固体,所以才会降低了通信的速度?” 两人一怔,不明白。 道士说:“你们认为是什么东西在阻碍运算变慢。很显然是硬盘,以及内存还有其他设备的通信,这些设备之间的通信都大大的降低了运算的速度。” “硬件的发展,提高的唯一办法,是寻找更低廉而更高性能的材料与算法,而硬件之间的连接,除了却无法达到无缝连接,而且稍微的松动便会给通信带来巨大的灾难。而硬件的凋汰速度极快,这些都让消费者难以适应,而公会标准难以成立,厂商为了符合标准,以便兼容更多的设备,不得不放弃一些更好的方案,这些都限制了硬件的发展。” “为什么生物的神经能在一瞬间产生反应?为什么生物的脑袋可以储存如此庞大信息量?为什么生物的眼睛能够捕抓如此高精度的色素?为什么各个部位器官之间的通信并不产生障碍,这是因为他们是软态物质,我认为当今的硬件瓶颈正是因为他们是固态的。所以通信之间产生了莫大的困难。解决这一方法的真正根本是朝软态和液态物质的方向去发展计算机配置。” “我们为何需要那么多硬件的接口?而这些接口的性能却无比低下,带来无数的通信烦恼,刚硬的本质不能真正解决问题,只有柔态的发展才是长久之道。” 先知和科学家一怔……久久不敢回话。 写于2008年7月9日 吉隆坡