程序員學算法到底有什麼用?

曾傳新


首先我們來聊聊什麼是算法

在計算機領域,算法是一個永恆的主題,在計算機領域,我們用算法這個詞來描述一種有限、確定、有效的並適合計算機程序來實現的解決問題的方法。算法是計算機科學的基礎,是這個領域研究的核心。我們關注的算法都需要適當的組織數據,而組織數據就產生了數據結構,數據結構也是計算機基礎學科研究的的核心對象,它和算法的關係非常緊密,因此理解算法必須學習數據結構。因此我們所學的算法應該是:算法和數據結構。

說了這麼多,我們來快速瞭解下算法,比如要定義一個算法,我們可以用自然語言描述解決某個問題的過程或是編寫一段程序來實現的。如發明於2300多年前的歐幾里得算法所示,其目的是找到兩個數的最大公約數:

1、自然語言描述

計算兩個非負整數 p 和 q 的最大公約數:若 q 是0,則最大公約數為p。否則,將 p 除以 q 得到的餘數 r,p 和 q 的最大公約數即為 q 和 r 的最大公約數。

2、Java代碼實現

會算法和不會算法的區別是什麼?

首先我們來看兩張圖,你就能很快明白。

1、會算法的開發人員

2、不會算法的開發人員

上面的圖片是否很直觀呢,會算法的開發人員一般會選擇更合適更優的方案去解決問題,不會算法的開發人員,邏輯性就比會算法的開發人員弱許多,更多的是使用自身的蠻力,寫出來的代碼就不是最優的。

幫助我們提升優化系統性能

當計算解決一個問題時,一般會有不同的方法,對於普通的問題,使用不同的方法並沒有什麼關係,但是對於複雜的問題,大型的數據邏輯處理運算問題,我們就需要設計出有效的利用時間性和空間性的方案。

學習算法的主要原因和目的就是幫我節省非常多的資源問題,甚至讓我們完成一個自己都覺得不可能完成的任務,比如某些時候要處理百萬個對象的應用程序,設計優良的算法甚至可以將程序的運行速度提升數百萬倍,與此相反,沒有應用算法速度慢的無法想象,比如我們公司以前大數據清理任務,一個任務要跑好幾天,這個效率怎麼能忍受?或者購買新的硬件去提升速度,則可能是十倍或百倍。無論在何時,精細設計的算法都是系統性能優化最有效最直接的方法。

訓練我們的邏輯思維

我們都明白,邏輯思維對我們寫代碼時很有幫助的,對於複雜業務的理解,需要我們有很強的邏輯思維能力。學習算法,讓我們的思維在遷移默化中進行提升,這是一個過程,量變引起質變,無論是程序員的工作中,還是工作之外的生活和交流,擁有良好邏輯思維的人都有著得天獨厚的優勢。

算法是面試的基礎內容

經歷過面試的同學們,對這個應該深有體會,我們做筆試題時,或多或少都會出現讓你手寫一個排序算法,為什麼這樣呢,因為算法作為程序員的必備技能,通過算法的考核很容易能反映出一個人的基礎是否紮實。

如果你想職業走的更遠,算法必須深入學習

當今最火的莫過於機器學習和人工智能,隨著這領域的興起,對人才的要求層次一下子提高了許多,不在是哪些只會寫基礎業務代碼能夠完成的,你需要更深入學習和其相關的算法。如果你想在計算機領域走的更遠,算法你一定要深入學習。

小節

今天的內容就和大家分享到這裡,由此可見算法對我們職業生涯的重要性,只要我們從事計算機行業,算法這門基礎內容,我們一定要學好。


感謝大家閱讀,如果你有什麼好的想法歡迎到留言區分享交流,如果你贊同我的回答,歡迎給個贊和轉發,謝謝支持。

前端達人


程序是算法加編程語言。其中,編程語言是很多程序員都熟知的。但說到算法部分程序員覺得跟自己關係不大。實際上,所有的程序都要用到算法。下面舉幾個算法的例子幫您理解一下算法的作用。

Hello World裡的算法

學過編程的人,接觸到的第一個程序大概都是著名的“Hello world”了。這麼簡單的程序會有算法嗎?當然有啦,請思考一下計算機是隻認識數字的,怎麼讓它能識別文字呢?聰明的人類給每一個文字都制定了一個編碼,配合數據類型的定義,計算機就能識別文字了。這種編碼的方式就是一種算法了。您在鍵盤上輸入文字本身就是一種算法的實現。英文還好就一兩百個字母數字和符號。漢語博大精深有幾萬個字符,用101個按鍵組合來體現所有的文字這本身就是一種了不起的算法。

