前幾天在網上看到,轉過來時刻督促一下自己。
acm隊不是為了一場比賽而存在的,為的是隊員的整體提高。
大學期間,acm隊隊員必須要學好的課程有:
l c/c++兩種語言
l 高等數學
l 線性代數
l 資料結構
l 離散數學
l 資料庫原理
l 作業系統原理
l 計算機組成原理
l 人工智慧
l 編譯原理
l 演算法設計與分析
除此之外,我希望你們能掌握一些其它的知識,因為知識都是相互聯絡,觸類旁通的。
以下學習計畫每學期中的內容不分先後順序,雖說是為立志於學習acm的同學列的知識清單,但內容不限於acm的知識。英語之類與專業相距較遠的課程請自行分配時間,這裡不再列舉。
大一上學期:
必學: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實現與copy命令基本功能一致的功能)
e) 學會編寫bat批處理檔案
10. 學會windows系統的一些小知識,如設定隱藏檔案,autorun.inf的設定等。
11. 學會編輯登錄檔(包括使用登錄檔編輯器regedit和使用dos命令編輯登錄檔)
12. 學會使用組策略管理器管理(gpedit.msc)組策略。
大一下學期:
掌握c++部分語法,如引用型別,函式過載等,基本明白什麼是類。
學會bfs與dfs
a) 迷宮求解(最少步數)
b) 水池數目(nyoj27)
c) 影象有用區域(nyoj92)
d) 樹的前序中序後序遍歷
動態規劃(15題以上),要學會使用迴圈的方法寫動態規劃,同時也要學會使用記憶化搜尋的方法。
a) 最大子串和
b) 最長公共子串行
c) 最長單調遞增子串行(o(n)與o(n log n)演算法都需要掌握)
d) 01揹包
e) rmq演算法
學會分析與計算複雜程式的時間複雜度
學會使用棧與佇列等線性儲存結構
學會分治策略
排序演算法
a) 歸併排序
b) 快速排序
c) 計數排序
數論a) 擴充套件歐幾里德演算法
b) 求逆元
c) 同餘方程
d) 中國剩餘定理
博弈論a) 博弈問題與sg函式的定義
b) 多個博弈問題sg值的合併
圖論:a) 圖的鄰接矩陣與鄰接表兩種常見儲存方式
b) 尤拉路的判定
c) 單最短路bellman-ford演算法dijkstra演算法。
d) 最小生成樹的kruskal演算法與prim演算法。
學會使用c語言進行網路程式設計與多執行緒程式設計
高等數學
線性代數
a) 明確線性代數的重要性,首先是課本必須學好
b) 編寫乙個matrix類,進行矩陣的各種操作,並求編寫程式解線性方程組。
c) 推薦做一兩道「矩陣運算」分類下的題目。
以下為選修,隨便選一兩個學學即可:
(較重要)使用c語言或c++編寫簡單程式來呼叫一些簡單的windows api,或者在linux下進行linux系統呼叫,其目的是明白什麼是api(應用程式介面)。
網頁設計
a) 學習靜態網頁技術(html+css+j**ascript)
b) 較具有藝術細胞的可以試試photoshop
c) php或其它動態網頁技術
學習matlab,如果想參加數學建模大賽的話,需要學這個軟體。
大一假期(如果留校集訓)
掌握c++語法,並熟練使用stl
試著實現stl的一些基本容器和函式,使自己基本能看懂stl原始碼
圖論a) 使用優先佇列優化dijkstra和prim
b) 單源最短路徑之spfa
c) 差分約束系統
d) 多源多點最短路徑之floydwarshall演算法
e) 求尤拉路(圈套圈演算法)
進行複雜模擬題訓練
拓撲排序
動態規劃高階
a) 完全揹包、多重揹包等各種揹包問題(參見揹包九講)
b) poj上完成一定數目的動態規劃題目
c) 狀態壓縮動態規劃
d) 樹形動態規劃
搜尋a) 回溯法熟練應用
b) 複雜的搜尋題目練習
c) 雙向廣度優先搜尋
d) 啟發式搜尋(包括a*演算法,如八數碼問題)
可以學習一種c++的開發框架來編寫一些窗體程式玩玩(如mfc,qt等)。
學習使用c或c++連線資料庫。
大二一整年:
資料結構
a) 單調佇列
b) 堆
c) 並查集
d) 樹狀陣列
e) 雜湊表
f) 線段樹
g) 字典樹
圖論a) 強連通分量
b) 雙連通分量(求割點,橋)
c) 強連通分量與雙連通分量縮點
d) lca、lca與rmq的轉化
e) 二分圖匹配
i. 二分圖最大匹配
ii. 最小點集覆蓋
iii. 最小路徑覆蓋
iv. 二分圖最優匹配
v. 二分圖多重匹配
f) 網路流
i. 最大流的基本sap
ii. 最大流的isap或者dinic等高效演算法(任一)
iii. 最小費用最大流
iv. 最大流最小割定理
動態規劃多做題提高(10道難題以上)
數論a) 積性函式的應用
b) 尤拉定理
c) 費馬小定理
d) 威樂遜定理
組合數學
a) 群論基礎
b) polya定理與計數問題
c) catalan數
計算幾何
a) 各種旋轉卡殼相關演算法
b) 三維計算幾何演算法
理解資料庫原理,學會sql語句
學好計算機組成原理
學習transact-sql語言,學會使用觸發器,儲存過程,學會資料庫事務等。
圖論二a) 網路流的各種構圖訓練(重要)
b) 最小割與最小點權覆蓋等的關係(詳見《最小割模型在資訊學競賽中的應用》一文)
c) 次小生成樹
d) 第k短路
e) 最小比率生成樹
線性規劃
動態規劃更高階高階
kmp演算法
ac自動機理論與實現
自學c#或j**a做乙個專案,比如c++/c#/j**a考試系統之類的。
先做一些小遊戲玩玩,然後可以學一下directx或者opengl,或者可以試試xna遊戲框架。
自學完離散數學
自學概率論的部分章節
自學作業系統部分章節
大三、鞏固之前的知識,進行一遍大複習。
一些如蟻群演算法,遺傳演算法,模擬退火演算法等人工智慧方面應用較廣的隨機性演算法。
把編譯原理上學的東西應用到程式設計中:如dfa,nfa,還有語法分析的各種方法等。
當你按上面那些一步步走過來時你已經是牛人了,後面要學的東西,就是由牛人自己來發掘的了。
加油,與君共勉!
我的IT成長之路
我的 it成長之路 飛利浦公司開發一款 lpc213x的32 位微處理器。不知何故,現在有 nxp公司生產。不論是原飛利浦公司的使用者手冊,還是 nxp公司的使用者手冊,都沒有其元件封裝。沒有元件封裝就不能做印刷電路板。畫出原理圖也沒用,乾著急。如果自己實測自己做元件封裝。不僅費時費力,做出的元件封...
我的成長之路
1.h5新標籤 即語義化標籤,作用 便於搜尋引擎的抓取,的優化 a.h5建議使用utf 8編碼,避免亂碼 b.搜素引擎優化 seo c.表單新標籤 輸入的值必須是數字,且範圍在20 100之間 以下皆為日期選擇器,也可以像number一樣設定最大值最小值,超出範圍則會提示使用者,這樣對於後端來說比較...
我的創新成長之路(二)
大二年是我成長的一年,在這一年中我成長了許多,在這一年中,我得極力感謝07級學長們,還有08級部分同僚們。就這樣我成了創新 電子設計部的一員。進部之後,我才了解到我的進部跟兩個人有很大的關係,這個兩個人是普哥 王重普學長 和濤哥 帖濤 面試的時候。普哥問了我很多的問題,其中大部分關於智慧型車的 電磁...