經典常用算法

第一階段:練經典常用算法,下面的每個算法給我打上十到二十遍,同時自己精簡代碼,因爲太常用,所以要練到寫時不用想,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源程序,適合各種水平的讀者。

  最後,在學習算法提升戰鬥力的同時,也要多做題目,實戰是很有必要的。其實並不是所有的題目都是靠算法的,有一些題目是有多種可以優化的手段,也有一些工程性比較強的題目。上手做和把題做精還是有很大區別的(慚愧的說,我就是屬於上手做,沒有做精,所以……)。

  願每一位程序設計競賽愛好者挑戰極限!
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章