來源:https://www.cnblogs.com/lovesqcc/p/4038355.html

推薦一本算法入門書籍

推薦一本很好的算法入門書籍:

《算法設計與分析基礎》(第2版),(美) Anany Levitin 著, 潘彥譯。

除了 《 Thinking in Java 》,這是我另外一本讀過了三分之二內容還希望不斷翻閱的書籍。這本書寫得很不錯,可以感受到作者是盡力去貼近讀者,講解清晰易懂,涉及比較全面,而且有不少在其它算法書籍中從不曾講到的東西(比如算法問題求解基礎,大量引人思考的謎題)。

總體來說,可讀性很強,趣味性強,實用性尚可,在理論性和實用化之間進行了很好的平衡和折衷,有很好的啓發作用。如果你希望有一本容易理解的而又具備一定深度的算法入門書籍,那麼,本書可算是上佳的首選。

最權威的算法書籍自然是《算法導論》了。通用算法類書籍,我覺得有這兩本足矣!貌似還有一本叫做《程序員實用算法》的書籍,只是在書店隨便翻了翻,看書名可推知,這本書用作隨身算法手冊應該很不錯。

PS:關於算法的思考

算法究竟是什麼?顧名思義,計算之方法。算法就是使用計算的方法來實現問題求解的思路和途徑。

硬件提供計算所需的物理資源;而算法,則提供計算所需的思想和技術。硬件和算法,共同構成了計算機的計算能力。軟件,不過是硬件與算法的結合所產生的可使用的邏輯實體。

這就涉及三個基本問題:什麼是計算? 如何計算? 一切都可計算嗎?

什麼是計算?

1. 通俗意義上的計算,指的就是數學運算,加減乘除、取模以及其它,而大部分計算(包括減、乘、除、取模,無論多麼複雜)都可使用加法來實現;

2. 計算機現在已經能夠處理文本,那麼,處理文本的計算技術是怎樣的?

3. 在接近計算機硬件層面,任何運算都使用位運算來實現;如何用位運算來實現各種運算,毫無疑問,是數學家最擅長的事情。

4. 位運算是物理狀態的邏輯表徵和變化。物理狀態可由電子、機械或其它任何可能的物理實體來實現;毫無疑問,這是物理學家最擅長的事情。

5. 在人體和其它生物裏,計算的物理實體可能是神經元、生物電之類所運載的東西,究竟以什麼作爲計算單位,至今還是個謎。

如何計算?

首先,涉及科學計算的部分,自然是與數學和各特定領域(尤其是工程領域)有關,通常可以遵循相關的定理和公式來計算和改進;涉及文本數據處理的計算技術,則是計算機新興的應用領域;如何計算的問題,大概就是選取計算基本單位(比如加減乘除,數據複製)及其如何組合的問題了(控制流程,順序或併發)。

併發計算,或者並行計算,必定成爲未來的主流。人腦所採用的計算方式,極可能採用了並行方式。假設一平方米空間能放置100塊CPU,那麼, 100 平方米的空間可放 10000 塊CPU , 假設並行計算算法的利用率是 50% , 那麼, 也有 5000塊的CPU計算能力, 這意味着,現在一年的計算量,可能只需要 365 / 5000 × 24 = 1.752 小時 的工作量。想想,如果採用更好的並行技術,未來的IT世界會是什麼樣,難以想象。

一切都可計算嗎?

顯然,至少目前來說,答案是否定的。這是可計算性理論的問題。並且,若將算法機械地應用於日常生活,常常會顯得非常笨拙。人類(乃至其它生物)究竟採取了怎樣的計算單位和方式,使得人們在思考問題時顯得如此的靈巧多變,還是一個非常值得探索的問題。

程序開發者的位置?

跨過物理運算層面和位運算層面,在其基礎上實現1, 2 的問題求解。並且,關於科學計算部分,主要由研究相關領域的科學家來完成;對於程序開發者來說,所謂的算法,應當主要指文本處理所用到的算法技術。

相关文章