Re: [問題] 如何自學程式解題

看板Prob_Solve (計算數學 Problem Solving)作者 (貓貓最乖了)時間13年前 (2011/06/16 21:29), 編輯推噓4(4011)
留言15則, 4人參與, 最新討論串4/8 (看更多)
※ 引述《x000032001 (某數..失業中)》之銘言: : 原PO背景: 還沒上大學 高職畢業 想練功 : --- : 玩程式解題大概一年多了 : 覺得自己有瓶頸存在 : 遇到題目常常有完全沒頭緒的障礙 : 訓練programming的話 是不是要繼續讀DS & algorithm的書好? : 充實多點理論再去寫題目的話才有幫助 是這樣嗎? : 讀哪些書比較好呢? : 網站的話..我資質魯鈍 看DJWS常常看不懂XD 警告:這是原 Po 七八年前的心得,如果有什麼新的東西還請版友補充。 跟你分享一下當年自學的心得(當年的基礎混到現在也還能用,所以應該 還有參考的價值)首先就是你可能要意識到常見的「解題」終究無法幫你學到 更精妙的演算法。用數學做譬喻,這有點像是國中高中職故意出很刁鑽的數學 應用題,但不論怎麼刁鑽,也不可能出現高等微積分的東西。常見的「解題」 亦如此;無論題目如何包裝,如何拐彎抹角,大都出不了某個「基礎範圍」。 如果你只是要學這個「基礎範圍」,解題可以磨練你解應用問題的技巧;若不 是,恐怕到最後將迷失在一些瑣碎的技術上面。平常寫程式時,這個「基礎範 圍」倒也滿夠用了。等等會回來講這問題。 先來講入門書。在我個人有限的見識之下,真的沒有一本書或網站比 Introduction to Algorithms (當年看第二版)更適合當入門書。當時有中 文翻譯,不過那本翻譯個人不推薦。先講中文米文的問題:平均來說,米文書 的水準比中文書高很多,米文網站資源也比中文網站多非常非常多;而中文翻 譯通常比較差(包括排版,如果你覺得排版賞心悅目很重要),搞不好比原文 更難懂,慎之!我很感謝當年導師推薦給我 I2A;當時我米文非常差,前言耗 費多時才讀完,但習慣以後速度也越來越快了。個人覺得花這時間非常非常值 得。慢慢啃這本書所學到的知識,遠比同時間閱讀其他中文書學到更多。 另外講一下許多演算法書的問題。很多書(尤其是中文書)看上去列舉了 很多別人沒有提的奇妙演算法,但這些書的缺點就是沒辦法給你一個完整的概 念。這有點像是學了各種奇招,卻沒有把一門武功從基礎扎扎實實的學好,終 究底子不夠,無法融會貫通。徹底學好基礎後,這些奇招只要看到就能馬上納 為自己功夫,沒什麼好羨慕的。見一個就學一個!而推薦 I2A 這本書,正是 因為這本書雖然奇招不多,但可以給你非常好的基礎。一定還有其他書也有同 樣的效果,只是我沒讀過而已。 回來講通常「解題」所需要的「基礎範圍」。I2A 那本書最大缺憾就是網 路流(network flows)的招數不夠多,遠不夠應付平時解題需要。說實在我 到現在還不知道有哪本書清楚,完整又適合初學。Algorithms in C Part 5 (by Robert Sedgewick) 也許可以學到一些招數?Introduction to Graph Theory (by Douglas West) 這本書雖然是在講圖論,但也有一點演算法。或許 到時候自己找國外課程網站的上課筆記比較快?這可能也要請版友補充了。 兩本書在這: http://www.informit.com/store/product.aspx?isbn=0201316633 http://www.amazon.com/Introduction-Graph-Theory-Douglas-West/dp/0130144002 再來是題庫網站。我知道長久以來大家都喜歡寫 UVA 的 ACM 題庫。但這 同樣有馬步都沒蹲好就一直想要打架的問題。ACM 題庫還有一個致命的缺點, 就是你根本不知道你怎麼錯的。為此我推薦 USACO 網站: http://train.usaco.org/usacogate 這是米國用來訓練資訊競賽的東西。既然他們都公開了就拿來用。這網站 不僅有演算法介紹,課程和題目按部就班,當你錯的時候也會給你測資,在初 學時比常見的 ACM 題庫都還好。或許還有其他類似的網站,但我已經很久沒 關心了... 如果你的野心不只「基礎範圍」,I2A 依然是我所見過最好的入門書。當 然它還是缺少很多很經典的資料結構或演算法(如 splay tree, 雖然書裡面其 實有跟讀者提名字),需要自己補起來,但讀完後應該是有辦法自己補起來的! 總之不論你未來想往更深奧的演算法邁進,或是只是想應付解題,這本書 應該都很適合當起點。或許也可以參考國內外大學教科書選哪本。就我所知好 像也有人用 Algorithm Design (by Jon Kleinberg & Eva Tardos), 不過這本 我沒讀過,無法向你推薦或反推薦。 : --- : 想自己寫一些實用的小程式會發現有點卡 不知道怎麼設計 : 這個方面就是需要讀software engineering吧? : 是不是等大三大四再去接觸就可以了? : 懇請大家給我一些建議~"~ 個人覺得知識沒有「什麼時候再學」的問題,只要先學好基礎就行。相反 的,如果你大學畢業後發現少了什麼,趕快補起來也很好呀。如果有時間有興 趣就衝吧! 我猜很多人會跟你說去學一些常見的設計模式(design patterns)自然 就會知道常見的問題怎麼解決,但我個人其實更想推薦你從頭學程式語言的理 論基礎。這將會徹底改變你對程式的看法!如同學好基礎後奇招無所畏懼一樣, 那些設計的奇招也是見一招拆一招,甚至常常你自己可以想出更好的。我講的 不是那種只教某種語言的普通課程,而是可以看透幾乎所有程式語言的方法! 可惜台灣好像沒有很多師資,資源少到不知道該如何介紹才好。(也有可能是 我見識淺薄,認識不夠多人,還請大家補充。)聽說中研院暑假有相關的研習 營,也許可以去打聽一下。 至於你講的軟體工程,跟程式語言有密切關係,但還包括很多額外的學問, 像是怎麼跟人合作或是長期維護一個軟體之類的。不過我想,就你的目的而言 可能都用不到?xDD 希望這篇文章對你有幫助! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.30.39

