推薦一本很好的算法入門書籍:程序員
《算法設計與分析基礎》(第2版),(美) Anany Levitin 著, 潘彥譯。算法
除了 《 Thinking in Java 》,這是我另一本讀過了三分之二內容還但願不斷翻閱的書籍。這本書寫得很不錯,能夠感覺到做者是盡力去貼近讀者,講解清晰易懂,涉及比較全面,並且有很多在其它算法書籍中從未曾講到的東西(好比算法問題求解基礎,大量引人思考的謎題)。併發
整體來講,可讀性很強,趣味性強,實用性尚可,在理論性和實用化之間進行了很好的平衡和折衷,有很好的啓發做用。若是你但願有一本容易理解的而又具有必定深度的算法入門書籍,那麼,本書可算是上佳的首選。spa
最權威的算法書籍天然是《算法導論》了。通用算法類書籍,我以爲有這兩本足矣!貌似還有一本叫作《程序員實用算法》的書籍,只是在書店隨便翻了翻,看書名可推知,這本書用做隨身算法手冊應該很不錯。設計
PS:關於算法的思考資源
算法到底是什麼?顧名思義,計算之方法。算法就是使用計算的方法來實現問題求解的思路和途徑。開發
硬件提供計算所需的物理資源;而算法,則提供計算所需的思想和技術。硬件和算法,共同構成了計算機的計算能力。軟件,不過是硬件與算法的結合所產生的可以使用的邏輯實體。數學
這就涉及三個基本問題:什麼是計算? 如何計算? 一切均可計算嗎?it
什麼是計算?入門
1. 通俗意義上的計算,指的就是數學運算,加減乘除、取模以及其它,而大部分計算(包括減、乘、除、取模,不管多麼複雜)均可使用加法來實現;
2. 計算機如今已經可以處理文本,那麼,處理文本的計算技術是怎樣的?
3. 在接近計算機硬件層面,任何運算都使用位運算來實現;如何用位運算來實現各類運算,毫無疑問,是數學家最擅長的事情。
4. 位運算是物理狀態的邏輯表徵和變化。物理狀態可由電子、機械或其它任何可能的物理實體來實現;毫無疑問,這是物理學家最擅長的事情。
5. 在人體和其它生物裏,計算的物理實體多是神經元、生物電之類所運載的東西,究竟以什麼做爲計算單位,至今仍是個謎。
如何計算?
首先,涉及科學計算的部分,天然是與數學和各特定領域(尤爲是工程領域)有關,一般能夠遵循相關的定理和公式來計算和改進;涉及文本數據處理的計算技術,則是計算機新興的應用領域;如何計算的問題,大概就是選取計算基本單位(好比加減乘除,數據複製)及其如何組合的問題了(控制流程,順序或併發)。
併發計算,或者並行計算,一定成爲將來的主流。人腦所採用的計算方式,很可能採用了並行方式。假設一平方米空間能放置100塊CPU,那麼, 100 平方米的空間可放 10000 塊CPU , 假設並行計算算法的利用率是 50% , 那麼, 也有 5000塊的CPU計算能力, 這意味着,如今一年的計算量,可能只須要 365 / 5000 × 24 = 1.752 小時 的工做量。想一想,若是採用更好的並行技術,將來的IT世界會是什麼樣,不可思議。
一切均可計算嗎?
顯然,至少目前來講,答案是否認的。這是可計算性理論的問題。而且,若將算法機械地應用於平常生活,經常會顯得很是笨拙。人類(乃至其它生物)究竟採起了怎樣的計算單位和方式,使得人們在思考問題時顯得如此的靈巧多變,仍是一個很是值得探索的問題。
程序開發者的位置?
跨過物理運算層面和位運算層面,在其基礎上實現1, 2 的問題求解。而且,關於科學計算部分,主要由研究相關領域的科學家來完成;對於程序開發者來講,所謂的算法,應當主要指文本處理所用到的算法技術。