数据结构与算法学习心得

来源:互联网 发布:ocr图像识别算法 编辑:程序博客网 时间:2024/05/22 00:22

数据结构与算法的内容还有很多。但是由于时间的关系,我并没有深入下去,尤其是查找时用到的平衡二叉树、B_和B+树,还有红黑树等等。希望以后有时间可以继续看。

首先,简要回顾一下学习的内容。简单的说,是“3+2”:3中数据结构:线性结构、树、图;2种算法:查找、排序。其中线性结构又可以分为顺序表、链表、队列、栈,它们在平时有着更加广泛的应用。而树、图则在解决一些特定的算法时更加管用。

其次,数据结构并不是死的:你可以根据自己的需要定制数据结构的成员。而这些成员又决定了对应于这种结构的算法。因此,数据结构跟算法之间并不是孤立的,而是紧密联系的一体:对于有的算法,比如返回树中一个节点的父节点,如果你在树结构中添加一个parent指针,就很好办,如果没有这个指针,做起来就会很纠结。

再次,对于这方面的资源:其实我是看的视频学的。我涉猎过的视频大概有4部:第一部就是严蔚敏的。讲课跟念经一样,基本不能听,果断删掉了。第二步是电子科大的罗吴蔓讲的,是pascal语言的,我不会,所以只听了前几集。个人感觉讲课太偏重概念,而实用性一般。第三部是郝斌的数据结构,是那种写程序的,非常基础、扎实,如果C语言不好的人,可以看那个。但是对我而言,讲的有点太浅了,没有讲图而查找算法,排序算法也只讲了快速排序,而且经常夸大数据结构的难度。最后一部才是我重点推荐的:中国科技大学朱明的数据结构:我感觉这个很对我的口味:首先他也是偏重程序的。其次,它是在黑板上写程序的,每次都写一个大概或者思路,然后你就可以顺着他的想法自己写出程序。而且整个内容非常饱满,涉及了数据结构的大部分常见内容。唯一一点不太满意的就是视频的拍摄手段不好,导致有些时候不是对着老师讲的部分,有些时候清晰度不够,但是还是可以听清楚的,整体瑕不掩瑜。这部视频的配套书籍应该是他自己编的,但是网上下载不到,学校图书馆也没有,囧。没办法,我就看了严蔚敏的《数据结构—C语言版》,参考着看了高一凡的《数据结构算法实现及解析》。我不得不说,这两本书真的很垃圾!具体表现在以下几个方面:

1.定义很多的宏。这是教材,最好在这些非重点环节简明一些。首先,对于将int类型定义成ElemType,这毫无意义的降低了的程序可阅读性;其次为比价大小定义了宏,这不是以后好的做法,实在不行,你就用一个冒号表达式呗,使用宏比较大小的潜在风险在effective c++中有详细的讨论。而且,我实在想不明白为什么他非要使用引用来传递参数,本来使用指针就能完成的事情让他搞的好像很费劲一样。

2.其次,对算法的描述以及相应的程序质量非常低!对算法的描述,并没与采用第一部干什么,第二步干什么的形式,而是说了一大坨语言性的描述。这样一般的程序初学者很难通过它的描述写出对应的算法。而且它给出的算法程序,也不是那种函数调用函数,每个函数都很短的那种,而是一大坨,丝毫没有层次可言!可以对比看一下我的霍夫曼编码程序和它写的。就能明白了。

3.个人觉得,对于查找和排序算法,最好应该有一个小节。对于每种算法,它的适用于什么情况。平均复杂度是多少,最好情况是什么样的,最差情况又是什么样的,以及这些算法有哪些常见的应用。当然了,这两本书上都没有这个总结。

总之,如果是教材,最好还是突出主要问题,忽略次要问题,将问题有条有理的展现出来。


最后,推荐一本比较好的书《算法导论》(目前英文版只有第三版,中文版只有第二版)。这本书我也是偶然间翻到的,首先那内容很全:数据结构只不过是里面的一个部分。其次它对算法的描述,是采用伪代码形式给出的,但是这个伪代码质量非常高,特别好翻译成对应的编程语言。而且都不长。等中文出第三版了,我一定买回来仔细研读一下。