如何學好算法?
怎麼學算法比較好
你是要做理論還是編程?
不管怎樣從技術背景,基礎原理下手,先學習一個常用算法,再逐漸學習多個比較好
望採納
算法怎麼學
1、先學好一種熱門的編程語言基礎,一定要精通;
2、學好數學,由淺入深,高等數學、線性代數、離散數學、概率論、數理統計、計算方法等等;
3、主要培養邏輯能力,可以去網上下載或參考經典算法題目的解法和思路,因為算數的部分計算機能搞定~
4、不要束縛自己的思維,頭腦風暴一般,隨意思考,算法想怎麼寫就怎麼寫,你會發現突然就寫對了,但不知道為什麼會對=。=
算法該怎麼學?感覺好難
很多人都會說&quo丹;學一樣東西難",一開始我也覺得很大程度是因為每個人的智力水平等等不可改變的因素. 但是後來我發現,有一個東西也很能決定一個人是否會覺得一樣東西難學,那就是理解方式.
一件事物通過不同的途徑讓一個人理解效果差異是很大的.就比如說數學裡面教你一個圓,有的人看到一個圓就能很快明白什麼是圓,有的人卻非得看到x^2+y^2 = r^2這種式子才有感覺,甚至有的人需要"到定點距離為定長的點集"這種描述才能理解. 那這個不一定是說誰的智力水平更高,而是因為他們對不同形式事物的敏感程度不同.
回到算法上來.算法本質是一種數學.他是抽象的操作集合.(看這麼說你可能會覺得不知所云,但是如果我說他只是一種解決問題的辦法可能就好理解). 所以很多書,論文,或者很多老師教的都是一種數學描述的算法,這樣子的算法就我個人而言相當難理解,看了就想到代數高數什麼的.. 但是如果找一個圖文並茂的解釋,或者找個人一步一步把一個算法給你我比劃一下,我立刻就能理解. 說白了,就是你一定要找很多很多不同的角度來嘗試接受一種東西,你一定可以找到一種你相當敏感的角度,用這個角度學習你就會遊刃有餘. 智力因素並沒有太大影響的.
具體點說,你可以試試這幾種不同的角度.
直接看數學形式的算法.我個人最無法接受的形式,但是有人很喜歡..例子就是算法導論上面那種描述.
聽一般語言描述,最理想是找一個明白的人,給你用通俗語言講講原理.這個不錯,很多我是這麼理解的
圖形理解,叫理解的人給你畫插圖,分佈圖,結構圖等等,來分解一個算法,找到他的思路.說到圖,有一個人的博客這方面做得很好:matrix67.
程序理解.找到一種算法的實現程序,對著程序理解,可以嘗試分佈運行,觀察一下變量的變化,這樣來理解算法.
實在太難的算法,可以邊寫邊改來理解.當時我學習插頭dp的時候就是這樣,不論怎麼總是一知半解,最後硬著頭皮寫了一遍,改了很久,但是改過了的時候,也就真的明白了是怎麼回事了.
也許還有別的什麼辦法,因為人對事物的接受角度實在是太多了.多想想你平時學習什麼比較容易,找出你最敏感的理解方式就行了.
有感而發說的一些東西,不一定都是正確的,只供參考,歡迎指正.
怎麼學好數據結構與算法,好難啊
先學好語言,這是學習的基礎。
有些算法書上在學習語言部分會有一點算法包含在內,比如遞歸。
要學算法,先練好遞歸,這會對你深入學習其他算法有很大的幫助。
樹形結構是數據結構中較難的部分,也是數據結構的基礎,主要靠練。
還有就是,不要總是學習理論,合上書本認真地把算法用代碼和實現是最重要的。
不要背代碼,沒用的,注重理解。
剛開始會有些不習慣,學得多了就好了。
-------------------------------------------------------------------------------------------
內容出自www.zhihu.com/question/19830721
希望對你有幫助
1. 程序 = 數據結構 + 算法
2. 學習:剛開始看時肯定會有些不清楚,因為你是剛學完 語言,對語言還不太熟練。你學習數據結構時找一本經典的數據結構書,看完一個數據結構後用語言將其實現。開始時的實現肯定會有困難,那麼請百度下會有很多優秀的數據結構源碼的。你可以模仿這些優秀的源碼寫。請記住一定要開始時自己實現,當被卡住了就看一下源碼,看看自己被卡在了什麼地方,引起注意以便下次自己會寫。當你把書上的數據結構源碼寫了一遍之後,你已經超過了你絕大部分的同學。
3. 運用: 這時你就需要對這些數據結構加以運用,你可以在百度上搜索“某個數據結構 + ACM”,你就會看到一些題目,這些題目都是數據結構的運用,甚至有這些數據結構的變形。每種數據結構做5題左右。期間你還會遇到程序另一重要的方面算法,有不會的就 百度。 期間可以學到的數據結構和算法做小軟件玩兒,例如壓縮軟件,五子棋之類的。
4. 深入: 當你完成了第三步你已經是你們學校的小高手了。這時看你的方向如果這時發現自己喜歡 ACM 的話就去搞 ACM,如果不感興趣,就找自己感興趣的技術學習一下,做幾個完整的項目,例如寫個編譯器,或者實現一個簡單的編程語言。
總結:無論選擇哪條道路只要按照這些做了,你畢業後肯定會成為搶手貨。
-------------------------------------------------------------------------------------------
也就這樣了:
時間並不會因為你的迷茫和遲疑而停留,
就在你看這篇文章的同時,
不知道有多少人在冥思苦想,
在為算法廢寢忘食,
不知道有多少人在狂熱地拍著代碼,
不知道又有多少提交一遍又一遍地刷新著OJ的status頁面……
沒有誰生來就是神牛,
而千里之行,
始於足下!
我期盼NOIP一等榜上有你(雖然我不知道你叫什麼)。
如何學習一個新算法
文前聲明:這篇文章沒有一個觀點是自己的,我只是把同事大牛的觀點給彙總了起來。
接觸算法到現在滿打滿算也就兩年的時間,但是甚至就在兩個月前我還處於揀起一篇paper就開始讀,然後去實現他們的算法。然後去測試一下效果好不好。很久的時間下來,我都感覺自己其實沒什麼太大的進步,甚至感覺遇到了一個瓶頸。因為我覺得自己其實並沒有真的對算法知識形成一個體系,除了書上講的皮毛之外,自己其實一直在沉迷於實現一些算法的奇技淫巧,而看著身邊的那些PHD們,我有的除了自卑也沒剩下其他的了。於是我開始請教那些大神級同事們,於是自己總結了一下,也在這段時間來試用了一個多月的時間,發現其實效果不錯,那麼就在這裡分享下,算是給自己一個里程碑式的紀念,也希望能幫到和我以前一樣處在迷茫期的大家~
來到算法組兩年的時間有三個人是對我影響最大的,我分別說下每個人對我說的話吧:
1. 還記得我剛來算法組的時候,我不懂TFIDF是什麼,更不要說什麼SVD,LDA了聽都沒聽過,不懂user-based和item-based的區別,甚至連貝葉斯公式都寫不全。在最初的一段時間,我看別人的代碼,半懂不懂地聽組會分享,然後實現一個又一個現在看來很幼稚的算法,感覺進步是飛速的。接過來一個算法需求,我就去網上找篇paper,然後把算法給實現了就丟給產品線用。
這個時候,同事A對我講,“算法工程師不是懂一些數學,會寫些算法就行了,算法工程師最重要的技能,在於如何定義問題,然後接下來才是如何解決這個問題。”從那以後,當面臨一個需求時,我更願意分析這個需求的關鍵點在哪,然後從大腦裡搜索已有的東西能不能解決這個問題,比如FM的算法缺乏多樣性,那麼我想一下我看過的解決多樣性的paper都有什麼?能不能用在這個上面。如果不能,我再對應去搜問題的關鍵字,而不是算法的關鍵字。
2. 轉眼間一年過去了,雖說看過的paper不夠多,但是可以應付大部分的需求了。但是我開始迷茫起來,我覺得自己在實現一個又一個的算法trick,知道一個算法可以用,我就去網上down一個對應的算法包,然後把數據丟進去。沒了......那麼我的出路到底在哪?我的核心競爭力在哪?在於知道這麼個東西,然後變成跑準備數據的麼?
第五,遞歸再去看這個缺點是否有其他的研究者已經解決掉了。
1. 學習目的,擴展思路,如果處於這種目的,理解paper的精髓是最重要的。
2. 解決實際問題。那麼應該丟棄的觀點是我最初那樣拿過來一篇paper也沒理解透徹也不知道能不能解決問題,也不知道到底是不是可行,就先實現了再說。勞民傷財~
最後,補充一個同事D,無意間的話讓我發覺自己要變得更優秀才行:
同事D在搜Resys,有一個快照上面寫著:本科生Resys十佳論文。同事扭頭對我說,靠,現在本科生都可以發Resys paper了。讓我意識到了自己其實在原本上差距有多大,我要付出更大的努力才能彌補這些也許別人覺得無法跨越的鴻溝。
學好算法需要什麼基礎?
思維
如何學好算法設計於分析?
數學不是必須學好的,但是學好數學對理解和編寫算法特別有用的;至於學習編程,需要一下三點(個人見解,僅供參考):學習,思考,練習;學習(也就是看書讀資料)需要儘可能快速;思考是必不可少的,思考了才能理解創新;練習是思考付諸實踐的證明,只有多動手練習,才能真正掌握一些技術和技能。
學好算法對一個程序員來說是必須的嗎
程序員最重要的是學習能力, 算法只是其中一環,至於是否必須我的看法是不一定,只需要理解掌握基本算法即可, 因為很多算法都已經現成集中在很多庫中,例如排序,只要會使用就行。考驗程序員的關鍵還是如何合理的 有效的利用 各種接口來實現具體需求,最重要的還是學習能力。
學會機器學習十大算法 什麼水平
相當於你在《數據結構》這門課程裡,學會了冒泡排序的水平。
數學怎麼算法好算
這要根據具體的題型採用不同的算法。
一般常用的有湊整法,拆分法,結合法等。