2010-10-13 87 views
11

我被要求推薦一種資源(在線,書或教程)來學習算法(在麻省理工學院介紹算法的意義上) CS或數學專業。顯然,MIT的書太涉及了,一些較輕的處理方法(如OReilly的算法簡介)似乎仍然需要在算法分析方面有一些背景知識。是否有資源以某種方式呈現材料,使得那些沒有理論計算機科學背景的開發人員會覺得有用?學習資源非CS /數學學位算法

回答

6

我認爲學習算法的最好方法是通過各種競爭網站。

  • USACO - 我個人最喜歡的,因爲它提供了通過材料
  • TopCoder一個清晰的路徑 - 已經提到
  • Sphere Online Judge - 偉大的,如果你想在比C/C++/Java的
  • 之外的其他語言工作

就書籍而言,我見過的非數學專家的最佳單本介紹是Data Structures and Algorithms。它將逐行介紹一種算法,並向您展示它如何以數學方式進行分解,而CLRS的其他優秀分析部分則不太清晰。

Skiena的Algorithm Design Manual也很好,他的Programming Challenges也是優秀的,它本質上是通過Valladolid Online Judge的教程。老實說,我認爲初學者能做的一件最有用的事情就是實現各種算法 - 合併排序,比如說緊接着Quicksort,然後針對不同大小的輸入進行排序。創建一個電子表格,其中顯示隨時間增長的圖表。非專業人士很少有耐心或專業知識來建立一種復發關係,並通過它解決問題。但是你必須明白隨着時間的推移增長的效果,並且沒有更好的方法來學習這一點,而不是通過它的內存堆棧觀看你自己的程序衝擊。 :)

我說這是一個非CS,非數學程序員,他花了好幾個月的時間來圍繞算法分析。

+0

這裏沒有競爭,只有同事 – none 2010-10-13 14:07:50

+2

@none--我稱他們爲「比賽站點」,因爲他們專門設置了允許人們進行各種算法比賽的訓練。他們是優秀的學習工具。 – rtperson 2010-10-13 14:16:45

0

我不確定你指的是哪本麻省理工學院的書,但是規範文本是CLRS.我不認爲它除了高中數學之外還真的假設任何背景。

就我個人而言,我發現在過去的幾年裏做TopCoder算法競賽是我學習常用算法並將其付諸實踐的最佳方式。也許你應該嘗試一樣。無論你做什麼,我都建議你花更多的時間來實踐你學習的東西,而不是頭腦時間,因爲這是真正內化不同技術的方法。

+1

是的我正在談論CLRS。你是對的,因爲它是一個介紹性文字,然而,它的書面大小和學術方式會威脅到許多人...... – ennuikiller 2010-10-13 14:05:36

+3

@ennuikiller - 當你第一次嘗試Knuth的時候,CLRS就不那麼令人生畏了。我知道,通過痛苦的經歷... – rtperson 2010-10-13 14:27:29

1

我會去參加由史蒂文斯基納所着的Algorithm Design Manual。它非常易讀,並以易於理解的方式從基礎開始。例如,它很好地解釋了big-O符號。重點在於實際應用,這對於來自非理論領域的初學者來說是一大好處。

本書的後半部分是常見算法問題和實際解決方案的參考。作爲學習輔助工具,我發現它非常寶貴,現在作爲參考。

+0

感謝您的建議! – ennuikiller 2010-10-13 14:03:15