在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

剛入門的同學如何學好算法

算法與數據結構 ? 來源:算法與數據結構 ? 作者:算法與數據結構 ? 2020-10-14 17:51 ? 次閱讀

如何學習算法的相關文章,大家估計也見過不少,每個人的學習方法都不盡相同,這很正常,并且,對于不同的選手來說,例如打 ACM 的玩家不打比賽的玩家來說,訓練的方式也有不少差異,所以別人所說的學習方式,更多的是作為你的一種參考。

在我的四年大學里,花在學習數據結構/算法的時間可以說是最多的了,不過我并不后悔,因為算法基礎的沉淀,給我后面的成長帶來了很多幫助,所以今天這篇文章,帥地會根據自己的理解,談一談如何學習算法,如果你是這方面的小白的話,還是可以參考一下。

不過,在寫之前,我想先回答幾個問題,或許對于那些剛入門的同學,有些許幫助。

一、簡單回答幾個問題

1、有必要學算法嗎?

很多過來人可能都會跟你說,算法沒必要學,你又不是算法崗,工作其實就天天 crud,用啥都是封裝好的,學了也用不到,慢慢也就忘了。

這篇文章不是來跟你辯論有沒有必要學算法的,我就做個簡單的回答,我的答案是,有必要學一學,一個現實且勢利的原因,估計就是 ----- 大廠都喜歡考察算法了,不信你去問問剛剛參加過 2020 校招的同學,我自己也參加過 2019 的秋招,算法考察,基本無處不在,如果想要獲得面試機會,那么就得筆試,而筆試,大部分公司都是編程題,即算法題,而且,面試中也會經常問到算法,數據結構。顯然,從找公司的角度看,不學算法你會失去很多面試的機會。然而,更重要的還是,程序 = 數據結構 + 算法,算法基本功打好,可以讓我們走的更遠。

2、學算法好慢/好難,是我不夠聰明不適合學算法嗎?

答不是的,如果只是學習下常見算法,以后應付下面試/筆試 + 分析下工作遇到的一些問題,那么我覺得,還論不到天賦來做審判,這絕對不是雞湯,當然,如果你想打 ACM,拿各種獎的,那我就不大清楚了。

簡單的說,學算法好慢/好難主要還是你代碼寫的太少了,做的題太少了,雖然有些人學起來會慢一些,特別是入門那會,但一旦過了這道坎,學起來就會快很多,所以,不要還沒學之前,或者學了一時半會覺得自己沒有 get 到點,就否定自己。

二、入門數據結構與算法

我是學習了《數據結構與算法分析》這本書之后,再去學習各種算法思想 + 刷題的,所以我覺得,入門算法的第一步,是在你學會了一門語言之后(帥地當時學的是 C 語言),靜下心來啃一本數據結構與算法的書籍,例如我說的《數據結構與算法分析:xx語言描述版》,也可以是《大話數據結構》等等。

怎么學這本書呢?

我覺得,對于剛剛入門的選手來說,沒啥技巧,也不要迷戀于各種快捷的方法,咱們老實點,當個普通人,就跟著書學,按照順序學就可以了,然后把里面例子的代碼,都至少打一遍,當然,還需要跑通,結果要符合預期,如果不符合,就調試到符合預期。

注意,上面那句話我打了顏色,說明這句話非常重要,千萬不要覺得自己理解了,就不寫代碼了,例如覺得自己理解了鏈表的增刪改,然后就不寫代碼了,在編程這一塊,感覺自己理解,和成功實現且符合預期,特么就是兩回事。

之后一般每一章都會有習題,不需要全部做,自己挑幾道做就好了,就算是一眼就秒殺知道怎么做的,其實也可以實現一遍,如果不懂,可以找答案,但是一定要自己在電腦上把代碼敲打出來,然后跑通。當你把書上 90% 的代碼例子跑通,那么,這本書有一半的知識,就是你的了。

