每個開發(fā)人員都應(yīng)該學(xué)習(xí)的10個算法,你了解幾個?
原文網(wǎng)址丨h(huán)ttps://dev.to/codesphere/10-algorithms-every-developer-should-learn-3lnm
作者丨Saji Wang
譯者丨w3cschool編程獅-三寶
聲明丨本文翻譯僅用于學(xué)習(xí)交流,如需要轉(zhuǎn)載請注明原文信息以及譯者信息。

許多有抱負(fù)的開發(fā)者似乎都有一個很大的誤解,認(rèn)為記住標(biāo)準(zhǔn)算法很重要。對于某些工作面試來說可能是這樣,但這對成為一名成功的開發(fā)人員并不是特別重要。
那么你在算法課上學(xué)到的東西沒用嗎?當(dāng)然并非如此。但是最重要的還是算法思考的能力。這樣你不僅可以復(fù)制和使用標(biāo)準(zhǔn)算法,還可以輕松地使用代碼解決開發(fā)者遇到的任何問題。
下面匯總了10種算法,有抱負(fù)的開發(fā)人員應(yīng)該通過這些算法來熟悉算法思維。
二分法查詢是任何計算機科學(xué)課程中最先要教的內(nèi)容之一。這也許是一個最簡單的例子,但可以讓事情的效率成倍提升。
二分法查詢包括獲取一個已排序的數(shù)組,通過迭代將數(shù)組拆分成兩個部分,然后將要查詢的元素與每一班進(jìn)行比較,直到找到該元素。
排序算法是開發(fā)人員應(yīng)該擁有的最基本的工具之一。其中,選擇、冒泡和插入排序是新開發(fā)人員最要先學(xué)習(xí)的內(nèi)容。在任何考慮速度的情況下,你也許不會使用這些算法,但使用它們是對數(shù)組遍歷和操作的一個很好的應(yīng)用。
與第2條一樣,排序算法對于熟悉數(shù)組非常有用,但快速排序和歸并排序在重要的應(yīng)用中也足夠有效。輕松地實現(xiàn)這些排序算法,對于成為一名認(rèn)真的開發(fā)人員來說是至關(guān)重要的。
霍夫曼編碼是現(xiàn)代文本壓縮的基礎(chǔ)。它的工作原理是考慮不同角色在文本中出現(xiàn)的頻率,并基于這種頻率將它們組織成一棵樹。

樹是開發(fā)人員使用的許多算法和軟件的核心。因此,了解基本的樹遍歷是有抱負(fù)的開發(fā)人員的首要任務(wù)。
廣度優(yōu)先搜索(BFS)通過逐級探索樹,直到找到目標(biāo)節(jié)點。因為它確實經(jīng)歷了每一個節(jié)點,所以它肯定能找到解決方法

深度優(yōu)先搜索(DFS)是在樹中查找元素的而另一種方法。它不是逐層逐級向下工作,而是逐個分支搜索樹分支。
現(xiàn)在假設(shè)它沒有無限擴展的分支,DFS同樣總是有效的。實現(xiàn)這兩種搜索算法并不是特別復(fù)雜,但非常重要的是學(xué)會何時使用其中一種算法。很多軟件設(shè)計都是能夠理解你正在處理的信息的結(jié)構(gòu),并選擇適合該結(jié)構(gòu)的算法。

對于很多開發(fā)人員來說,梯度下降法不一定用得到。但是,如果你使用回歸或機器學(xué)習(xí)來接觸任何東西,那么梯度下降法將成為你工作的核心。
梯度下降法是一種使用微積分優(yōu)化函數(shù)的方法。在回歸和機器學(xué)習(xí)的背景下,這意味著找到能夠最大限度地減少預(yù)測算法中的誤差的特定值。雖然和其他很多算法相比,它涉及到更多的數(shù)學(xué)問題,但如果你要處理大量的數(shù)據(jù)和預(yù)測,了解梯度下降是如何工作的是非常重要的。

開發(fā)者要處理的另一個非常重要的問題是尋徑。圖被證明是一種非常通用的方法,用來描述各種涉及不同對象網(wǎng)絡(luò)的問題。
Dijkstra算法是一種尋找圖中兩個節(jié)點之間最快路徑的方法。它是大多數(shù)尋徑工作的基礎(chǔ),并被用于從人工智能到游戲設(shè)計等領(lǐng)域。

Diffie-Hellman密鑰交換很好地介紹了密碼學(xué)的工作原理。更具體地說,Diffie-Hellman密鑰交換通過將公鑰和私鑰(有效的長數(shù)字)結(jié)合起來,在不同方之間傳輸信息時對信息進(jìn)行加密。
即使你不是從事網(wǎng)絡(luò)安全方面的工作,作為一名開發(fā)人員,對加密和安全通信有一定的了解也是非常重要的。此外,盡管Diffie-Helman遠(yuǎn)遠(yuǎn)不是最好的算法,但它非常容易實現(xiàn),與大多數(shù)其他加密通信方法足夠相似。

以上9種算法提供了解決開發(fā)人員可能遇到的問題原型的方法。然而,現(xiàn)實情況是,作為開發(fā)人員,經(jīng)常會遇到全新的算法問題。這就是為什么發(fā)展用算法解決問題的能力比記住任何算法更重要。
不過好在有許多可以練習(xí)算法的網(wǎng)站,例如:
https://leetcode.com/
htpps://www.hackerrank.com/
在這些網(wǎng)站上,你可以找到困難且令人滿意的算法問題并磨練你的技能。
同樣,不是只記住這些算法,就認(rèn)為你就可以突然成為了一個優(yōu)秀的開發(fā)者。軟件工程首先能夠理解問題并構(gòu)建解決方案。
學(xué)習(xí)算法并不重要,因為你將不得不為你正在構(gòu)建的內(nèi)容里準(zhǔn)確地實現(xiàn)它們。他們很重要,因為它們教會你如何解決問題。
以上就是關(guān)于開發(fā)人員需要學(xué)習(xí)的10個算法的全部內(nèi)容。你認(rèn)為學(xué)習(xí)算法可以幫助提升編程實力嗎?在評論區(qū)留下你的看法!這里是w3cschool編程獅,點擊關(guān)注我們,閱讀更多的IT資訊和技術(shù)干貨~


課程:《熱門編程語言應(yīng)用前景》
課程介紹:想要學(xué)習(xí)編程,不知道要學(xué)什么,從哪里開始學(xué)?本課程將帶你了解當(dāng)下熱門的編程語言的應(yīng)用前景,讓學(xué)習(xí)有目的、有方向。
課程特點:本課程以視頻講解呈現(xiàn),詳細(xì)介紹各個熱門語言。同時,課程是免費的,主要幫助想要學(xué)習(xí)編程的朋友們快速了解。
學(xué)習(xí)方式:掃碼 ↓ 立即前往課程界面~

