每個(gè)開(kāi)發(fā)人員都應(yīng)該學(xué)習(xí)的10個(gè)算法,你了解幾個(gè)?
點(diǎn)擊關(guān)注上方“Stephen”,
設(shè)為“置頂或星標(biāo)”,第一時(shí)間送達(dá)干貨

原文網(wǎng)址丨h(huán)ttps://dev.to/codesphere/10-algorithms-every-developer-should-learn-3lnm
作者丨Saji Wang
譯者丨w3cschool編程獅-三寶
聲明丨本文翻譯僅用于學(xué)習(xí)交流,如需要轉(zhuǎn)載請(qǐng)注明原文信息以及譯者信息。

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

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

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

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

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

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

以上9種算法提供了解決開(kāi)發(fā)人員可能遇到的問(wèn)題原型的方法。然而,現(xiàn)實(shí)情況是,作為開(kāi)發(fā)人員,經(jīng)常會(huì)遇到全新的算法問(wèn)題。這就是為什么發(fā)展用算法解決問(wèn)題的能力比記住任何算法更重要。
不過(guò)好在有許多可以練習(xí)算法的網(wǎng)站,例如:
https://leetcode.com/
htpps://www.hackerrank.com/
在這些網(wǎng)站上,你可以找到困難且令人滿意的算法問(wèn)題并磨練你的技能。
同樣,不是只記住這些算法,就認(rèn)為你就可以突然成為了一個(gè)優(yōu)秀的開(kāi)發(fā)者。軟件工程首先能夠理解問(wèn)題并構(gòu)建解決方案。
學(xué)習(xí)算法并不重要,因?yàn)槟銓⒉坏貌粸槟阏跇?gòu)建的內(nèi)容里準(zhǔn)確地實(shí)現(xiàn)它們。他們很重要,因?yàn)樗鼈兘虝?huì)你如何解決問(wèn)題。
以上就是關(guān)于開(kāi)發(fā)人員需要學(xué)習(xí)的10個(gè)算法的全部?jī)?nèi)容。
END
關(guān)注 Stephen,一起學(xué)習(xí),一起成長(zhǎng)。
點(diǎn)“在看”支持下吧
點(diǎn) 閱讀原文 可優(yōu)惠充值話費(fèi),流量,視頻會(huì)員等。