這里我說下,你們找的書籍,最好是有完整代碼實現的,因為有些書籍,為了具有通用性或者嚴謹性,是采用偽代碼來實現的,我不建議初學者用這類書籍,因為容易一臉蒙蔽,代碼也不好跑通驗證,所以如果你覺得自己是普通人,那么就找一本有完整代碼的書籍來看吧,然后乖乖把代碼的代碼敲打跑通起來。

不要眼高手低,當你積累到一定的代碼數量,你就會慢慢來感覺了。

當你學完了鏈表、隊列、棧、二叉樹、哈希表等最基本的數據結構,其實你就算入門了,這個時候其實你已經具備了去 leetcode 刷題的能力了。不過在學習過程中,特別是到了圖那部分,會涉及到很多算法,例如最短路徑,深度搜索和廣度搜索…當然,還有二叉樹的各種遍歷等。

如果你對遞歸一點也不懂,那么你會被虐的,腦袋也容易被爆棧,因為,遞歸真的無處不在,這也引出了我覺得入門算法非常重要的一個算法思想 --- 遞歸算法。

三、刷題之前的一些準備

如果你連最基本的數據結構,例如鏈表,隊列,棧,二叉樹都沒有接觸過,那么我是不建議你去 leetcode 刷題的,所以我上面先說了先入門一下數據結構與算法,當你學習了這些基礎的數據結構之后,其實已經具備了刷題的能力了。

不過,我還是希望你能在學習一些算法思想,一般就這幾種

1、遞歸

2、枚舉

3、貪心

4、回溯

5、動態規劃

但是,其中最重要的,我覺得就是遞歸,其他的幾種算法,也都會有遞歸的影子,并且我剛才說圖相關算法、二叉樹的遍歷等,也都包含遞歸的使用。

所以,在你刷題之前,或者在學習二叉樹、圖相關算法遇到遞歸的時候,我希望你能靜下心來,去學一學遞歸,我也會告訴你,對于初學者,遞歸很難,我是被無數次折騰,無數次看答案似懂非懂之后,才突然醒悟了。

你不需要把它學的很精通,但是你要懂一些基本的遞歸題,知道遞歸是怎么一回事,例如最簡單的斐波那契數列得會用遞歸做吧?階乘也得會吧(雖然不是最優解)。

所以,死磕入門數據結構,可以學習下一些算法思想,而遞歸,你必須得入門,至于動態規劃、回溯,我覺得慢點學也沒有,可以后面刷題遇到時在學,而枚舉、貪心,相對比較簡單。

關于遞歸的,可以看我之前的一遍入門級的文章:為什么你學不會遞歸?告別遞歸,談談我的一些經驗

評價還是很好,之后找些簡單的題做,例如在 LintCode 那些 easy 的題(leetcode 和 lintcode 類似,類似于一個中文版,一個英文版)

四、如何刷題

終于,到了刷題這一部分了,如果要說學算法的捷徑,那么刷題便是最好的捷徑,如果你刷的題很少,達不到一定的量,那么再多的捷徑,估計也沒啥用,只有在滿足一定題量的情況下,才適合來談論所謂的技巧。

1、先說一說筆試

不過在刷題之前我想先說一說筆試,如果筆試不考算法,面試也不考算法,那么我可能在學習算法的這條路上,會少了很多的積極性,你可能會覺得我很功利,但是我覺得,帶著功利性的目的去學習算法,也是完全沒問題的。

在校招的筆試中,其實這些筆試題還是挺難的,你在 leectode 可以做出 hard 級別的題,但在筆試中,可能連 medium 級別的都做不出,因為筆試的題,都比較靈活,基本都會通過實際的例子來引出一道題,你可能不知道要使用哪種方法來做比較好,有些還是多種方法的結合。

對于筆試的題型,我之前也總結過,無非是以下幾種

(1)、基本數據結構的考察:這類題我覺得是比較簡單的,主要考場基本數據結構的操作,例如二叉樹的層序遍歷,鏈表的逆序等,當然,它不會直接告訴你,讓你來逆序或者遍歷。

