1. 程式人生 > >算法成神之路,請看這一篇!

算法成神之路,請看這一篇!

啊哈算法 算法題 美的 結構 編程之美 學習編程 字符 不同 痛苦

隨著自己寫的越來越多,慢慢的就會有人和我主動交流,現在好多人希望我寫一篇考研、就業的選擇、零基礎如何學習編程,秋招如何選擇offer、等等

我以前寫過一篇初入阿裏---10 天,我自己還想寫一篇在阿裏的三個月,將中間的點點滴滴分享給大家,還想寫一篇自己的思考、和打法戰略,以及你們 99% 的人欠缺的一種能力,還有自己的技術路線的分享,目前是 C 之旅

要寫的東西實在太多了,而我目前寫公眾號的時間,按一周時間計算,不能超過我睜眼時間的 1%,我 99% 的精力在其他地方,希望大家可以理解我,剛入職,還需要各方面能力的提升

今天在這裏著分享一波:數據結構與算法怎麽學,以及今天為什麽會寫這塊,真的是應了大部分讀者的要求

三個原因

1、數據結構與算法真的是至關重要,我可是當年在寫基礎知識的時候,放到了第一位,公眾號歷史文章都有啊,你們要好好看

2、不斷的有人私聊問我在這方面的學習經驗,我覺得是時候給你們分享一波了

3、前一段時間總有人私聊我,給我推薦什麽 google 的數據結構與算法課程,讓我報名,我都很客氣的說了一聲:謝謝啊,暫時不需要,還一直說是特別好,一定要報,我之前忙於工作,今天就統一回復一下

不是一兩個人私聊我,從半個月前到現在,大概十幾個人吧,我真的是醉了,課程好,你自己覺得合適,報名就對了,給我推薦,也沒問題,我自己不報,還一直說做活動,便宜,講的特別好,不報對我是一種巨大的損失之類的話,對於這部分人,我都直接拉黑、刪除掉了

在這裏,好多人我沒回,說一聲,我真的是不需要,我相信,我應該比絕大部分人檢索資料、信息的能力要強,以及接觸信息的渠道要多,有些事情,不是我不知道,是我不需要,選擇性的過濾了,有什麽好的,我也希望大家多多給我分享,但是不要強人所難

說真的,數據結構與算法,我的水平還算可以吧,給我點時間,準備準備,也是可以講講的,我當年在實驗室,可是經常的給學第、學妹講過這方面的課程,自己對其理解也是很深刻的

數據結構

對於我自己來說,秋招中的眾多知識點,比如:操作系統、計算機網絡、Linux、數據庫、C、C++、數據結構、算法、項目之類,我自己最最最擅長的就是數據結構與算法

舉個例子:面試官問我,紅黑樹了解嗎?

我的回答是:我會從樹--->二叉樹--->完全二叉樹--->AVL樹--->紅黑樹--->B+/B-/B*樹,以及四叉樹、八叉樹等等

我先講為什麽需要這種數據結構,出現的背景是什麽,解決什麽問題,將關於樹的整個體系系統都講出來

我在秋招的時候,是可以手寫 AVL 樹、紅黑樹、B+/B-/B*,圖的鄰接矩陣、鄰接表,最短路徑、迪傑斯特拉算法(Dijkstra算法)弗洛伊德算法(Floyd算法)等,所以自己對於數據結構是特別的自信,對於面試官問我,我都是說自己數據結構掌握的還不錯,一定的有自己擅長的技術棧,這才是你與別人不一樣的地方,是你自己的優勢所在

資料推薦

1、數據結構:

<大話數據結構>

清華大學嚴蔚敏的 <數據結構>,C C++版都有

這 2 本書都不錯,上面的適合新手入門,下面的書籍適合進階提升

視頻:

黑馬郝斌的 C 語言、數據結構,我都看過,講的是真不錯,特別適合Linux C/C++ 方向的同學去學習

C 語言:

https://www.bilibili.com/video/av8074534/?p=180

數據結構:

https://pan.baidu.com/s/1qQrHTdkvxMLSGv7G4nHWBw
密碼:4o9p

說真的,b 站還是有很多的好東西,一定要善於去發掘、去尋找好的資源

2、算法

<啊哈算法>,入門級別學習合適

<編程之美>、<算法導論>,進階提升必看

<劍指offer>,LeetCode 找工作必備,刷至少 2 遍

視頻:

推薦一個網站:七月算法

算法導論:

https://pan.baidu.com/s/1Bm34-92TwN5TbMOXfPkY6g
密碼:1i38

3、隆重推薦

適合於C/C++ java python 任何方向去學習數據結構與算法,我大學期間,學習與找工作,最常去學習的地方

牛客網,左神,應屆生找工作的,逛過牛客網的,應該都知道左神的大名吧

在看看下面的課程:

左神的一本神書:

