數據結構與算法學習

數據結構與算法設計是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),內有更多資源等你,而你在讀書中遇到的疑問也將得到我第一時間的解答。更多關注本博客,我將陸續發佈該書全部源代碼至本博客。


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