学习算法一年的总结
转眼间,我学习算法已经一年了,就写一篇东西来记念一下吧。
一年前的今天,我在某个网友的怂恿之下,就买回了《算法导论》来看,当时的我,全然不知算法是什么东西,也不知道链表是啥表,甚至还不能熟练地使用C++。在这种前提下,就去阅读《算法导论》,结果可想而知(不知当时的我到底是勇气可嘉呢?还是白痴到家呢?呵呵)。不过,这个经历却引起了我对算法的兴趣。
与此同时,我还知道一种叫做ACM的比赛和叫OJ的系统,于是我就去了HDU这个OJ上做题(为什么选择这个OJ呢?主要是因为听说这个OJ上的水题特别多啦),虽然我基本上不会任何算法,但还是能做一些水题的,毕竟有些水题是不需要任何算法也能够做出来的。
这样过了几天,觉得不能这样下去了,《算法导论》我基本上看不懂,一直做水题也没什么意思,上网查了一下,想学算法,还是要先学数据结构的。于是就去图书馆借了一本《数据结构。。。》(书的全名都忘记了,汗),这本书真的不错,不但详细地说明了各种常用的数据结构和排序算法的理论性知识,而且还用C++的模板类和派生类实现了这些数据结构。看完这本书之后,我就算进了数据结构的门了(虽然还是很水很水)。这时,我也能够看懂一点《算法导论》了。
接下来,我就开始一边看《算法导论》,一边做ACM了。虽然做这件事的难度比较大,但好在网上的相关资料比较丰富,想找的话一般都能找到;另外,CSDN上的网友也比较热心,我的疑问在这里一般都能得到满意的解决(在此谢谢各位了,呵呵)。在做ACM的过程中,我曾经被高手鄙视过,也被新手称赞过。说实话,我最喜欢听赞美,但使我进步最大的,还是那些鄙视我的高手。
看《算法导论》和做ACM花费了我大量的时间与精力(这些时间原本是用来看电影和玩游戏的,一位同学曾经问我做ACM到底有什么好处?老实说,我也不知道)。但无论在学什么,应该都比花大量时间在游戏和电影上好吧?我的学校比较水,没有自己的ACM队,好像整个学校也没有多少人在做ACM,我也没参加过ACM的比赛(有道那个比赛除外)。大一的时候就听师兄说,很多人在学完数据结构这门课程之后,还写不出一个普通的链表,当时我还觉得这是个笑话。但现在,我能保证我们班有一半左右的同学是这样。有时我在想,我如果没有接触ACM,我会不会也是这样呢?另外,我是将ACM当做《算法导论》的辅助练习而已,从没想过成为一名ACMer.
看《算法导论》(没完全看懂),提高了我的理论水平;做ACM,提高了我的动手能手。就是这两个好处就对得起我所付出的那些时间与精力了吧。而且,为了做这两件事,我还自学了线性代数,离散数学(我们专业没开这两门课,真是无语),看了《STL标准程序库》。更重要的,它阻止了我那堕落的大学生活,使我那宝贵的大学时光不至于完全浪费掉。还使我可以在一定程度上说:是我上了大学,而不是大学上了我。
网上有很多人在讨论:算法是不是像传说中的那样重要。对于这个问题,我真的不知道。一方面,算法对于学计算机的学生的长远发展而言,的确是有重大意义的;另一方面,国内大部分程序员的工作没有涉及算法,或者只是简单地调用别人写好的算法(库)。但我始终认为,学好基本的,常用的算法还是非常有必要的。就像一个人不能因为不想当数学家,就不需要明白加减乘除是啥意思一样。
20010年6月18日写于宿舍