(2)、某種算法思想的掌握:這類題你掌握了某種算法思想,就會比較容易,如果不懂,那就涼涼了。例如動態規劃、回溯、枚舉、深度/廣度、貪心、二分等。其中,我覺得動態規劃考的挺多,還要就是 回溯+深度/廣度。

(3)、邊界條件的考察:這類型的題,估計你一看就有思路,知道該怎么做,但是,它的邊界條件特別多,需要分很多種情況來討論,特別容易出錯,有時候會讓人陷進去,越做越復雜,這類題主要考場你的思維嚴謹程度。

(4)、找規律、數學公式:這類型的題,主要是根據數據之間的一些關系,來找一些規律,進而推出他們的通用公式,就像我們高中時,找數列的同項一樣。

2、按分類刷題

上面我列了筆試的題型,并且跟你說了筆試是真的挺難的,那么對于我個算法小白來說,該如何做好呢?

我的建議是,分類刷題,階段性總結。例如最開始可以在 LintCode 按照鏈表/二叉樹/遞歸等這些標簽來刷,因為這樣可以讓你深入掌握每一種方法。

當然,筆試的題之所以難,是因為我們往往不知道用哪一種方法做好,或者說具體屬于哪一種題型,那么還有必要分類刷題嗎?

答是有必要的,只有當你熟悉每一種題型,你才能靈活使用他們,進而解決各類復雜的題,這就如同你在練功夫的時候,前期你需要把每個招式都打扎實了,之后才能靈活把各個招式連接起來,融合貫通。刷題也是一樣,前期先分類,把每個題型掌握起來,后期咱們再隨機練習,慢慢著就能靈活應用了。

不過,每次刷了一部分題型之后,我覺得還有必要做一些總結,或者說總結一些刷題模版,例如對于二分法查找,其實好幾種題型總結起來,就是開閉區間的組合,你可以把他們總結起來,例如什么時候用開區間,什么時候用閉區間。

有人可能會說,模版是死的,真的有必要總結嗎?

我覺得有必要總結,但沒必要死記,總結,只是加深你的理解,當然,如果你在做題的時候,剛好記住了自己的模版,可以直接套上去,那肯定更好。但是,就算忘了也沒事,通過自己的總結,你其實是知道怎么做的了,只是還需要你多花一點時間,快速模擬討論下各種情況,一樣能夠做出來的。

也就是說,最開始刷題的時候,可以分類刷題,并且階段性總結,如果你是初學者,可以先從簡單的題做起,例如我剛才說的,簡單的遞歸題,之后一些二叉樹、鏈表的題,因為你可能剛剛學習數據結構不久,剛好可以加深你的理解。

五、刷題時的一些注意點

當我們在做一道題的時候,可能會遇到兩種情況,一種是這道題,特么秒殺,一眼就懂思路;一種是,一臉蒙蔽,太難了吧。

一眼就懂思路,有必要做嗎?

我的答案是,有必要做。千萬不要眼高手低,看著簡單,做起來不一定簡單,AC 之后,你還要去討論區看看大佬們是怎么做的,因為有些人的代碼,真的寫的很簡潔,看著就很舒服,咱們可以多學一學的,當然,也有可能那個人就是你自己。

代碼寫多了,有時候,你就會發現自己真的變強了,寫起代碼來,bug 也越來越少了,分分鐘 AC 一道題。

盡量最優解

其實對于很多題,如果不看時間復雜度和空間復雜度,單單只是 AC,那還是很容易的,但是一提交,你的代碼可能只打敗了百分之幾的人,顯然我們是不能滿足于這種代碼的。

當你做一道題時,一開始可以先暴力做,但后面,還得想想該如何優化,想不出也沒事,可以討論區找空間/時間復雜度更低的代碼,或者直接搜索引擎搜索,一般都能搜到別人的代碼。

