数据结构与算法学习

数据结构与算法设计是CS相关专业的必修课,也是IT公司笔试面试的重点。网上这方面的资料多如牛毛,我列出了一些我认为非常值得推荐的资源,供有需求的读者研习之用。首先是一些网络资源,然后是一些书籍点评和推荐。如果你有更好的推荐,欢迎在下方留言,我甄别之后会补充的这个列表中,也欢迎自荐。不断更新中,但大浪淘沙,我只保留最值得推荐的。


1、法国鲁昂大学(University of Rouen )Thierry Lecroq 教授关于字符串(模式)匹配算法的介绍内容

http://igm.univ-mlv.fr/~lecroq/string/node1.html

如果说道字符串匹配算法,你会想到哪些?只有KMP吗?那你弱爆了:) 还不快来看Thierry Lecroq 教授的主页,在上述网站上,教授给出了超过30种模式匹配算法的详细介绍(有图有文有例子)和实现代码。实在是不可多得但又未被人知的宝藏。国内很多教科书、文章、博客都是以讹传讹,连KMP和MP算法的不同都搞不清楚,常常将二者混为一谈,殊不知它们是两个算法。这个问题讲起来话太长,总之各位还是要明辨真伪,自身水平挺高了,才不会收到误导。


2、美国佛罗里达国际大学Mark Allen Weiss教授的主页

http://users.cis.fiu.edu/~weiss/

Weiss教授是Knuth的徒孙(因为他博士导师是塞奇威克)。他在教书育人上成就其实比他在学术上的成就更大。其关于数据结构方面的教材在全世界大学范围内被广泛采用(后面我还要推荐他的著作),并曾荣获SIGCSE计算机科学教育杰出成就奖。他的数据结构书籍有多个版本,既有Java版,又有C++版,还有C版。而他的主页提供了所有这些书籍中的源代码下载。你能想过的数据结构,他基本都实现过,所以具有极高的参考价值。


3、Leetcode

https://leetcode.com/problemset/algorithms/

这个网站名气很大!CSDN上到处是其中题目的解答。相信读者可能已经了解过,这是美国一个IT笔试面试题目的online judge系统。里面搜罗了超过300道算法与数据结构相关的题目。刷Leetcode绝对是训练思维技巧、增进编码能力的好方法。我偶尔也从里面挑几道题目做做,觉得是一件很有趣的事情,我思故我在:) 但我其实有种相见恨晚的感觉。我知道它的时候,我的算法之美已经交稿编排了,(尽管后来发现我的书和Leetcode选的很多题目有很多类似的)但如果我早日知道它,应该会为我的新书增加更多精彩。Anyway,各位可千万别错过它。当然,Leetcode上题目的答案到处都是,但我还是建议你先自己做做看,抄别人的答案就没意思了,自己先做一遍再去看看别人有没有更好的方法,或许更有帮助。


4、“那谁的技术博客”的主页

http://www.cppblog.com/converse/category/974.html

其实我本来想推荐July的主页的,他在CSDN上名气已经很大了,何况更有超过千万的超人气访问量。直到我看到了知乎的帖子http://www.zhihu.com/question/24957182。我不想评论他的事情,公道自在人心。我推荐“那谁的技术博客”主要是因为上述帖子中讲到July的很多内容抄袭了这个博客,我才寻根溯源找到原帖。我转而推荐原帖,也是表示对原创的一种支持。博主用了很长时间对Btree、红黑树、AVL树、字典树、二分查找树等树形搜索结构进行了总结,给出了难能可贵的实现代码,又分享给大家,希望大家能在用别人无私奉献的内容时,保留一份尊重。尊重他人也尊重自己。


下面是一些书籍的点评(注意我用的词是点评,所以不是我列的所有书都是推荐。你要看清楚我具体说的内容)


1、两本神作

