Posted on 2009-08-02 23:54
小強摩羯座 閱讀(172)
評論(0) 編輯 收藏
學習一項知識,必須問自己三個重要問題:1. 它的本質是什么。2. 它的第一原則是什么。3. 它的知識結構是怎樣的。
pongba的
知其所以然地學習(以算法學習為例)
中他提出了現有算法類書的講授者是自頂向下思維,理論和知道點都擺出來,再做個細的推理與低階的知道做個銜接。但是都沒有講算法的思想是怎么發展而來的,數據思維的過程是怎樣的。“如果問題求解是一部偵探小說,
那么算法只是結局而已,而思考過程才是情節。”
那到底什么樣的才算是授人以漁的呢?波利亞的《如何解題》絕對算是一本,他的《數學的發現》也值得一看。具體到算法書,那就不是光看text book就足夠的了,為了深入理解一個算法的來龍去脈前因后果,從一個算法中領悟盡量深刻的東西,則需要做到三件事情:
尋找該算法的原始出處:TAOCP作為一個資料庫是絕對優秀的,基礎的算法只要你能想到的,幾乎都可以在上面找到原始出處。查到原始出處之后(譬如一篇paper),就可以去網上搜來看了。因為最初的作者往往對一個方案的誕生過程最為了解。比如經典數據結構中的紅黑樹是出了名的令人費解的結構之一,但它的作者Sedgewick一張PPT,給你講得通通透透,比算法導論上的講法強上數倍。
原始的出處其實也未必就都推心置腹地和你講得那么到位:前面說過,算法設計出來了之后人們幾乎是不會去回顧整個的思維過程細節的,只把直指目標的那些東西寫出來。結果就又是一篇歐幾里德式的文章了。于是你就迷失在一大堆“定義”、“引理”、“定理”之中了。這種文章看上去整個寫得井井有條,其實是把發明的過程整個給顛倒過來了,我一直就想,如果作者們能夠將整個的思路過程寫出來,哪怕文字多上十倍,我也絕對會比看那一堆定義定理要容易理解得多。話說回來,怎么辦?可以再去網上找找,牛人講得未必比經典教材上的差。那倘若實在找不出好的介紹呢,就只能自己揣摩了。揣摩的重要性,是怎么說都不為過的。揣摩的一些指導性的問題有:為什么要這樣(為什么這是好的)?為什么不是那樣(有其它做法嗎?有更好的做法嗎?)?這樣做是最好的嗎?(為什么?能證明嗎?)這個做法跟其它的什么做法有本質聯系嗎?這個跟這個的區別是什么?問題的本質是什么?這個做法的本質又是什么?到底本質上是什么東西導致了這個做法如此..?與這個問題類似的還有其它問題嗎?(同樣或類似的做法也適用嗎?)等等。
不僅學習別人的思路,整理自己的思路也是極其重要的:詳見《跟波利亞學解題》的“4. 一個好習慣”和“7. 總結的意義”。
本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/pongba/archive/2008/07/07/2622713.aspx