绝代有佳人,幽居在空谷。只可惜美人总是要老的,纵使绝代风华,纵使倾国倾城,怎奈春尽红颜老的那一天。所以喜看新人笑,恶闻旧人哭。这些和本文没有关系,近来多看了些六七十年代的老电影,看看昔日的电影明星,现在已经老去了。只是诗却流传到了现在,意境深远。当然算法也永远不老。但人不行,所以朴树要怀念那些花儿。有些中国的好东西翻译成外文就变了味道,就象狂蜂浪蝶翻译成 性欲强的女人一样 韵味全无。
本文仍是一篇大杂烩,题目不能概括所有的内容,甚至说的不是主要的内容,这一向是我的风格。我不想做个传统的说教者,或技术传播者,这世界上有的是沉重,我不需要这么严肃的主题;希望
这是我最后的一篇纯理论文章,当然其实里面没有什么理论。我想写出自己独特的见解,而不是抄袭,结果发现这很难。我缺少的就是这种总结抽象的能力,更不用说有什么创新了,总是感觉自己就象个书橱,装的都是别人的东西,这么多年来看书的结果就是忘却。总是在读书的时候忽然想起某人说的某句话很有才,而不是自己用一句话来总结。比如上一篇文章写框架,说了半天都没有说清楚什么用处。看看大师的话:“框架不是能让你做什么,而是不能做什么。”这么深刻的话我就是想不到。以后的文章我还是写一些有实用价值的东西。而不是空洞无物的理论。再华丽的理论带不来价值,所以这么多年我还是一无所有。什么都没有,我想要的都得不到,只是眼睁睁的看别人的繁华。有时候人是不能和别人比较的,没有比较就不会有感伤。有时候夜晚的时候躺在石凳上,思维就飘远了。这世界上有的是诱惑,但我却做不成佛。人的生老病死都是苦的,苦的根源在于人有欲望,只有消灭欲望,忍耐顺从,才能达到极乐世界。只可惜我仍是一个欲望非常大的人。下一篇先把博客园的页面装饰一下,复习CSS和JavaScript,但这也许是一个月以后的事情,或许是两个月。
算法的运用在如今或许越来越少了,也可以是越来越多。但太多的隐藏在后台,所以题目就是空山幽谷中的佳人,不错是佳人,不知道我这样的标题会不会吸引一些进来猎奇的人,这也就是我本来的目的。C语言的函数库中就已经有了各种很全面的排序函数,后来的STL达到了很高的层次,而现在就连物体只见的碰撞都已经被微软的工程师考虑周全了。我们可以不了解各种算法就可以构置企业级运用。只是这样地话我们总是要跟在别人的屁股后面,拼命的学啊学,尽管没有那么大的必要。就象C#已经到了3.0,而不少公司还是用者最初的版本一样。大部分时候技术的升级只是起到一个竞争的作用,而实用价值并不是那么高,培训人员的投入还有升级的投入往往得不偿失。就象ADO,ADO.net,ibatis,Linq和Nhebinate之间并没有说用谁会有质的飞跃一样。有时候人生就是那么几步,错过了以后就不会再有了。我常常想如果我高考的时候好好考就能考个质量好的高校,说不定就能遇到一个好的老师,成为一个伟大的数学家也未必。如果我大学的时候好好学习,就能考一个好的学校,然后顺利的进入博士这个中国越来越垃圾的团体。也许现在我就能找个体面的工作,找个体面的老婆。失去了,就再也得不到。只是错过了以前的努力,只能守着现在的无奈,并寄希望于未来会有个全新的开始。
有心人将生活中的实际问题总结抽象并加以研究,就成了数据结构和算法,就象欧拉变七桥问题为一笔画一样。对于我这样的俗人来说,不要求什么发明创造,能深刻理解前人的思维就行了。我对算法的理解并不比一般的人强,因为我不是天才级的人物,没有去参加奥赛的能力,真到打算去写算法的时候发现自己无话可说。一般来说,我考虑问题的时候最先想到的就是列举法,或者说是贪婪法这种没有技术含量的算法,很少能想起什么灵活的做法。除此之外,就还有一个分而治之和和动态规划法了其余我想不起还有什么算法了,而这两种算法好象也差不多,只是顺序相反而已。分而治之是老祖宗留下的东西,并没有什么稀奇的,就向项目分系统,系统分模块,模块分包,包又分类一样。下边这几种一般不算在传统的算法中。
搜索算法:但凡搜索一般涉及到树或图,也就要用到回溯法。A*算法是例外。
遗传算法:这是通用算法,本质是求一个线性表达式的极值,看起来这是一个线性规划问题。但多项式的每一项相互牵制,这种牵制不能给出确切的数学关系式。不能用解析的方式去做。这种情况下,生物中的规律发挥了他的用处。像这种在一门学科中用到其它学科的知识来帮助解决问题的问题是智者的创造。比如最速下降线的求法,伯努利提出的这个问题难倒了一大批数学爱好者,不过这个时代有牛顿,他是天才,所以他就能光的折射规律来解决这类问题,尽管看起来这两者看起来风马牛不相及。再比如微分方程解的稳定性,比较方便的方法不是用数学解决,而是用能量守恒。这很神奇,不过在聪明人的眼里,无论什么都可以信手拈来。用类比于生物遗传的模拟方法来求可能的结果,就象用扔大头针来求圆周率一样巧妙。这种情况下,结果都不是完美的精确,只是多次试验后的最好的可能值。
神经网络:这是另外一种仿生物学的做法。尽管我们有很多的插值算法,但神经网络可以近似任何函数,在整个区间上误差尽量小。
还有什么?状态机?范式?文法?编译原理这本书比我空谈强多了。
这些日子又回头看了看以前大学时看不太懂的几本书。计算机结构、编译原理、操作系统,忽然发现有些东西竟然莫名其妙的了解了。
以下是面试时几个常见的例子,具体的我记不真,大家可以上网查。
1. 海盗分金问题。推理方法就是从后向前推。
2. 农夫带着狼羊菜过河问题。每一个可能的状态都可以用一个点来表示,这些点构成一个连通图,这就转化为成求最短路径问题,教科书上有经典的做法。
3. 一家子过桥,各人用时间不一样,求最短时间。这可以用贪婪法来做,也可以转化成线性规划问题,不过都挺耗时间。用类似于农夫过河的方法也行。
4. 告诉A生日的月份,B日期。然后两个人说一会知道不知道,让你猜生日是哪天。我是用的最笨的方法,一个个排除的。类似的还有两数之和告诉A,之积告诉B,让你猜猜这两个数是几。这种情况下,简单的排除就不够了。适当的归纳一下这些数的特征有助于解题。好像用决策表也可以做,但我不很了解决策表如何建造。
5. 一群不同国家的人住在不同的房子里,并且有着不同的爱好,问你谁住在那个房子里。
6. 一群人说话有真有假,问事实怎样。我们用变量表示一个简单命题,然后只需要作一点逻辑运算就行了。
7. 还有一道题,一栋100层的楼,现在要测试一下鸡蛋从几楼摔下会碎,先从几楼开始?答案好像是13楼。反正就是加加算算过100最小的那个数就对了。
你想深刻理解算法,同志,请你先学学数学罢,不需要高等的数学。有本书叫做算法的艺术(是罢?忘了)后面的习题好像全是数学题。
写了这些文字,东西好象有点少,谈点其它话题凑凑罢。最近物价上涨的利害,可能诸位的体会不是很明显,但对我这种吃个馒头都要算计半天的人体会尤深,以前虽也涨,但从没有这次体会明显,而与此同时工资却没有同步的上涨,总感觉中国潜伏着危机,千百年前,就都知道中国人不患贫而患不均,所以犯罪率上升了。
教师是我从事时间最长的职业,教师的工资是相对较低的,我在上海的时候,发现那些人特别羡慕教师这个行业,是因为他们用本地的标准来评价的。全国80%的人在农村,而像上海这样的大城市全国也找不出几个。用上海教师的标准来衡量教师,就象用孔老夫子来要求我一样,是很难做到的事情。在农村,能希望国家要求的工资及时发放并且发全就不错了,更不要说还有其它的补助了。在中小城市里,补助也少得可怜。有人说,教师时间充裕,请大家看看当年我的工作情况,单位还是省级规范化学校。我周一到周六上午上14节正课,隔一周补一周的课,这还是好的,只要有高考,补课就是必然的事情,不是每个学生考不上大学就可以去出国的。每次补课4节,平均每周2节,也就是一周共16节课,平均每天2.3节,以每节40分钟计,共1.2小时。每中午一节数学自习,30分钟,一周还有2节早自习,4节晚自习,每节1个小时,平均每天1小时。两个班,每个班平均80+人,每节课一次作业,也就是说每天改160+份作业,写两份批改记录,这些至少要用2.5个小时,每天一个教案,这需要30分钟,每周至少考一次试,160份试卷假设用5个小时,这样每天加上0.7小时,然后要求一周听7次课,写7次听课记录,这样每天又多了0.7个小时。还有每年的n次会议和10000字理论学习材料,给每天加0.3小时不为多罢。总计:7.2小时/天。这是份内的工作,没有课的晚上和平时,也要呆在办公室里,这叫做坐班。这是不停止的纯工作时间。不包括喝水上厕所等必须时间,从早5:30-晚11:30。也有人会羡慕教师的两个假期,大家先看看暑假,暑假里的补课和招生以及成绩批改统计除去之后,只剩下一周多的时间,这就是教师的假期。寒假初六开学这各地大都如此。也不过是10天的时间。记住我们的周末是打折的,而且上面计算的时候已经将时间延续到了星期天。如果不计星期六和星期天的话,每天的工作时间是10.1小时,算起来不比其它行业好。
一年到头的不停,结果只是1000不到的工资,现在好一点,1400多一点,我工作的时候是842.2元钱,奥,福利,每年500元,没有其它的收入。不是我不想付出,只是不甘心这一生就这样而已。不甘心做一个人人看不起的穷人,不愿做为了几十元钱谄媚的忍者,不愿做一个在饭店里连一碗面条都吃不起的看客,不愿成为女人眼光的中的空白而已。所以我试着改变,试着去残忍,试着去放弃,给自己一个未知的可能性,给自己一份希望,仅此而已。