NO IMAGE

     

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

        《演算法設計與分析基礎》(第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
的問題求解。並且,關於科學計算部分,主要由研究相關領域的科學家來完成;對於程式開發者來說,所謂的演算法,應當主要指文字處理所用到的演算法技術。