Knuth的《计算机程序设计艺术》,绝对业界巨擘,开山鼻祖,旷世奇书。国内中英文都已经有了,但是我非常推荐大家阅读。总之一句话,好书也不一定适合你。我在这评论它,因为我确实看过。别说没告诉你,书里的代码是用汇编语言写的,而且是Knuth大神自创的一种汇编语言,你要想想清楚,我想更多看本文的读者应该是处于学习阶段的,所以不要好高骛远。另外一本是《算法导论》,这个名气同样很大,对此我不做点评,因为我没看过,我不能对我没看过的东西做推荐。


2、Weiss教授的书

Weiss教授的书解决了我在早年学习数据结构时候的很多问题。我当时看的是清华出的C++版的影印版。中文版我作为比照参考最初也读过,后来也是因为翻译的不太理想就放弃了。现在不知道中文版的情况如何。Weiss教授的书还有Java版的。我主要看的是下面两本,强力推荐

  • Data Structures and Problem Solving Using C++
  • Data Structures and Algorithm Analysis in C++


3、计算机算法设计与分析,王晓东,电子工业出版社

我觉得这是中国人编写的非常好的教材,贪婪、分治、回溯、动态规划、概率算法等几大算法设计思想都有覆盖,并配合以许多典型问题的分析,还有关于P/NP问题的介绍。这本书可以作为研究算法的参考书来看。我自己看的是第2版,很老了,现在应该有更新版。


其实数据结构的书我看过很多很多,所以我这确实还有一个不推荐的名单,但是那些书的推荐理由就跟Knuth的神作完全不一样了。。。为了避免给大家带来困扰我就不列出这个不推荐的名单了,原因你懂的


另外,推荐两部课外的业余读物(跟数据结构无关,但跟算法有关)


5、图灵的秘密,查尔斯·佩措尔德,人民邮电出版社

这是对图灵生平和他论文的解读。作者查尔斯·佩措尔德是大名鼎鼎的技术作家,他的另外一本神作是《Code:the hidden language behind the computer software and hardware》(中译本《编码:隐匿在计算机软硬件背后的语言》,译者不才正是在下》。图灵为了给出算法的精确定义(进而解决判定性问题)而石破天惊地构造了图灵机这种神器,这其实是现代计算机算法研究的一个重要开端。如果你连算法是什么都没定义好,那何谈算法研究呢?而要理解图灵当初提出的机器到底是啥,看这本书就对了。当然《图灵的秘密》这本书读起来其实有一定难度,如果你学过计算理论课程的话最好,或者你可以先读下面这本书,这会帮你更好地理解图灵的秘密


6、计算理论导引,Michael Sipser

这是大学里计算理论课程的教材。但是我还是非常推荐你作为课外读物来读(如果你没学过相关课程的话)。如果说图灵的研究离我们很遥远,那么这本书其实拉近了图灵机和我们的距离。这本书会告诉你:我们讨论算法复杂度的大O表示法,本源就在于它是通过图灵机(方格的移动)来定义的。你在王晓东的书以及算法导论里会看到NP问题,而我更建议你看计算理论导引来了解P,NP,NP完全问题的本质。(插一句,我前面说我没看过算法导论,但是我看过目录,只是觉得从目录来看,内容我基本都是了解的,所以未读,但我也由此知道算法导论都讲了什么)


-----------------------------------------------------------------------------------

最后你可以认为是广告贴,但我也是诚心推荐(正所谓举贤不避亲),毕竟我自己写的书我还是看过的。但是将我的书夹杂在Weiss、Sipser等大神的书单里,略显不敬,所以我用一条华丽丽的横向将它们隔开。我关于算法和数据结构的一些所思所得汇集在我的新书《算法之美——隐匿在数据结构背后的原理》中,请不要抱怨题目太大,因为这是出版社起的,对此我并不掌握主导权,作者其实很弱势。你现在可能还无法买到,因为书才出,一些网店还没有到货。了解该书的内容请见前文算法之美隆重上市欢迎关注 (http://blog.csdn.net/baimafujinji/article/details/50484348)。如果你是该书的读者,请务必加算法学习群(495573865),内有更多资源等你,而你在读书中遇到的疑问也将得到我第一时间的解答。更多关注本博客,我将陆续发布该书全部源代码至本博客。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章