今年年后立了一個(gè)Flag(2021學(xué)習(xí)計(jì)劃,新的開(kāi)始),是希望整理一條路線,讓算法學(xué)習(xí)過(guò)程更加有梯度,讓算法入門(mén)不再那么艱難,在寫(xiě)完那篇文章之后,我便開(kāi)始著手規(guī)劃如何去做這樣的一件事情,想來(lái)想去,感覺(jué)靠譜一點(diǎn)的做法是做一個(gè)開(kāi)源項(xiàng)目,這個(gè)項(xiàng)目能夠整合目前所有OJ的題目資源,然后分門(mén)別類(lèi)的整理一條從易到難的路線。
開(kāi)源項(xiàng)目名稱叫做算法·進(jìn)階石(algorithm-stone),寓意學(xué)習(xí)算法是一個(gè)長(zhǎng)遠(yuǎn)的事情,每一步都是一小塊石階,通過(guò)這些小石塊最終能走的很遠(yuǎn)。
開(kāi)源地址:https://github.com/acm-clan/algorithm-stone
可以點(diǎn)擊文章左下方的“閱讀原文”跳轉(zhuǎn)到項(xiàng)目地址。
路線圖是svg圖片,如下圖所示:
首先是按平臺(tái),然后按模塊進(jìn)行分類(lèi),每個(gè)模塊又有很多小的分類(lèi),上圖中是動(dòng)態(tài)規(guī)劃的分類(lèi),再來(lái)看一個(gè)樹(shù)的分類(lèi):
圖片中打√的圖標(biāo)表示這個(gè)題目已經(jīng)有寫(xiě)代碼,還有一個(gè)題解的圖標(biāo),如下圖:
這種有小瓶子的圖標(biāo)表示這個(gè)題寫(xiě)了題解,點(diǎn)擊svg圖片上的題目可以跳轉(zhuǎn)到題目頁(yè)面,點(diǎn)擊小瓶子可以跳轉(zhuǎn)到題解頁(yè)面。
路線圖最大的作用是降低學(xué)習(xí)曲線梯度,我們學(xué)習(xí)數(shù)學(xué)、物理等學(xué)科時(shí)會(huì)做很多例題和練習(xí)題,這些題目是經(jīng)過(guò)很多年很多老師精心整理編排的,所以我們才不會(huì)在學(xué)習(xí)過(guò)程中有太強(qiáng)的挫敗感,但是算法不一樣,算法思路千差萬(wàn)別,題目之間難易跨度經(jīng)常會(huì)很大,導(dǎo)致做了A題不會(huì)B題,做了B題不會(huì)C題,對(duì)于初學(xué)者來(lái)說(shuō)要想走過(guò)最開(kāi)始的那段路很困難。本項(xiàng)目就是整理題目,將題目按簡(jiǎn)單到難的順序進(jìn)行編排,盡可能的讓每一步都變小,不用擔(dān)心跨度太大。
我們學(xué)習(xí)算法會(huì)接觸各種各樣的書(shū)籍,以及很多網(wǎng)絡(luò)文章,但是不管是書(shū)籍還是網(wǎng)絡(luò)文章,都不可能整合所有的題目,開(kāi)源項(xiàng)目不同,開(kāi)源項(xiàng)目可以一直維護(hù)并且整合所有資源,并且采用程序自動(dòng)生成路線圖,不是書(shū)籍和文章能夠做到的。
本項(xiàng)目第一步是整理Leetcode算法,當(dāng)然,我的計(jì)劃里肯定不止是Leetcode算法,因?yàn)槲业墓娞?hào)名稱是《ACM算法日?!?,終極目標(biāo)還是的ACM競(jìng)賽算法,Leetcode算是起始模塊。
Leetcode的題目質(zhì)量比較高,可以說(shuō)是國(guó)內(nèi)參與人數(shù)最多的算法競(jìng)賽,也能得到所有大公司的認(rèn)可,很多公司都在Leetcode上面合作舉行招聘周賽。所以這里優(yōu)先使用這個(gè)平臺(tái)無(wú)可厚非,這樣可以優(yōu)先照顧需求最多的需要學(xué)習(xí)算法的童鞋。
李連杰的電影《霍元甲》中有段話令人印象深刻:
想練武,就得下功夫,
什么是功夫
功夫...功夫是要時(shí)間磨練出來(lái)的,
你講擋擋擋,
兩三年的貓腳功夫,
這一拳二十年的功夫!
你們擋得住嗎?!
練功夫如此,算法亦然,學(xué)習(xí)算法是一個(gè)由量變到質(zhì)變的過(guò)程,不是你寫(xiě)幾個(gè)題練幾個(gè)月就能明顯提高的事情,天資卓越的人可能只需要幾年,但是大部分可能是學(xué)了很久還是個(gè)新手。本項(xiàng)目就是為了將這樣一個(gè)超長(zhǎng)時(shí)間的學(xué)習(xí)過(guò)程可以統(tǒng)一的放到一起,既可以輔助學(xué)習(xí),也可以作為個(gè)人記錄。
這個(gè)路線圖一開(kāi)始主要針對(duì)算法初學(xué)者以及準(zhǔn)備跳槽找工作的人,讓初學(xué)者有一個(gè)清晰地學(xué)習(xí)路線規(guī)劃。如果你是一名專業(yè)的acmer,你也可以使用這個(gè)項(xiàng)目,但是由于初期只會(huì)整理Leetcode的題目,你可能得不到太多有用的cf路線規(guī)劃,除非有人有時(shí)間去做這個(gè)事情,只是我接觸的acmer都比較忙,整理工作量巨大,所以暫時(shí)不期望有人去做這個(gè)事情。這個(gè)開(kāi)源項(xiàng)目提供了一個(gè)基本的機(jī)制,能夠?qū)㈩}目路線繪制成svg圖片,acmer可以用這個(gè)整理自己的學(xué)習(xí)路線。
如果你是算法初學(xué)者,這個(gè)路線圖未來(lái)將是你所能見(jiàn)到的最全的刷題地圖,網(wǎng)絡(luò)上有大量的算法題解和算法題合集,但是不可能有文章能將1700多道題整合起來(lái),但是我們的地圖卻可以包含幾千道題甚至幾萬(wàn)道題,只要時(shí)間一直流轉(zhuǎn),這個(gè)開(kāi)源項(xiàng)目就能整合無(wú)數(shù)的算法題。
如果你是算法愛(ài)好者或者準(zhǔn)備跳槽找工作,你也可以使用這個(gè)開(kāi)源項(xiàng)目進(jìn)行刷題,不管你算法水平怎樣,都可以找到你自己的路線。
現(xiàn)在項(xiàng)目還處于起步階段,只是將Flag變成了可執(zhí)行的方案,接下來(lái)要做的是整理所有的leetcode題目,這個(gè)過(guò)程可能需要半年到一年時(shí)間,大部分題目都是我來(lái)整理,首先是整理路線,然后是做題和整理題解,整理路線只需要知道題意、分類(lèi)和解題難度,做題和寫(xiě)題解需要更多時(shí)間。
如果leetcode的題目整理完了,接下來(lái)會(huì)將重心放到cf這樣的高質(zhì)量刷題平臺(tái),cf是英文的,所以速度會(huì)更慢一些。但是只要有時(shí)間,就會(huì)一直完善下去。
你可以在項(xiàng)目主頁(yè)上找到需要的幫助信息,如果你還想自己運(yùn)行路線圖繪制程序,還可以看看開(kāi)發(fā)文檔,新手需要掌握的git和vscode技能我也寫(xiě)了2篇幫助文章:
用顏值超高的github desktop參與開(kāi)源項(xiàng)目
如果你覺(jué)得這個(gè)思路不錯(cuò)就幫我點(diǎn)個(gè)star吧,我會(huì)盡力讓這個(gè)項(xiàng)目越來(lái)越完善,如果你有什么意見(jiàn)或者提議,可以隨時(shí)聯(lián)系我,微信號(hào)dansen-xia
聯(lián)系客服