閱讀這一節(jié)之前,請(qǐng)確認(rèn)你熟悉的語言,無論C、C++、java都已經(jīng)很熟練運(yùn)用,不存在語法問題了,否則參考本節(jié)的學(xué)習(xí)路線會(huì)讓你變得著急和打退堂鼓
對(duì)于已經(jīng)掌握一種語言可以參賽之后,算法和數(shù)據(jù)結(jié)構(gòu)的學(xué)習(xí),筆者認(rèn)為大體分三個(gè)步驟:
那些順帶的、不用專門學(xué)的常規(guī)算法和數(shù)據(jù)結(jié)構(gòu);這些如遞歸算法、遍歷枚舉、模擬、素?cái)?shù)等常規(guī)算法甚至只能算的上是技巧
系統(tǒng)學(xué)習(xí)的算法數(shù)據(jù)結(jié)構(gòu);這是耗費(fèi)時(shí)間最長(zhǎng)最耗腦的部分之一,你需要找一本數(shù)據(jù)結(jié)構(gòu)的書或者課程,系統(tǒng)完整的理解其中的算法并訓(xùn)練。
算法的學(xué)習(xí);這也是耗費(fèi)時(shí)間最長(zhǎng)最耗腦的部分之二,如果說數(shù)據(jù)結(jié)構(gòu)普遍是一種抽象空間的想象的話,那這部分大部分就都是數(shù)學(xué)的東西的,各種聽過的、沒有聽過的算法名字都會(huì)這里出現(xiàn)。
專題類,或需要單獨(dú)學(xué)的算法。比如并查集、RMQ或者是這種專門的或者比較少見的算法
對(duì)于第一部分,筆者建議在鞏固語法的做題過程中就訓(xùn)練了,大量的模擬題、簡(jiǎn)單題自然就會(huì)訓(xùn)練這些常見的算法數(shù)據(jù)結(jié)構(gòu)。這部分足以刷300~500題,有了這個(gè)基礎(chǔ),非常客觀的說,就已經(jīng)可以參加藍(lán)橋杯 或 ACM鍛煉了,并且省賽拿獎(jiǎng)的幾率是非常大的。
對(duì)于第二部分,這部分知識(shí)通常大學(xué)計(jì)算機(jī)相關(guān)的專業(yè)《數(shù)據(jù)結(jié)構(gòu)》課程就有涉及,但不同于大學(xué)的要求,我們競(jìng)賽的要求不僅僅局限于知識(shí)的理解,還要能運(yùn)用寫出來,如最短路徑問題、圖的遍歷、二叉樹的搜索等等。
對(duì)于第三部分,普遍大學(xué)即便本專業(yè)的學(xué)生也沒有專門的教材了,只能自行購(gòu)買,如主流的一些競(jìng)賽算法教程,或一些競(jìng)賽專業(yè)的學(xué)校的內(nèi)部集訓(xùn)教材等等。這部分的學(xué)習(xí)建議是,不必全部學(xué)習(xí)完,這個(gè)是一個(gè)長(zhǎng)期的過程,邊學(xué)邊練邊競(jìng)賽,在賽中鍛煉彌補(bǔ)不足。不必一定要學(xué)完才能參賽,要避免這種心理障礙
對(duì)于第四部分,能有這部分需求,應(yīng)該是已經(jīng)去得到一定成績(jī),也知道自己哪里不足了,也有了一套自己的學(xué)習(xí)方法。想必那個(gè)時(shí)候大家就自己知道如何做了
以上四部分,乃一家之言,實(shí)際學(xué)習(xí)并非一定這樣安排,大家可以根據(jù)情況安排,但無論如何規(guī)劃內(nèi)容、進(jìn)度,都一定要把刷題訓(xùn)練當(dāng)作最重要的一個(gè)環(huán)節(jié)。一定要上機(jī)敲代碼能解決問題作為標(biāo)準(zhǔn),別忘了,我們是要競(jìng)賽而不是講課。
C語言網(wǎng)提供由在職研發(fā)工程師或ACM藍(lán)橋杯競(jìng)賽優(yōu)秀選手錄制的視頻教程,并配有習(xí)題和答疑,點(diǎn)擊了解:
一點(diǎn)編程也不會(huì)寫的:零基礎(chǔ)C語言學(xué)練課程
解決困擾你多年的C語言疑難雜癥特性的C語言進(jìn)階課程
從零到寫出一個(gè)爬蟲的Python編程課程
只會(huì)語法寫不出代碼?手把手帶你寫100個(gè)編程真題的編程百練課程
信息學(xué)奧賽或C++選手的 必學(xué)C++課程
藍(lán)橋杯ACM、信息學(xué)奧賽的必學(xué)課程:算法競(jìng)賽課入門課程
手把手講解近五年真題的藍(lán)橋杯輔導(dǎo)課程