06/16 22:14, , 1F
推 看來聖經本還是得準備拿錢出來敗~"~
06/16 22:14, 1F
要省錢可以買二手的!然後一定還有其他好書啦,所以應該沒到聖經這麼 誇張。另外我更新了一部份文章。

06/17 15:13, , 2F
Algorithm Design 以自學來說我覺得比 I2A 好啃一些
06/17 15:13, 2F

06/17 15:15, , 3F
我自己是讀 Algorithm Design 為主,I2A當reference
06/17 15:15, 3F

06/17 15:15, , 4F
配著看~ 不過每個人的習慣不一樣啦XD
06/17 15:15, 4F

06/17 15:16, , 5F
I2A感覺比較像字典,Algorithm Design敘述性文字較多
06/17 15:16, 5F
喔太好了有人出現了 xDDD 聽說這本網路流內容夠多,可以問一下是怎麼 回事嗎? xD

06/18 00:15, , 6F
不知道對原po來說是怎麼樣才算夠多耶:P
06/18 00:15, 6F

06/18 00:16, , 7F
之前我的演算法老師只教到 max flow , min cut 那邊
06/18 00:16, 7F

06/18 00:17, , 8F
後面還有很多 topic 因為時間不夠我自己也沒看完:P
06/18 00:17, 8F

06/18 00:18, , 9F
要目錄的話這邊有 http://goo.gl/JsP3l
06/18 00:18, 9F
光看目錄好像看不太出來。有講 Dinic 演算法或是 blocking flow 嗎? 我模糊的印象中 I2A 沒有講這個。blocking flow 配合好的資料結構可以進 化成非常快的演算法,個人覺得值得一提。那個「好的資料結構」是 dynamic tree, I2A 中好像只有提到名字 xD 關鍵章節 ==> 7.3 Choosing Good Augmenting Paths (剛才偷偷翻一下,有特別講 scaling, 但還是沒講 blocking flow. 我覺得 scaling 不夠「基本」入門書不講就算了,但解題有用!xDD 印象中 I2A 好像沒有。) ※ 編輯: Favonia 來自: 140.112.30.39 (06/18 02:20)

06/18 20:24, , 10F
我記得I2A有在章節的註記那邊,簡短的提到blocking flow
06/18 20:24, 10F

06/19 15:15, , 11F
Network Flows: Theory, Algorithms, and Applications
06/19 15:15, 11F

06/19 15:16, , 12F
整本都是網路流 :D
06/19 15:16, 12F

06/19 15:16, , 13F
不過這一本有點年紀了,也許後來有出更好的書我不曉得~
06/19 15:16, 13F
先說我沒看過,不過整本書的話份量會不會太驚人 xDDD 雖然買本「字典」 是不錯的選擇,可是感覺就不太像入門書 xDDD ※ 編輯: Favonia 來自: 140.112.30.39 (06/19 23:14)

06/21 07:52, , 14F
這本書的風格算是教科書喔! 不然也不會推薦了 XD
06/21 07:52, 14F

06/21 08:10, , 15F
要說到字典 應該I2A更像字典吧 超級厚!
06/21 08:10, 15F
也是,哈哈哈 xDDDD ※ 編輯: Favonia 來自: 140.112.30.39 (06/21 17:28)
文章代碼(AID): #1D-WL1MZ (Prob_Solve)
討論串 (同標題文章)
文章代碼(AID): #1D-WL1MZ (Prob_Solve)