ACM 进阶计划~~转
ACM隊不是為了一場比賽而存在的,為的是隊員的整體提高。
大學期間,ACM隊隊員必須要學好的課程有:
?
l?C/C++兩種語言
l?高等數學
l?線性代數
l?數據結構
l?離散數學
l?數據庫原理
l?操作系統(tǒng)原理
l?計算機組成原理
l?人工智能
l?編譯原理
l?算法設計與分析
?
除此之外,我希望你們能掌握一些其它的知識,因為知識都是相互聯(lián)系,觸類旁通的。
?
以下學習計劃每學期中的內容不分先后順序,雖說是為立志于學習ACM的同學列的知識清單,但內容不限于ACM的知識。英語之類與專業(yè)相距較遠的課程請自行分配時間,這里不再列舉。
?
大一上學期:
?
必學:
1.?C語言基礎語法必須全部學會
a)?推薦“語言入門”分類20道題以上
b)?提前完成C語言課程設計
?
2.?簡單數學題(推薦“數學”分類20道以上)
需要掌握以下基本算法:
a)?歐幾里德算法求最大公約數
b)?篩法求素數
c)?康托展開
d)?逆康托展開
e)?同余定理
f)?次方求模
?
3.?計算幾何初步
a)?三角形面積
b)?三點順序
4.?學會簡單計算程序的時間復雜度與空間復雜度
5.?二分查找法
6.?簡單的排序算法
a)?冒泡排序法
b)?插入排序法
7.?貪心算法經典題目
?
8.?高等數學
?
以下為選修:
?
9.?學會使用簡單的DOS命令(較重要)
a)?color/dir/copy/shutdown/mkdir(md)/rmdir(rd)/attrib/cd/
b)?知道什么是絕對路徑與相對路徑
c)?學會使用C語言調用DOS命令
d)?學會在命令提示符下調用你自己用C語言編寫的程序,并使用命令行參數給自己的程序傳參(比如自己制作一個copyfile.exe實現(xiàn)與copy命令基本功能一致的功能)
e)?學會編寫bat批處理文件
10.?學會Windows系統(tǒng)的一些小知識,如設置隱藏文件,autoRun.inf的設置等。
11.?學會編輯注冊表(包括使用注冊表編輯器regedit和使用DOS命令編輯注冊表)
12.?學會使用組策略管理器管理(gpedit.msc)組策略。
?
大一下學期:
1.?掌握C++部分語法,如引用類型,函數重載等,基本明白什么是類。
2.?學會BFS與DFS
a)?迷宮求解(最少步數)
b)?水池數目(NYOJ27)
c)?圖像有用區(qū)域(NYOJ92)
d)?樹的前序中序后序遍歷
3.?動態(tài)規(guī)劃(15題以上),要學會使用循環(huán)的方法寫動態(tài)規(guī)劃,同時也要學會使用記憶化搜索的方法。
a)?最大子串和
b)?最長公共子序列
c)?最長單調遞增子序列(O(n)與O(n?log?n)算法都需要掌握)
d)?01背包
e)?RMQ算法
4.?學會分析與計算復雜程序的時間復雜度
5.?學會使用棧與隊列等線性存儲結構
6.?學會分治策略
7.?排序算法
a)?歸并排序
b)?快速排序
c)?計數排序
8.?數論
a)?擴展歐幾里德算法
b)?求逆元
c)?同余方程
d)?中國剩余定理
9.?博弈論
a)?博弈問題與SG函數的定義
b)?多個博弈問題SG值的合并
10.?圖論:
a)?圖的鄰接矩陣與鄰接表兩種常見存儲方式
b)?歐拉路的判定
c)?單最短路bellman-ford算法dijkstra算法。
d)?最小生成樹的kruskal算法與prim算法。
?
11.?學會使用C語言進行網絡編程與多線程編程
?
12.?高等數學
?
13.?線性代數
a)?明確線性代數的重要性,首先是課本必須學好
b)?編寫一個Matrix類,進行矩陣的各種操作,并求編寫程序解線性方程組。
c)?推薦做一兩道“矩陣運算”分類下的題目。
?
以下為選修,隨便選一兩個學學即可:
14.?(較重要)使用C語言或C++編寫簡單程序來調用一些簡單的windows?API,或者在linux下進行l(wèi)inux系統(tǒng)調用,其目的是明白什么是API(應用程序接口)。
?
15.?網頁設計
a)?學習靜態(tài)網頁技術(html+css+javascript)
b)?較具有藝術細胞的可以試試Photoshop
c)?php或其它動態(tài)網頁技術
?
16.?學習matlab,如果想參加數學建模大賽的話,需要學這個軟件。
?
大一假期(如果留校集訓)
1.?掌握C++語法,并熟練使用STL
2.?試著實現(xiàn)STL的一些基本容器和函數,使自己基本能看懂STL源碼
3.?圖論
a)?使用優(yōu)先隊列優(yōu)化Dijkstra和Prim
b)?單源最短路徑之SPFA
c)?差分約束系統(tǒng)
d)?多源多點最短路徑之FloydWarshall算法
e)?求歐拉路(圈套圈算法)
4.?進行復雜模擬題訓練
5.?拓撲排序
6.?動態(tài)規(guī)劃進階
a)?完全背包、多重背包等各種背包問題(參見背包九講)
b)?POJ上完成一定數目的動態(tài)規(guī)劃題目
c)?狀態(tài)壓縮動態(tài)規(guī)劃
d)?樹形動態(tài)規(guī)劃
7.?搜索
a)?回溯法熟練應用
b)?復雜的搜索題目練習
c)?雙向廣度優(yōu)先搜索
d)?啟發(fā)式搜索(包括A*算法,如八數碼問題)
8.?計算幾何
a)?判斷點是否在線段上
b)?判斷線段相交
c)?判斷矩形是否包含點
d)?判斷圓與矩形關系
e)?判斷點是否在多邊形內
f)?判斷點到線段的最近點
g)?計算兩個圓的公切線
h)?求矩形的并的面積
i)?求多邊形面積
j)?求多邊形重心
k)?求凸包
?
?
?
選修
9.?可以學習一種C++的開發(fā)框架來編寫一些窗體程序玩玩(如MFC,Qt等)。
10.?學習使用C或C++連接數據庫。
?
大二一整年:
1.?數據結構
a)?單調隊列
b)?堆
c)?并查集
d)?樹狀數組
e)?哈希表
f)?線段樹
g)?字典樹
2.?圖論
a)?強連通分量
b)?雙連通分量(求割點,橋)
c)?強連通分量與雙連通分量縮點
d)?LCA、LCA與RMQ的轉化
e)?二分圖匹配
i.?二分圖最大匹配
ii.?最小點集覆蓋
iii.?最小路徑覆蓋
iv.?二分圖最優(yōu)匹配
v.?二分圖多重匹配
f)?網絡流
i.?最大流的基本SAP
ii.?最大流的ISAP或者Dinic等高效算法(任一)
iii.?最小費用最大流
iv.?最大流最小割定理
3.?動態(tài)規(guī)劃多做題提高(10道難題以上)
4.?數論
a)?積性函數的應用
b)?歐拉定理
c)?費馬小定理
d)?威樂遜定理
5.?組合數學
a)?群論基礎
b)?Polya定理與計數問題
c)?Catalan數
6.?計算幾何
a)?各種旋轉卡殼相關算法
b)?三維計算幾何算法
7.?理解數據庫原理,學會SQL語句
8.?學好計算機組成原理
?
9.?學習Transact-SQL語言,學會使用觸發(fā)器,存儲過程,學會數據庫事務等。
10.?圖論二
a)?網絡流的各種構圖訓練(重要)
b)?最小割與最小點權覆蓋等的關系(詳見《最小割模型在信息學競賽中的應用》一文)
c)?次小生成樹
d)?第k短路
e)?最小比率生成樹
11.?線性規(guī)劃
12.?動態(tài)規(guī)劃更高級進階
13.?KMP算法
14.?AC自動機理論與實現(xiàn)
15.?博弈論之Alpha-beta剪枝
?
?
選修,有相關興趣的可以學一下:
?
16.?自學C#或Java做一個項目,比如C++/C#/Java考試系統(tǒng)之類的。
17.?先做一些小游戲玩玩,然后可以學一下DirectX或者OpenGL,或者可以試試XNA游戲框架。
18.?了解一下游戲引擎相關的知識
?
其中的寒假假期最好:
1.?自學完離散數學
2.?自學概率論的部分章節(jié)
3.?自學操作系統(tǒng)部分章節(jié)
?
大三、
1.?鞏固之前的知識,進行一遍大復習。
2.?一些如蟻群算法,遺傳算法,模擬退火算法等人工智能方面應用較廣的隨機性算法。
3.?把編譯原理上學的東西應用到編程中:如DFA,NFA,還有語法分析的各種方法等。
?
當你按上面那些一步步走過來時你已經是牛人了,后面要學的東西,就是由牛人自己來發(fā)掘的了。
轉載于:https://www.cnblogs.com/ccccnzb/p/3436049.html
總結
以上是生活随笔為你收集整理的ACM 进阶计划~~转的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 时间对象
- 下一篇: shopex还是ecshop