1. 程式人生 > >演算法導論 為什麼經典

演算法導論 為什麼經典

               

長期以來,我對於是否要在部落格上寫非技術類的東西取決不下。同是從0開頭學習技術,一定會遇到許多相似的問題,我把它們記下來,還會給人以幫助。但是非技術類的東西,寫了也是給自己看的,在沒有從“對小我的思考”轉變為“對大我的思考”之前(看了劉未鵬的部落格後的感觸),我不需要別人的理解和同情。再者,即使面對面交流,也不能保證使一個人完全理解另一個人,更何況活的思考變成死的文字。然而今天,我只是想把憋在心裡的話寫出來。人的層次並不相同,譬如許多計算機專業的學生在進入大學之前已能熟練程式設計,而我其時還連光碟機和光碟都弄不清楚。我只是也想在這裡說說自己一直放在心裡沒有說的話,來我部落格的朋友請略過這一篇。

事情源於一次對比。最近學習網路流演算法,啃了國內一本知名的演算法教材好幾天,通過不斷重複倒是熟記了很多基本概念,但是記住的概念越多,心裡的問號越多。對於演算法學習來說,死記硬背演算法是很低效的。我於是翻開《演算法導論》,交叉學習。看了《演算法導論》幾頁,發現兩本書講解方式上有非常大的不同,簡單對比如下:《演算法導論》中,第26章講網路流演算法,總共用了35頁(翻譯過來的中文版),使用了10組演示圖片,總共使用了64行虛擬碼;國內的那本知名教材,講解同樣內容的網路流演算法,用了40頁,4張圖片,沒有一張圖片是用來演示演算法執行流程的,最讓我吃驚的是,在40頁的演算法講解中,C++程式碼超過了20頁!

64行虛擬碼和超過20頁的C++程式碼,這巨大的反差,使我對國內那本教材非常失望和惋惜。這讓我想到霍金引用過的一句話,大意是書中每一條物理公式會使讀者的數量減少一半,同樣,對於講解演算法的書,程式碼的行數是與書的可讀性成反比的。程式碼是非常有個人特色的,看到與自己風格不同的程式碼,不自覺就會產生一種排斥的心理。更不用說我們國內教材中的程式碼:風格混亂,字型難看,紙張低劣,印刷錯誤。最讓我痛苦的是,完整的程式碼被切割得很碎,配合著講解演算法的需要,這裡撒一小塊,那裡撒一小塊,我經常為了一個莫名其妙的變數和函式呼叫到處在前面的書頁中找它的意義,或者根據上下文去猜它的意義。程式碼中不可避免地要用到如棧、佇列、連結串列等這些基本資料結構,為了能集中精力講演算法,這些資料結構的實現程式碼是不應該貼上來的,所以只好杜撰一些名稱,用慣了STL,我對這些不遵守STL中的約定的程式碼非常反感。一邊看書我一邊提醒自己,知道這些程式碼表示什麼意思就行了,沒必要對這些程式碼這麼認真。我想,作者的初衷是為了實用,我仔細讀了些程式碼,感覺作者對演算法的實現是非常精簡的,程式碼的細節也處理的很好,但是很可惜,程式碼中有太多的細節了,一門生僻的虛擬碼又會加重讀者的負擔,兩難的選擇。

如果說這本教材讓我感到惋惜,那麼其它的教材,書店裡鋪天蓋地的基礎教程、入門教程,就讓人憤怒了。儘管電子工業出版社和機械工業出版社不斷推出讓人一看就想買下來的書,這卻對教材沒有產生任何的影響。回想我大學時候的教材,C、C++、資料結構、演算法,其中充斥著大量風格糟糕的程式碼:沒有縮排,沒有註釋、變數名一律abcd或者漢語拼音。我當時痛苦地寫著這樣的程式碼,在我上C++課時看到老師在黑板上寫下int anIntVar;這樣的語句時,我為這個變數名興奮了好久。隨著寫的程式碼多了起來,與非教材類的經典技術書籍的接觸多了起來,我對大學的教材和課堂的失望和反感也與日俱增。大學裡那些理論性強的專業課的教材,很多地方明明幾句話就可以點透的東西,卻囉哩囉嗦晦澀難懂的講上一大堆,在需要仔細講解的時候,卻往往又一句話帶過,似乎唯恐不能炫耀其高超的水平。那些艱澀的文字,讀完很多遍才發現也不過就是那麼回事,真讓人覺得,採用這種方式講解的目的,就是因為對真正的難題束手無策,才專門在這些小問題上大做文章。既沒有數學的簡潔直接,又不通俗,一句話:入的貌似很深,出的絕對不淺。

這些爛教材和爛書導致了一個更嚴重的後果:真正好的教材被忽視了。而今,一提起“教材”這個詞語,我們的印象就是一堆內容陳腐、講解死板、形式僵化、專門用來應付考試的垃圾紙。這使得那些教材中十分珍貴的精華被一起當成了垃圾,考完試就隨手拋掉。這對任何一方,都是巨大的浪費。

事實上,大學的專業課教材有些並不比那些經典著作省錢。為什麼我們在課堂上就只能看到那些紙張低劣的教材,既然自己沒有好的,為什麼不“拿來”更好的?

上面這些只是我的牢騷,我剛上大學時對計算機是個白痴,經常被一大堆名詞弄的暈頭轉向,上很多課,我看不到這和計算機有什麼聯絡,老師也從不講開的這些課都有什麼用,所以經常逃課,等到知道逃的課很有用的時候,那門課已經考完試了,所以積累了不少牢騷。但我也在網上看到很多的對我極有啟發的部落格,看到很多文筆非常優秀的技術作家,牢騷歸牢騷,我還是充滿了希望的。只是感覺,需要時間。

 

           

再分享一下我老師大神的人工智慧教程吧。零基礎!通俗易懂!風趣幽默!還帶黃段子!希望你也加入到我們人工智慧的隊伍中來!https://blog.csdn.net/jiangjunshow