[轉載]ACM推薦書目,入門 (2011-01-18 13:23:31)轉載▼ 標籤: 轉載 分類: 技術攻關
http://blog.sina.com.cn/s/blog_46e156470100ogmu.html
ACM推薦入門,演算法
原文地址:ACM推薦書目,入門作者:ttcdld
《實用演算法的分析與程式設計》(吳文虎,王建德著,電子工業出版社,競賽類的黑寶書)
《青少年國際和全國資訊學(電腦)奧林匹克競賽指導)――組合數學的演算法和程式設計》
(吳文虎,王建德著,清華大學出版社,參加競賽組合數學必學)
《電腦演算法設計與分析》(王曉東編著,最好的資料結構教材)
《資料結構與演算法》(傅清祥,王曉東編著,我所見過的最好的演算法教材)
《資訊學奧林匹克競賽指導――1997-1998競賽試題解析》(吳文虎,王建德著,清華大學出版社,內容極佳)
《電腦程式設計技巧》(D.E.Kruth著,演算法書中最著名的《葵花寶典》,大師的作品,難度大)
《計算幾何》(周陪德著,全面介紹了計算幾何)
《ACM國際大學生程式設計競賽試題與解析(一)》(吳文虎著,清華大學出版社)
網上還有:
《青少年國際和全國資訊學(電腦)奧林匹克競賽指導)――圖論的演算法和程式設計》(清華大學出版社)
《資訊學奧林匹克競賽指導――1994-1995競賽試題解析》(清華大學出版社)
1. CLRS 演算法導論
演算法百科全書,只做了前面十幾章的習題,便感覺受益無窮。
2. Algorithms 演算法概論
短小精悍,別據一格,准經典之作。一個壞訊息: 同演算法導論,該書沒有習題答案。好訊息:習題很經典,難度也適中,只需花點點時間自己也都能做出來。不好也不壞的訊息:我正在寫習題的答案,已完成前三章,還剩九章約二百道題,順利的話二個月之後發布。另有中文版名《演算法概論》,我沒看過,不知道翻譯得怎麼樣。如果有心的話,還是盡量看原版吧,其實看原版與看中文版花費時間不會相差很大,因為大部分時間其實都花費在做習題上了。
3. Algorithm Design 演算法設計
很經典的一本書,很久之前看的,遺憾的是現在除了就記得它很經典之外其它都忘光了。
4. SICP 電腦程式的構造和解釋
六星之書無需多言,雖然這不是一本講演算法的書,但看完此書有助於你更深入的理解什麼是遞迴。我一直很強調習題,看完此書後你至少應該做完前四章的太部分習題。否則那是你的遺憾,也是作者的遺憾。
5. Concrete Mathematics 具體數學
有人說看TAOCP之前應該先弄清楚這本書的內容,要真是如此的話那我恐怕是看不到TAOCP了。零零碎碎的看了一大半,很多東西都沒有時間來好好消化。如果你是剛進大學不久的本科生,有著大把的可自由支配時間,那你幸運又幸福了,花上幾個月時間好好的讀一下此書吧,收穫絕對大於你的期望值。
6. Introduction to The Design and Analysis of Algorithms 演算法設計與分析基礎
很有趣的一本演算法書,有許多在別的書上找不到的趣題,看完此書絕對能讓你大開眼界,實在是一本居家旅行,面試裝逼的必備佳作。
7. 編程之美--微軟技術面試心得
雖說是一本面試書,但如果把前面十幾頁扯掉的話,我更願意把它看作是一本講解題思維的演算法小品。在書中,作者通常是給出一個平常解法,然後再一次又一次的最佳化改進,你可以很清楚的看到基本的演算法設計思想是如何得到運用以解決實際問題的。如果你已經有了一些演算法的基礎,看完本書應該能使你的演算法應用能力得到一定的提高。另外,本書生動有趣,也同樣適合於初學者。
8. Fundamentals of Algorithmics 演算法基礎
也是很久之前在學校圖書館借來看的,內容記不太清楚了,只隱約記得此書的動態規劃章節猶為出彩。應該是很經典的一本書,個人以為足以和演算法導論等所謂當世經典平分秋色,但是怎麼好像被人提到的不多,或許是我孤陋寡聞了。
9. How to solve it 怎樣解題
二十世紀最偉大的數學思想家之一波利亞的力作,講一般性的解題方法:怎麼認識問題,怎麼轉換問題,怎麼解決問題,如何在問題中得到啟發,如何找到一個通往答案的方向。
10. Programming interviews exposed 程式員面試攻略
一本消遣之作。個人以為要比國內的某“XXX面試寶典”純粹一些,至少也有一些啟發性的內容,而不單單是面試題解庫。
11. Programming Pearls 編程珠璣
學習演算法不僅需要像Alogrithms,演算法導論這樣的重量級的內功心法,像《編程之美》、《編程珠璣》這樣的輕量級的輕功身法也必不可少。前些年網上不是很流行像“給你10億個數,找到最大的n個”或者“給你10億個數,找出現次數最多的那個數”之類的百度面試題嗎?看了此書你就知道怎麼解決了。相比於《編程之美》來說,本書中的樣本技巧性略低一些,但是也更有實際應用價值一些。
12. 演算法藝術與資訊學競賽
如果演算法導論是九陽神功,那這本無疑就是九陰真經。本書是專為參加一些諸如ACM之類程式設計比賽的同學而寫的,江湖人稱“黑書”。裡面講的都是一些在編程比賽中常用的演算法、資料結構,以及一些數論和計算幾何等。我雖然並不搞競賽,但也從此書中受益頗多。
13. An Introduction to Probability Theory and Its Applications
準備看的,現在才發現機率論有多麼重要,可惜本科的時候沒有好好學。前不久一個同學問我個問題,我半天弄了一個程式給他,他說:這裡就不是相關係數麼,Excel一下就完事!我暈,我還真不知道那就是相關係數。
14. Numerical Analysis
這本的作者是Richard L. Burden,J. Douglas Faires
數值分析,討論各種數值演算法,比如插值、擬合、積分、微分方程的求解、線性和非線性方程組求解等。準備詳細看。
15. TAOCP 電腦程式設計藝術
傳說中的TAOCP,說的人多,看的人少。TAOCP四卷堪稱是演算法藏經閣中的易筋經或者是少林七十二絕技。天下武學,盡出少林,天下演算法,盡出TAOCP也。這點你可以順便翻開一本演算法書看看他的引用文獻就知道了。我唯讀了第四卷的部分章節,前三卷暫時還沒敢看,還在讀書計劃表中被無限期擱置。
一位高手對我的建議:
一般要做到50行以內的程式不用調試、100行以內的二分鐘內調試成功.acm主要是考演算法的
,主要時間是花在思考演算法上,不是花在寫程式與debug上。
下面給個計劃你練練:
第一階段:
練經典常用演算法,下面的每個演算法給我打上十到二十遍,同時自己精簡代碼,
因為太常用,所以要練到寫時不用想,10-15分鐘內打完,甚至關掉顯示器都可以把程式打
出來.
1.最短路(Floyd、Dijstra,BellmanFord)
2.最小產生樹(先寫個prim,kruscal要用並查集,不好寫)
3.大數(高精度)加減乘除
4.二分尋找. (代碼可在五行以內)
5.叉乘、判線段相交、然後寫個凸包.
6.BFS、DFS,同時熟練hash表(要熟,要靈活,代碼要簡)
7.數學上的有:輾轉相除(兩行內),線段交點、多角形面積公式.
8. 調用系統的qsort, 技巧很多,慢慢掌握.
9. 任意進位間的轉換
第二階段:
練習複雜一點,但也較常用的演算法。
如:
1. 二分圖匹配(匈牙利),最小路徑覆蓋
2. 網路流,最小費用流。
3. 線段樹.
4. 並查集。
5. 熟悉動態規劃的各個典型:LCS、最長遞增子串、三角剖分、記憶化dp
6.博弈類演算法。博弈樹,二進位法等。
7.最大團,最大獨立集。
8.判斷點在多邊形內。
9. 差分約束系統.
10. 雙向廣度搜尋、A*演算法,最小耗散優先.
第三階段:
前兩個階段是打基礎,第三階段是鍛煉在比賽中可以快速建立模型、想新演算法
。這就要平時多做做綜合的題型了。
1. 把oibh上的論文看看(大概幾百篇的,我只看了一點點,呵呵)。
2. 平時掃掃zoj上的難題啦,別老做那些不用想的題.(中大acm的版主經常說我挑簡單的來
做:-P )
3. 多參加網上的比賽,感受一下比賽的氣氛,評估自己的實力.
4. 一道題不要過了就算,問一下人,有更好的演算法也打一下。
5. 做過的題要記好