之后跟著別人的代碼,自己再實現一波,盡可能把最優解的代碼實現起來。千萬不要為了 AC 而 AC,不是 AC 的越多就越強的,當你入門之后,更多的是要總結方法,尋找高效率的代碼。

六、總結

說到算法的學習方式,對我來說,真的沒有什么捷徑之類的,就是像我上面說的,先找本書死磕入門數據結構,就跟著書的例子,把例子跑起來就好了,跑起來也不是一件簡單的事情。之后就去接觸下一些算法思想,后面就可以分類刷題了,刷題就是最好的捷徑了。

當然,不要 AC 之后就完事了,應該盡可能尋找最優解,當你積累了一定的題量,那么你真的會發現自己變強了,突然感覺遞歸也就那么一回事。

我學習算法時,基本看書 + 網上刷題,也很少看視頻,因為我覺得看視頻比較花時間,不過我之前在班里還是看到部分人喜歡看視頻的,至于看書好還是看視頻好,這個看個人喜好吧,也沒有說哪種就一定更好。

責任編輯:xj

原文標題:談一談「如何學好算法」

文章出處:【微信公眾號:算法與數據結構】歡迎添加關注!文章轉載請注明出處。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 算法
    +關注

    關注

    23

    文章

    4631

    瀏覽量

    93438
  • 編程
    +關注

    關注

    88

    文章

    3640

    瀏覽量

    94042

原文標題:談一談「如何學好算法」

