經典常用算法
第一階段:練經典常用算法,下面的每個算法給我打上十到二十遍,同時自己精簡代碼,因爲太常用,所以要練到寫時不用想,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. 做過的題要記好 :-)
下面轉自:http://hi.baidu.com/wilworld/blog/item/88b1b844d37e4049500ffe6a.html
算法書有很多可以參考:
1、Concrete Mathematics --- A Foundation For Computer Science
Ronald L. Graham , Donald E. Knuth , Oren Patashnik
這本書《具體數學》是Stanford計算機系的教材(1970 年開始給研究生授課),書的內容是Knuth的鉅著TAOCP第一章的擴展,涉及了計算機科學領域內幾乎所有可能遇到的數學知識。書中許多經典問題的解答比目前廣泛流傳的解法更易懂。對於提高大家的數學修養有很大幫助。
2、Introduction to Algorithms
Thomas H. Cormen ,Charles E. Leiserson ,Ronald L. Rivest ,Clifford Stein
《算法導論》MIT計算機系的經典算法教材。作者Rivest獲得過ACM Turing Award,牛!本書內容全面,語言通俗,很適合大家入門。
3、實用算法的分析和程序設計
吳文虎 王建德
大名鼎鼎的“黑書”。內容包括了競賽需要的各種算法,各種層次的讀者都適合。
【這裏是我自己加的:其實所謂"黑書",還有一本,《算法藝術與信息學競賽》作者:劉汝佳 黃亮,很經典,很流行】
4、網絡算法與複雜性理論
謝政 李建平
內容很豐富的圖論教材
5、算法+數據結構=程序
N.Wirth
Pascal語言的發明人Wirth教授的名著,深入闡述了算法與數據結構的關係,對每個算法都提供詳細的Pascal源程序,適合各種水平的讀者。
最後,在學習算法提升戰鬥力的同時,也要多做題目,實戰是很有必要的。其實並不是所有的題目都是靠算法的,有一些題目是有多種可以優化的手段,也有一些工程性比較強的題目。上手做和把題做精還是有很大區別的(慚愧的說,我就是屬於上手做,沒有做精,所以……)。
願每一位程序設計競賽愛好者挑戰極限!
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.