acm學習計劃
acm學習計劃
進了ACM之后感覺不知道方向,好像什么都不會什么都該學,但又不知道該從哪里學起,下面是學習啦小編為你搜集到的acm學習計劃。希望對你有所幫助。
acm學習計劃
第一階段:
練經典常用算法,下面的每個算法給我打上十到二十遍,同時自己精簡代碼,
因為太常用,所以要練到寫時不用想,10-15分鐘內打完,甚至關掉顯示器都可以把程序打
出來.
1.最短路(Floyd、Dijstra,BellmanFord)
2.最小生成樹(先寫個prim,kruscal要用并查集,不好寫)
3.大數(高精度)加減乘除
4.二分查找. (代碼可在五行以內)
5.叉乘、判線段相交、然后寫個凸包.
6.BFS、DFS,同時熟練hash表(要熟,要靈活,代碼要簡)
7.數學上的有:輾轉相除(兩行內),線段交點、多角形面積公式.
8. 調用系統(tǒng)的qsort, 技巧很多,慢慢掌握.
9. 任意進制間的轉換
第二階段:
練習復雜一點,但也較常用的算法。
如:
1. 二分圖匹配(匈牙利),最小路徑覆蓋
2. 網絡流,最小費用流。
3. 線段樹.
4. 并查集。
5. 熟悉動態(tài)規(guī)劃的各個典型:LCS、最長遞增子串、三角剖分、記憶化dp
6.博弈類算法。博弈樹,二進制法等。
7.最大團,最大獨立集。
8.判斷點在多邊形內。
9. 差分約束系統(tǒng).
10. 雙向廣度搜索、A*算法,最小耗散優(yōu)先.
第三階段:
前兩個階段是打基礎,第三階段是鍛煉在比賽中可以快速建立模型、想新算法
。這就要平時多做做綜合的題型了。
1. 把oibh上的論文看看(大概幾百篇的,我只看了一點點,呵呵)。
2. 平時掃掃zoj上的難題啦,別老做那些不用想的題.(中大acm的版主經常說我挑簡單的來
做:-P )
3. 多參加網上的比賽,感受一下比賽的氣氛,評估自己的實力.
4. 一道題不要過了就算,問一下人,有更好的算法也打一下。
5. 做過的題要記好 :-)
(一)
不可能都完全記住那么多的算法.
常用算法,拿過來就可以寫出來
不常用的,拿起書來,看10分鐘,就能理解算法(因為以前記過).
對以前沒有記過的算法,就不好說了,難的可能要研究好幾天.
這樣就可以了.
應該熟練掌握的常用的算法應該有:
各種排序算法(插入排序、冒泡排序、選擇排序,快速排序,堆排序,歸并排序)
線性表(一般的線性表,棧,隊列)的插入和刪除
二叉樹的遍歷(前序,中序,后序)
圖的遍歷(深度優(yōu)先,廣度優(yōu)先)
二分法查找,排序二叉樹,Hash查找(處理沖突的方法)。
(二)
分析一個東西,你可以用不同的眼光去看待,有很多時候,就跟自己生活一樣,覺得小時候看待問題很幼稚,現(xiàn)在看問題全面了,而且方式不一樣了,為什么,就是成長吧,就跟這個一樣的,你對算法,比如寫一個程序,可能直接寫很簡單,可是可以有一些有趣的方式,比如通過什么樣來表達,怎么樣更高效..等等吧
(三)
于大學里把基本的專業(yè)課學扎實就ok,如:數據結構,離散,操作系統(tǒng)等。碰到一些基本的數據結構和算法,如查找排序要根據原理馬上能寫出相應的代碼就行了,我個人是這樣理解的,對于更深層次的東西,也是建立在自己熟練的基礎之上的吧
(四)
算法與數據結構考驗試題精析》第2版 機械工業(yè)出版社
如果你想練習的話,這里有N多的題可以來練習,但實際中能用到的比較少,除非搞一些高端的玩意,不過平時也可以在自己的項目中結合使用
(五)
數據結構在平時可能用不上,但數據結構可以培養(yǎng)你程序時如果注意效率的意識,一個學過數據結構的人和一個沒有學過數結構的人寫出來的程序可能在效率上有差別。
(六)
搞ACM需要的掌握的算法.
要注意,ACM的競賽性強,因此自己應該和自己的實際應用聯(lián)系起來.
適合自己的才是好的,有的人不適合搞算法,喜歡系統(tǒng)架構,因此不要看到別人什么就眼紅,
發(fā)揮自己的長處,這才是重要的.
同時由于個人練習的時候可能有些偏向性,可能上面的總結不是很全,還請大家提出和指正,而且由于ACM的題目中專門針對某個算法的題目可能比較少出現(xiàn),所以上面的分類中的題有可能有多種解法或者是一些算法的綜合,這都不會影響大家做題,希望練習的同學能夠認真,扎實地訓練,做到真正的理解算法,掌握算法.同時在論壇上還有許多前輩的分類,總結,大家也可以按自己的情況采用.注意FTP上有很多的資料,希望大家好好地利用.
如果同學能在明年暑假前能掌握上面大部分算法,那你也基本上達到了訓練的目的,到暑假的時候你就可以選擇自己比較喜歡的方面進行加深和強化,而且同學們不要覺得看算法的證明是很麻煩的事,這可以加強你的思維能力,這在ACM中也很重要.同時也希望老隊員能幫助我整理習題和題目分類.同時ACM的題目是沒有范圍的,只能在平時中多積累多練習,多比別人多努力一點,你就會比別人多一線希望.
先掌握搜索,動態(tài)規(guī)劃,貪心這些思想方法
然后學習各種技巧