算法学习建议(转)
一般要做到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. 做過的題要記好 :-)?
總結
- 上一篇: 利用Java生成静态HMTL页面的方法收
- 下一篇: 最新Kernel 2.6.29正式版发布