昨天买了本《大话数据结构》,之后就开始看。数据结构给我的印象就是一大堆code,自己实现很麻烦,而且很容易出detail errors,望着书上的代码,我在想,难道我真要把他们都能独自写下来?其实想想怎么也是不必的,说最低级的要求,工作中copy一下代码然后会调用functions就OK了,更何况有C++的STL,另外在ACM这种竞赛中,STL也是允许的,更何况可以带material。而且即使自己都能独自写下来,那么不常写也多少会忘点细节方面的问题(比如错误处理漏条件),因为自己当时写代码不一定能想得那么严谨。可见,那些代码are not important,重要的还是思维。那些代码只是develop your thinking的tools而已,并不是说要求你一定能全都write下来,当然,如果你understand it completely,那么只要你的coding能力过关,那写出代码不在话下,只不过容易出现细节问题罢了,代码上的细枝末节不是应该我们关注的东西。也就是说,那些实现性的代码是帮助你学习的,但并非你的归宿,你可以理解这个数据结构后使用代码去describe你的想法,来验证一下你是否真明白了,但不应该把是否能写出代码作为标准,相比之下,应该更强调对自身思维的培养和如何利用这个数据结构去做一些实际的事情。 刘汝佳在《算法竞赛入门经典》当中提到:一方面,很多常见数据结构已经包含于C++的STL或者Java的JCF中,不必自行编写;另一方面,需要自己编写的复杂数据结构在传统教材是找不到的。换句话说,对于准备算法竞赛来说,传统教材的最大价值在于概念和思想,而非代码。在《算法竞赛入门经典》中,作者多次心中有剑,手中无剑,使用数组来模拟一些数据结构,比如用数组模拟二叉树、模拟链表,这样写出的代码十分简洁,我看了之后才知道原来使用一个数据结构并不一定要把它的标准实现写出来,我认为掌握数据结构的思想并能对实现进行灵活的变幻才是学习数据结构应该达到的目标和境界。 所以学习数据结构,我认为应该以读书理解和做题为主,写实现为辅。