網(wǎng)站建設(shè)cach目錄營銷策劃培訓(xùn)
文章目錄
- 前言:
- 什么是數(shù)據(jù)結(jié)構(gòu)?什么是算法?
- 學(xué)習(xí)這個算法需要什么基礎(chǔ)?
- 學(xué)習(xí)的重點在什么地方?
- 一些可以讓你事半功倍的學(xué)習(xí)技巧
- 1.邊學(xué)邊練,適度刷題
- 2.多問、多思考、多互動
- 3.打怪升級學(xué)習(xí)法
- 4.知識需要沉淀,不要想試圖一下子掌握所有
前言:
你是否曾跟我一樣,因為看不懂數(shù)據(jù)結(jié)構(gòu)和算法,而一度懷疑是自己太笨?
實際上,很多人在第一次接觸這門課時,都會有這種感覺,覺得數(shù)據(jù)結(jié)構(gòu)和算法很抽象,晦澀難懂,宛如天書。正是這個原因,讓很多初學(xué)者對這門課望而卻步。
我個人覺得,其實真正的原因是你 沒有找到好的學(xué)習(xí)方法, 沒有抓住學(xué)習(xí)的重點。實際上,數(shù)據(jù)結(jié)構(gòu)和算法的東西并不多,常用的、基礎(chǔ)的知識點更是屈指可數(shù)。只要掌握了正確的學(xué)習(xí)方法,學(xué)起來并沒有看上去那么難,更不需要什么高智商、厚底子。
什么是數(shù)據(jù)結(jié)構(gòu)?什么是算法?
雖然我們說沒必要深挖嚴格的定義,但是這并不等于不需要理解概念。 下面我就從廣義和狹義兩個層面,來幫你理解數(shù)據(jù)結(jié)構(gòu)與算法這兩個概念。
從廣義上講,數(shù)據(jù)結(jié)構(gòu)就是指一組數(shù)據(jù)的存儲結(jié)構(gòu)。算法就是操作數(shù)據(jù)的一組方法。
圖書館儲藏書籍你肯定見過吧?為了方便查找,圖書管理員一般會將書籍分門別類進行“存儲”。按照一定規(guī)律編號,就是書籍這種“數(shù)據(jù)”的存儲結(jié)構(gòu)。
那我們?nèi)绾蝸聿檎乙槐緯?#xff1f;有很多種辦法,你當然可以一本一本地找,也可以先根據(jù)書籍類別的編號,是人文,還是科學(xué)、計算機,來定位書架,然后再依次查找?;\統(tǒng)地說,這些查找方法都是算法。
從狹義上講,是指某些著名的數(shù)據(jù)結(jié)構(gòu)和算法,比如隊列、棧、堆、二分查找、動態(tài)規(guī)劃等。這些都是前人智慧的結(jié)晶,我們可以直接拿來用。我們要講的這些經(jīng)典數(shù)據(jù)結(jié)構(gòu)和算法,都是前人從很多實際操作場景中抽象出來的,經(jīng)過非常多的求證和檢驗,可以高效地幫助我們解決很多實際的開發(fā)問題。
學(xué)習(xí)這個算法需要什么基礎(chǔ)?
看到數(shù)據(jù)結(jié)構(gòu)和算法里的“算法”兩個字,很多人就會聯(lián)想到“數(shù)學(xué)”,覺得算法會涉及到很多深奧的數(shù)學(xué)知識。那我數(shù)學(xué)基礎(chǔ)不是很好,學(xué)起來會不會很吃力啊?
數(shù)據(jù)結(jié)構(gòu)和算法課程確實會涉及一些數(shù)學(xué)方面的推理、證明,尤其是在分析某個算法的時間、空間復(fù)雜度的時候,但是這個你完全不需要擔心。
學(xué)習(xí)的重點在什么地方?
提到數(shù)據(jù)結(jié)構(gòu)和算法,很多人就很頭疼,因為這里面的內(nèi)容實在是太多了。這里,我就幫你梳理一下,應(yīng)該先學(xué)什么,后學(xué)什么。你可以對照看看,你屬于哪個階段,然后有針對性地進行學(xué)習(xí)。
想要學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)與算法, 首先要掌握一個數(shù)據(jù)結(jié)構(gòu)與算法中最重要的概念——復(fù)雜度分析。
這個概念究竟有多重要呢?可以這么說,它幾乎占了數(shù)據(jù)結(jié)構(gòu)和算法這門課的半壁江山,是數(shù)據(jù)結(jié)構(gòu)和算法學(xué)習(xí)的精髓。
搞定復(fù)雜度分析,下面就要進入 數(shù)據(jù)結(jié)構(gòu)與算法的正文內(nèi)容 了。
為了讓你對數(shù)據(jù)結(jié)構(gòu)和算法能有個全面的認識,我畫了一張圖,里面幾乎涵蓋了所有數(shù)據(jù)結(jié)構(gòu)和算法書籍中都會講到的知識點。
(圖譜內(nèi)容較多,建議長按保存后瀏覽)
一些可以讓你事半功倍的學(xué)習(xí)技巧
現(xiàn)在我就給你分享一下,專欄學(xué)習(xí)的一些技巧。掌握了這些技巧,可以讓你化被動為主動,學(xué)起來更加輕松,更加有動力!
1.邊學(xué)邊練,適度刷題
“邊學(xué)邊練”這一招非常有用。建議你每周花1~2個小時的時間,集中把這周的三節(jié)內(nèi)容涉及的數(shù)據(jù)結(jié)構(gòu)和算法,全都自己寫出來,用代碼實現(xiàn)一遍。這樣一定會比單純地看或者聽的效果要好很多!
有面試需求的同學(xué),可能會問了,那我還要不要去刷題呢?
我個人的觀點是 可以“適度”刷題,但一定不要浪費太多時間在刷題上。我們 學(xué)習(xí)的目的還是掌握,然后應(yīng)用。除非你要面試Google、Facebook這樣的公司,它們的算法題目非常非常難,必須大量刷題,才能在短期內(nèi)提升應(yīng)試正確率。
2.多問、多思考、多互動
學(xué)習(xí)最好的方法是,找到幾個人一起學(xué)習(xí),一塊兒討論切磋,有問題及時尋求老師答疑。
除此之外,如果你有疑問,你可以隨時在留言區(qū)給我留言,我只要有空就會及時回復(fù)你。不懂一點都不丟人,只要你勇敢提出來,我們一起解決了就可以了。
3.打怪升級學(xué)習(xí)法
學(xué)習(xí)的過程中,我們碰到最大的問題就是,堅持不下來。 是的,很多基礎(chǔ)課程學(xué)起來都非常枯燥。為此,我自己總結(jié)了一套“打怪升級學(xué)習(xí)法”。
游戲你肯定玩過吧?為什么很多看起來非常簡單又沒有樂趣的游戲,你會玩得不亦樂乎呢?這是因為,當你努力打到一定級別之后,每天看著自己的經(jīng)驗值、戰(zhàn)斗力在慢慢提高,那種每天都在一點一點成長的成就感就不由自主地產(chǎn)生了。
所以, 我們在枯燥的學(xué)習(xí)過程中,也可以給自己設(shè)立一個切實可行的目標,就像打怪升級一樣。
比如,每節(jié)課后都寫一篇學(xué)習(xí)筆記或者學(xué)習(xí)心得;諸如此類,你可以總結(jié)一個適合你的“打怪升級攻略”。
如果你能這樣學(xué)習(xí)一段時間,不僅能收獲到知識,你還會有意想不到的成就感。因為,這其實幫你改掉了一點學(xué)習(xí)的壞習(xí)慣。這個習(xí)慣一旦改掉了,你的人生也會變得不一樣。
4.知識需要沉淀,不要想試圖一下子掌握所有
在學(xué)習(xí)的過程中,一定會碰到“攔路虎”。如果哪個知識點沒有怎么學(xué)懂,不要著急,這是正常的。因為,想聽一遍、看一遍就把所有知識掌握,這肯定是不可能的。 學(xué)習(xí)知識的過程是反復(fù)迭代、不斷沉淀的過程。
如果碰到“攔路虎”,你可以盡情地在留言區(qū)問我,也可以先沉淀一下,過幾天再重新學(xué)一遍。所謂,書讀百遍其義自見,我覺得是很有道理的!
我講的這些學(xué)習(xí)方法,不僅僅針對咱們這一個課程的學(xué)習(xí),其實完全適用任何知識的學(xué)習(xí)過程。你可以通過這個專欄的學(xué)習(xí),實踐一下這些方法。如果效果不錯,再推廣到之后的學(xué)習(xí)過程中。