文章出處:【微信號:TheAlgorithm,微信公眾號:算法與數據結構】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    DeepSeek:從入門到精通

    DeepSeek:從入門到精通
    發表于 02-08 18:00 ?36次下載

    AIGC入門及鴻蒙入門

    人工智能生成內容(AIGC)和鴻蒙系統是當前科技領域的兩個熱門話題。以下是對它們的入門指南: AIGC入門 1. 基礎概念: AIGC,全稱Artificial Intelligence
    發表于 01-13 10:32

    什么是ACLR?

    在射頻設計中,我們經常會遇到各種各樣的系統指標,比如EVM,VSWR,NF,ACLR等等,這么多的縮寫搞得人云里霧里,尤其是對很多入門同學來說,不懂這些縮寫的意思,有時候很難理解大牛們在說
    的頭像 發表于 12-24 13:57 ?454次閱讀
    什么是ACLR?

    科研新體驗:劉同學深度試用ADTF軟件反饋揭曉!

    科研工具再揭秘!ADTF如何賦能科研工作?本文劉同學親測分享,大贊其便捷設計,靈活高效,詳盡展現ADTF在高校科研中的實際應用與潛在價值。
    的頭像 發表于 11-20 09:49 ?3223次閱讀
    科研新體驗:劉<b class='flag-5'>同學</b>深度試用ADTF軟件反饋揭曉!

    WinCC 7.5入門指南

    WinCC 7.5入門指南
    發表于 10-21 10:37 ?6次下載

    NHET入門

    電子發燒友網站提供《NHET入門.pdf》資料免費下載
    發表于 10-14 11:26 ?0次下載
    NHET<b class='flag-5'>入門</b>

    客戶來訪|?易高科領導來訪漫途科技

    我司與安徽易高科信息技術有限公司(以下簡稱“易高科”)的交流合作,如同一股清新的春風,為智慧農業的發展注入了新的活力。近日,易高科查總與某農業農村局專家,蒞臨我司進行考察交流,雙方就智慧農業
    的頭像 發表于 10-10 10:43 ?466次閱讀
    客戶來訪|?易<b class='flag-5'>剛</b>高科領導來訪漫途科技

    名單公布!【書籍評測活動NO.46】從算法到電路 | 數字芯片算法的電路實現

    設計基本算法電路和復雜算法電路的能力。 作者簡介: 本書作者皮特派畢業于廈門大學通信系,先后供職于多家知名芯片公司和創業團隊,從事數字電路架構和算法設計工作。著有暢銷IC設計書籍《數字IC設計
    發表于 10-09 13:43

    電機庫使用入門(一)

    我們主要以使用為主,過程中穿插講述一下基本的概念,方便新入門同學閱讀,對基礎知識比較了解的同學可以跳過這一部分。我們會按照有感foc,無感foc,硬件電流環這樣的
    的頭像 發表于 07-02 08:17 ?2070次閱讀
    電機庫使用<b class='flag-5'>入門</b>(一)

    小米AI助手小愛同學接入字節豆包大模型

    在人工智能領域的浪潮中,小米旗下的人工智能助手“小愛同學”再次邁出堅實的一步,與字節跳動旗下的火山引擎達成深度戰略合作。雙方基于火山引擎精心打造的豆包大模型,共同為用戶帶來了更為智能、高效的AI交互體驗。
    的頭像 發表于 06-14 17:26 ?2650次閱讀

    阿里云通義大模型助力“小愛同學”強化多模態AI生成能力

    小米的人工智能助手“小愛同學”近期與阿里云通義大模型達成戰略合作,共同提升其多模態AI生成能力,特別是在圖片生成與理解方面。這次合作不僅將強化“小愛同學”的功能,還將在小米的多個產品線,包括小米汽車和手機等設備上得到實際應用。
    的頭像 發表于 05-13 09:19 ?960次閱讀

    HyperLynx入門指南

    HyperLynx入門指南
    發表于 05-06 10:17 ?4次下載

    CW32快速開發入門

    CW32快速開發入門
    的頭像 發表于 04-24 18:56 ?2146次閱讀
    CW32快速開發<b class='flag-5'>入門</b>

    第三部:信號、電路與系統新說課程啟動

    模擬電路入門很難,尤其是運算放大器小信號采集方向,給入門同學帶來了很多煩惱,無法系統性分析問題、優化電路性能。 模擬電路采集的是信號,一定要深刻理解信號的特點,才能設計出正確的電路
    的頭像 發表于 04-07 08:41 ?658次閱讀
    第三部:信號、電路與系統新說課程啟動

    Purple Pi 帶你7天入門OpenHarmony

    大家好!我是一名入門OpenHarmony的小白,很高興能夠和大家一起學習OpenHarmony,在本系列文章里,我將分享使用PurplePiOH從零開始學習開源鴻蒙的整個流程,并提供每一步需要
    的頭像 發表于 02-19 13:20 ?551次閱讀
    Purple Pi 帶你7天<b class='flag-5'>入門</b>OpenHarmony
    主站蜘蛛池模板: 中文字幕一区二区三区有限公司 | 婷婷色在线视频 | 国产黄色a三级三级三级 | 日本黄色高清视频 | 福利在线看片 | 特级毛片aaaa级毛片免费 | 亚洲成年人免费网站 | 欧美成人精品久久精品 | cao草棚视频网址成人 | 天堂网在线资源www种子 | 色域综合 | jlzzjlzz亚洲大全 | 丁香激情综合 | 免费看黄色毛片 | 国模大尺度酒店私拍视频拍拍 | 天天网综合 | a爱视频 | 中文在线最新版天堂bt | 成人免费播放视频777777 | 在线看逼 | 三级视频在线播放线观看 | 天天干天天拍天天射天天添天天爱 | 久久这里只有精品任你色 | 天天射天天干天天色 | 岛国毛片一级一级特级毛片 | 福利在线观看 | 最新激情网站 | 欧美性69 | 亚洲 欧美 另类 综合 日韩 | 午夜小片| 福利片午夜 | 成人欧美一区二区三区 | 国产一区二区三区 韩国女主播 | 天天做天天爱天天综合网2021 | 午夜影院亚洲 | 美女扒开内裤无遮挡禁18 | 日本a级片在线观看 | 色资源网 | 亚欧成人中文字幕一区 | 女人被男人免费播放网站 | 免费在线不卡视频 |