我對《算法導論 CLRS》的態度一直是有所保留的。雖然早在國內的時候,這本書一直被推崇為經典。但
我那時就覺得它對算法的描述不好。一段費解的偽碼,加上一大段費口舌的解釋。我覺得本可以做得更好。
后來知道,這是典型的美國本科生用書,美國的本科教材,大抵很羅嗦,都是厚重的大部頭書。教授們
生怕稍有簡略,學生們就不懂;而美國的小本們,也傻呵呵的認為書頭越重,自己越了不起。
這書中的大段解釋,也確是一番好意,就怕哪個不懂。可要真是老老實實的讀下去,分散注意要超過傳
達信息。
這本書我讀的最快樂的部分,就是每章的chapter notes。也就是在一章的末尾,介紹這一章提到的各
種內容是何時、被誰、怎樣引入計算機科學的。不看這部分,總覺得學的就是書上的死學問。而這些引用出
處卻為我們理清了算法研究的歷史脈絡,各個經典結果的師承關系。讀這些為我帶來了巨大的樂趣。也建議
讀此書的人千萬不要放過這一部分,這些引用的結果就是算法研究的里程碑。
對于算法的偽碼描述,倒不必太仔細了。不能指望在算法課上學習編程,算法本來就是很純粹的數學對
象,它的設計思想完全依托于背后的數學結構,它運作的機制以及它的美,也都來自它的數學,可是書上那
些模仿C和Pascal的語句,讓算法的數學之美淪為一段機械代碼。讀者辛苦的把自己的思維變成機器,讀懂
了這些代碼,但并不會直接帶來對算法本身的領悟。就像一個人懂得了打牌的游戲規則,但并不意味著他就
會打牌了,因為他可能依舊不通曉牌理。對算法的學習也要從問題本身的數學結構入手,理解解決此種結構
問題的算法它的設計思想,掌握分析具有各種結構特征的算法的數學工具,學習怎樣發現問題的結構并從中
推出問題的下界(lower bound)。這些才是學習算法的根本。
(ps評點:現在才深有感觸,以前總是糾結的看它那個偽代碼,后來才想到,只要理解了思想,自己能夠寫
出來就NB了,何必管它如何實現的呢,因為本來算法就是一個思想,如何變通,并自己運用才是最重要的
!所以,根本不能記憶這些代碼,而要自己理解思想,至于實現,有N多種可能,也許今天自己寫了這樣的
,到明天就是那樣的了)
《算法導論》的最大成就,也就在于它的選材。它篩選出來的結果,每一個都當之無愧的算是計算機科
學的根基或里程碑。在所有的算法教材中,這一點《算法導論》被公認是作的最好的。結構也組織的合理。
盡管它的講解,對這些經典結果的呈現,都不是我最滿意的方式。但明珠縱然暗投也終究是明珠,《算法導
論》覆蓋的內容,可作為算法最好的教學大綱,是算法課的原型。這是它不容抹煞的歷史地位。
=================================================================================================================================
我讀算法導論的目標:
書上的內容全部看懂(附錄除外,已經為這些基礎知識專門看了一大厚本的《離
散數學》,所以只看了幾道從前沒思考過的題,),習題(excersice)和每章末的
思考題(problem)全部嘗試獨立完成,即使不能做出,也一定要從網上找到答案。
實際完成的內容:
書上內容全部看完且看懂(當然看了很長時間,不免有些內容忘記了)。習題和
思考題基本全部完成,所有沒有完成的題目(自己不會做,并且也沒找到答案)一
共35個。算來平均每章一個。看著寫滿兩大本的題解,心里還是很有成就感的
(盡管我女朋友說:“你寫這些,有什么用啊?!”)
這一年零8八個月的時間我都干了什么?
一口氣讀《算法導論》到第30章,前26章的題基本做了,覺得實在有點累,調劑
一下,轉而攻讀MIT的另一本名著《計算機程序的構造和解釋——Structure and
Interpretation of Computer Programs》,幾個月后重披戰甲,從27章開始看
完了全部的《算法導論》,并將最后9章題目做完。由于看得細,而且還有其他
事情要做,前后拖了20個月,總算看完了,真的很累。
我的書評:
踏踏實實看完書,仔仔細細的思考每一道題,即使不會做,至少讀過,思考過,
可能未來的某一時刻你的腦海里突然就有了靈感。
為什么我的書評只有一句話(而且似乎也沒有評價)?
說真的,我作為一個小小的學生,真的沒有資格評判人家大牛用十幾年漢水和智
慧來增刪,校對,實踐,研究得來的一本著作。如果有什么不好的印象,那只能
說是沒到那個境界,理解不了,不能吃不著葡萄說葡萄酸,反而批評人家。
有心人從我上面的一大段廢話和短短的一句似是非是的書評,也絕對可以看出來
這本書的卓越之處:
(1)深入淺出:能耗費一個人20個月的時間去看,可見這本書絕非一朝一夕的快
餐,要知道即使是世界上最一流的大學,利用一年的課程去講算法課,也只能挑
本書的部分章節去講而不能完全覆蓋。既然題目能做出絕大多數,證明只要你用
心,這本書的難度完全是可以承受的,決不會讓你有無從下手的感覺。
(2)情節生動有趣:對,沒錯,我就是要像形容小說一樣形容這本書,不然我絕
不可能堅持看這么久。但是比小說有趣的是,故事里人物的命運是作者安排的,
你或喜或悲總是被人牽著走,而這本書卻是讓你作主角去打開一扇又一扇通往未
知的大門,解開一道又一道的難題。
(3)既連貫又獨立:不同章節既獨立完備又內在高度相關。即使你專注于某一個領
域,我認為這本書給你的介紹也是很充實的,而且可以直接看,這就是為什么我
中間放下一段時間后又可以從新拿起來讀而不用重新來過。當然個章節間內有一
個東西是一脈相承的,那就是:(程序運行的理論)效率。從頭到尾看得到的絕
對比單獨對待每一章得到的價值的總和大得多。
(4, 5, 6, ...)余音繞梁:老子說:三生萬物。我只說三條,萬就留待你自己去
挖掘,也留待你從書中找到精彩的答案。
祝讀此文者也能享受一趟與《算法導論》的精彩的馬拉松之旅。
=============================================================================================================================
posted on 2010-05-29 01:23
deercoder 閱讀(1636)
評論(2) 編輯 收藏 引用 所屬分類:
讀書