經典的算法-割圓術

割圓術跟程序的關係不大,但它卻凝聚了編程的思想。我們知道所謂程序運算是由四則運算加上邏輯運算組成的。割圓術正是反覆使用用了這些基本運算,經多次循環不斷接近圓周率的。這個方法在算法中叫遞推法。在只能用算籌的年代,就能想到這麼時尚的方法,我不得不說老祖宗真的很聰明。從另一個角度上說,算法其實是超越了編程的一種思想。

一個關於算法的故事

這個故事有點悲傷。我們知道法律規定一個人去逝後,他的遺產要由直系親屬繼承。有這樣一個家庭夫婦二人和一個孩子。有一天丈夫帶著孩子二人坐飛機旅行,不幸的是飛機墜毀了二個人都遇難了。現在出現了一個遺產繼承的問題。

  • 丈夫的父母都健在,如果丈夫先於孩子去世,那麼按照法律他的遺產要由父母妻子和孩子四人繼承,每人分得四分之一。之後孩子去世,妻子將繼承孩子的全部財產。結果是父母每人分得四分之一,而妻子一人獨得二分之一。
  • 如果孩子先於丈夫去世,則結局就是父母和妻子每人得三分之一。

到底該怎麼分呢?沒人能知道,因為誰都沒有辦法搞清楚丈夫和孩子哪個先去世。這說明了前面那個關於繼承的法律有點問題。這個問題是一個關於時間的算法問題。這種現象在互聯網的世界裡很普遍,很多人都在發信息,但互聯網不能保證先發的信息就能先到。因此,必須要設計出算法來解決這種時間上的衝突。

我們可以把計算機程序想象成用數字去模擬現實世界,算法則對應了現實世界中的各種規則。不懂得算法,我們便無法確定寫出來的程序能否滿足需求。


日衝信息 黃


編程從本質上來說就是算法加數據結構,算法是編程思想的核心部分,也是研發級程序員必須重點掌握的內容。

隨著當前程序員的崗位劃分逐漸細化,而且大量的程序員都在從事應用級開發(增刪改查),所以不少程序員在工作過程中並不會接觸到太多的算法,比如Web開發、Android開發等應用級開發崗位,對於算法的要求並不高。但是,這並不意味著程序員就不需要掌握算法。

對於研發級程序員來說,掌握算法是完成崗位開發任務的基礎,而對於應用級程序員來說,掌握算法是進行崗位升級的重要基礎。如果應用級程序員不能掌握算法知識,那麼將會遇到較大的崗位升級障礙,未來的職業生命週期也會受到一定程度的影響。

隨著大數據、人工智能的發展,未來算法的掌握情況對於程序員的影響會越來越明顯,未來大量的應用級開發任務都將由智能體來完成,程序員的工作將逐漸轉向研發創新方向,而算法正是程序員進行研發創新的基礎。

以人工智能領域的研發為例,不論是從事機器學習方向、視覺方向還是自然語言處理等方向的研發,算法設計、算法實現、算法訓練等操作都是繞不開的,所以人工智能研發的核心就是算法,這足以說明算法對於程序員的重要程度。

從事大數據崗位也離不開算法,因為大數據分析主要就是通過各種算法來完成數據價值化的過程,目前數據分析的主要方式是統計學方式和機器學習方式,而這兩種方式都需要掌握大量的算法。

我從事互聯網行業多年,目前也在帶計算機專業的研究生,主要的研究方向集中在大數據和人工智能領域,我會陸續寫一些關於互聯網技術方面的文章,感興趣的朋友可以關注我,相信一定會有所收穫。

如果有互聯網、大數據、人工智能等方面的問題,或者是考研方面的問題,都可以在評論區留言,或者私信我!


IT人劉俊明


說現實點,很多公司面試門口,隱約寫著: 懂算法請入,不懂算法者不得入內。


共識: 算法是內功,內功的深厚決定後續技術發展的天花板高度

很多人都回答了算法是程序員的內功,是程序員必備技能之一,簡單說算法技能好壞,決定了你的程序跑多久,同一個功能,不懂算法的人可能跑一個月才能完成任務,懂算法的可能需要跑幾個小時。


