基础算法的确是个很麻烦的东西
今天从中午一直到晚上,一直就在解一道算法,其实也应该属于比较基础的内容,关于二叉查找树的一个变种实现问题。好多年没有碰过这些算法之后,今天突然要捡起来实现,发现还是相当难受的。首先,对树的概念就已经记得不是那么清楚了,并且如何进行递归也不是那么熟悉。不过好在自己的JAVA熟练程度抵消了这些复杂的东西,还算是比较顺利地完成下来,但是对于用Haskell和Prolog进行处理自己就没有那么大的把握了。
读书的时候一直都骂,说这些东西没有什么实际用途,但是现在越来越觉得这些算法对人的智力的锻炼价值有多大,真正的做网页,做网站,大部分都是重复工种,或者是一种对审美的体会。不需要你思考什么,需要的是你怎么把已经现成有的工具组合组装起来,用的最熟练,用的最快,用的最准确就好了。但是算法不一样,特别是复杂的算法需要你考虑的非常的周全,一个很小的疏忽就会让整个程序运行失败。并且最好需要很好的思维模拟能力,比如对一颗树,给你一张纸衣只笔,你就要能够把相关的情况能够很顺利地画在纸上,当然更好的是通过脑袋直接想。特别是对于节点的删除,合并等需要大规模的移动树枝的时候,脑袋其实比纸笔有时候更管用。
但是算法的熟悉在好,也比不上能够用程序写出来。如果没有一门特别熟悉的语言,你会花很多时间去思考怎么把你想的算法转化为程序,在无形之间就失去了思考的连续性,结果往往会很影响效率。而且我个人而言,对于这种东西,一般来说你不要停下来,要做就得一直做下去,思维的中断很难能够接起来,就比如我晚上看的下午的代码就觉得一头雾水。这也从另一个角度说明了注释的重要性。
另外一点就是最好能够熟悉使用某种IDE的调试功能,对于复杂的算法,最好是能够清清楚楚看到每一步运行的结果,这样对在哪出错就能一清二楚。如果你连调试都慢吞吞,而凭自己的眼睛去看,结果是显而易见的。
我在下一阶段完成疯狂的作业后,准备好好看看THINKING IN JAVA和算法,都是不知道第几遍看了,但是觉得在做了这么多程序以后,收获和第一次看是完全不一样的。现在最需要的就是时间。
PS:发现有时候卡在一个地方的时候,适当的站起来休息休息,甚至打两场实况,唱两首歌,一下可以吧思路掉起来。真的。