<程序員代碼面試指南:IT名企算法與數據結構題目最優解 左程雲著>

java 寫的,有需要的可以買一本學習

我首先說明一下,我沒有給任何網站打廣告,我就是把自己當年走過的路,自己通過什麽資料,什麽視頻,在什麽網站進行學習,真實的分享給大家,有用的,你們借鑒,沒用的,覺得我這個方法過時了,完全可以不必理會的

網址:

https://www.nowcoder.com/courses/semester/algorithm-elementary

算法之路

三步走戰略:看視頻 + 看書 + 刷算法

1、

我是在大二的下半學期開始接觸的數據結構,我一開始的學習,是看書理解裏面的簡單邏輯,和聽視頻的講解,也是邊摸索邊進行學習,對於那時候的自己,完全是小白水平

大二的下學期,可以說是在找學習編程的感覺,讓自己激發興趣,興趣是最好的老師,一定的讓自己喜歡上數據結構與算法,實現了什麽數據結構或者做出了哪道算法,會對自己是一個正向的激勵,會讓自己有更大的興趣,去解決更難的問題,記住:在什麽階段做什麽難度的題

不要光刷題,一直想不出來,是很痛苦的一件事情,要學會用數據結構或者算法去解決項目中的實際問題,去做優化與改進,這塊在大三的時候,結合著來,我不建議,太有針對性的去刷題

2、

大三的上學期以及寒假,是我主要學習數據結構與算法的大半年時間,在這個階段,我逐漸脫離了視頻(視頻適合初級階段,適合於大二學習),對於數據結構與算法,學到後期,必須的靠自己,不能在一味的依賴於視頻中的講解

我是這樣的,通過看書,來實現一些數據結構,以及開始有針對性的提高自己的算法能力,數據結構,來回就那些東西,只要理清了之間的邏輯,思路清晰,反復的去實現幾遍就好,難度相對於算法還是簡單一些,數據結構,關鍵是理解數據與數據之間的存儲關系,多做筆記,整理,疏通關系

算法,我覺得是挺有難度的,挺考驗人的智商的,因為算法的實現思路,很奇特,刷過算法的,就懂,有些思路是取巧,有些是劍走偏鋒,根本想不到,只能的先去看別人的思想,理解好,在實現出來

經常看別人的思路,不要覺得很丟人,這是正常的,不會了,實在想不出來了,就去看別人的實現思路,對於同一個問題,用不同的算法實現,帶來的可是本質的區別,一定要有對時間復雜度有著極致的追求,去尋找最完美的解決方法,多思考,多花時間去理解清楚

3、

我當時,是拿小本本,對於數據結構和算法中,不清晰的地方,拿本子畫清楚,不要光想,一定要動手去畫,想明白了,理清了各種邏輯,代碼的實現是很容易的,關鍵就是擔心沒思路,腦子是亂的

當時自己的時間安排,就是每天都會抽時間去學會數據結構,做幾道算法題,去 leetcode 或者牛客網上面,從最簡單的題刷起,說白了,這個就在於堅持,和自己有沒有決心去學好

快找工作的時候,是必須要刷一波算法題的,刷的時間久了,你會慢慢的愛上它的,很有趣,很奇妙的感覺,以及帶給自己莫名的快感,慢慢的你就會刷上癮了,著迷其中

強調三點

1、需要明確一下:數據結構、算法需要掌握哪些知識點,這塊,你翻看書的目錄,以及看一些課程大綱都有寫到,那塊會很詳細的有說明

數據結構:鏈表、棧、隊列、字符串、矩陣、樹、圖

算法:排序、字符串、數組、遞歸、五大算法(動態規劃、貪心。。。)

2、對於數據結構與算法的實現,不要糾結於C、C++、java、python、語言是其次,關鍵是實現的細節以及方法,選一門自己喜歡的語言,去學習數據結構與算法就好

3、書、視頻,我都已經推薦過了,對於小白的話,建議先看看視頻,理解理解,多聽聽別人思路,看看是怎麽解題的,初步階段,一定要選擇簡單的、自己能很快理解的去學習,由淺入深,慢慢的給自己信心

我想說的

算法的學習,別人幫不了你多少,主要還是的靠自己悟,靠自己花時間去理解,師傅領進門,修行在個人,算法討論,思路分享,去牛客網看看,各路大神,各種解決思路,你一定會有進步的

一開始,學習數據結構與算法,是枯燥的,是乏味的,因為你還不夠了解到它的魅力,但是時間久了,你真的會愛上它,離不開它,與你血肉相連,伴你編程終生,在以後的學習道路中(不僅僅是技術方面),都會潛移默化的對你產生影響

數據結構與算法,給我帶來的是,邏輯縝密性的提升,對我的性格、做人都產生了影響,我是強烈的建議,大家一定的好好學習,悟出自己的學習之道,那麽你的路將會走的更遠,更久

算法成神之路,請看這一篇!