算法在程序員的地位,相當於佛經對少林寺和尚的地位,基礎並極其重要。天龍八部中掃地神僧中,正是對佛經深入感悟,才能完敗南慕容北喬峰兩大主角。

算法的這方面重要性就不多說了,後續換個角度,從公司或面試官的角度看看,程序員在面試中算法中有多重要。

現實點,對於很多公司而言,算法是面試門檻

公司招聘一個程序員進來,需要了解一個人。一個人的品質、價值觀等至關重要。但人是一個複雜的動物,通過短短的面試來判斷一個人的品質、價值觀的高低,是不太現實的。


而考察一個人的知識技能,相對容易得多。算法作為一門知識技能,容易考察。通過幾道算法題,就能大概瞭解這個程序員的技能情況。


美國社會心理學家戴維·麥克利蘭將一個人的素質通過冰山來建模:

  • 冰山上部是容易考察的部分,可通過培訓來改善。
  • 冰山深藏的下部,是人內心的、不該容易測量的部分。

結合最近兩年的互聯網行情,算法重要性更突出

最近互聯網行情不是特別好,之前都是野蠻發展,近幾年好多公司裁員的新聞不斷。而程序員的高薪,加上培訓機構的推波助瀾,候選的程序員越來越多,市場需求沒那麼多,競爭激烈。

簡單點說,僧多粥少,如何證明你是一個潛力好僧呢?來吧,看看你的佛經掌握程度。


平凡科技


計算機語言的算法要是用技術來理解的話它是一個很繁雜的系統。


我們可以這樣理解程序員的算法,程序員是一個很純淨的孩子,是主體。

計算機溝通語言就是代碼,代碼就是孩子看世界的素材,當孩子看到繽紛世界的素材後,他並不能理解這些素材到底是什麼,他們可以用在哪裡,以及怎樣正確的使用。


這時候純淨的孩子隨著時間的流逝,他的本性是好奇,對世間的各種各樣的素材,有著探索的慾望,由於大人們通過上一代的理論和實踐發現了很多識別與應用的方法,於是就會將經驗傳承給純淨的孩子。

會告訴孩子這個是什麼,他有什麼樣的作用,而如何運用素材來滿足自己的需求,就是計算機語言的算法,也就是方法論。


計算機語言有它獨特的結構和定義,在生活中經驗豐富的人會帶出很好的後代。在程序員的世界也是同樣,一個好的老師也會讓自己的學生少走彎路,如何更加高效運用專業的計算機語言算法,實現最大效率的目標,這就是算法的作用。

我在最初學編程語言的時候,用的是最基礎最老的BASIC語言,發明於1964年,其中有一個最簡單的語句:If...Then...Goto...

If你足夠努力Then就會獲得成功Goto新的開始

If...Then...是素材,告訴純淨的孩子邏輯關係,如果你足夠努力,那麼就會獲得成功,轉向新的開始。



就是這樣,算法方法是一致的,區別在於工具有點區別,解決的問題不同。


七色慧


其實,一般初級甚至中級程序員在日常開發中是用不了算法的,要麼接觸不到,要麼別人幫你封裝好了,你可以用現成的

但是時間一長,你就會發現不會算法,就很難變得更加優秀,你會發現優秀框架的源碼,部分是需要用到算法,你不懂,有些存儲原理,也用到算法,用到這些算法,你的代碼執行的效率更高,這個時候你就需要去了解這些東西,否則你就很難再上一層樓

千萬不要覺得算法不重要,其實這個是一種寶貴財富,在日常的開發中,對你有潛移默化的影響,所以,想成為一個優秀的程序員,算法數據結構是必不可少學的,一起加油學習算法吧


修煉IT基本功


很高興回答您提出的,程序員學好算法到底有什麼用?

1、首先算法學好的話,不論對你思考問題的方式還是對你編程的思維都會有很大的好處。

2、編程算法只是算法的一種表達形式,還可以用表格或流程圖來表達算法。

3、各種算法在不同領域扮演不通角色,本質上沒有區別,一通百通。

4、一些基礎算法的話,沒必要找資料書籍,也沒有太多要求,隨便在網上搜索一下,就能找到很多詳細的資料。





信通老宋


所有的程序基本上就是算法+數據結構。


悲傷的鎮魂曲


算法是計算機的靈魂,是解決所有問題的根源,所以計算機與數學關係非常密切。


分享到:


相關文章: