程序人生丨2021年最常用將會(huì)是這 8 種數(shù)據(jù)結(jié)構(gòu)算法,一定要了解
本篇文章將為大家介紹一下2021年最常用將會(huì)是這 8 種數(shù)據(jù)結(jié)構(gòu)算法,并向大家簡(jiǎn)單列舉該數(shù)據(jù)結(jié)構(gòu)的具體使用。

1.鏈表
程序員中一個(gè)流行的通用數(shù)據(jù)結(jié)構(gòu)是鏈表。現(xiàn)在考慮一下此數(shù)據(jù)結(jié)構(gòu)在實(shí)際應(yīng)用程序中的用途。?
我們所有人的手機(jī)上都有音樂播放器,并且上面有歌曲。假設(shè)您的清單上有5-6首歌曲。當(dāng)您為這些歌曲創(chuàng)建播放列表時(shí),它將在鏈接列表的概念上起作用。這些歌曲一一播放,這是單鏈接列表的最佳示例之一。歌曲已連接,您可以從第三首歌轉(zhuǎn)到第四首歌,但不能返回(單鏈列表的行為)。
當(dāng)您實(shí)現(xiàn)雙向播放歌曲的功能時(shí),它將遵循雙向鏈接列表的行為。在雙向鏈表中,節(jié)點(diǎn)雙向連接。因此,在播放列表中,您可以從歌曲3移至歌曲4,也可以從歌曲3移至歌曲2。您將具有上一個(gè)和下一個(gè)按鈕。因此雙向?qū)Ш绞强赡艿摹?
當(dāng)您以重復(fù)模式播放歌曲時(shí),它遵循循環(huán)鏈接列表的行為。在循環(huán)鏈表中,最后一個(gè)節(jié)點(diǎn)與第一個(gè)節(jié)點(diǎn)連接。因此,一旦最后一首歌曲完成,第一首歌曲將再次播放,并且將以循環(huán)模式播放,并且永不停止。?

2.二進(jìn)制搜索算法
作為程序員,您可能會(huì)知道二進(jìn)制搜索算法。此算法也稱為半間隔搜索,對(duì)數(shù)搜索或二進(jìn)制印章。在此算法中,我們?cè)谂判驍?shù)組中搜索目標(biāo)值。?
該算法使搜索過程更加容易,因?yàn)槟恍枰容^數(shù)字列表中的每個(gè)元素。二進(jìn)制搜索是在有序數(shù)據(jù)列表中搜索目標(biāo)值的快速方法。它使您有能力高效地執(zhí)行此過程。您可以找到許多二進(jìn)制搜索算法的示例,例如在字典中搜索單詞的含義,但是您知道使用二進(jìn)制搜索方法的真實(shí)應(yīng)用程序中的任何人嗎?
該算法的現(xiàn)實(shí)世界場(chǎng)景之一是驗(yàn)證應(yīng)用程序中的用戶憑據(jù)。使用二進(jìn)制搜索,您可以在幾秒鐘內(nèi)驗(yàn)證數(shù)百萬個(gè)用戶的憑據(jù)。?
此算法還用于許多編程語(yǔ)言庫(kù),例如Java,.NET,C ++ STL等。Python的list.sort()方法使用Timsort,后者(AFAIK)使用二進(jìn)制搜索來定位元素的位置。二進(jìn)制搜索還用于99%的3D游戲和應(yīng)用程序中。?
3.合并排序算法
合并排序適用于分而治之技術(shù)的概念。我們將列表分為幾個(gè)子列表,直到子列表不包含單個(gè)元素。之后,我們合并這些子列表以獲得元素的排序列表。這是對(duì)該算法的簡(jiǎn)單簡(jiǎn)短介紹,但您知道它在實(shí)際應(yīng)用中的何處使用。?
很多人喜歡通過任何電子商務(wù)網(wǎng)站進(jìn)行在線購(gòu)物。您知道這些電子商務(wù)網(wǎng)站使用此算法嗎?大多數(shù)電子商務(wù)網(wǎng)站的“您可能會(huì)喜歡”部分。本部分維護(hù)所有用戶帳戶的排列,然后根據(jù)您選擇的排列中反轉(zhuǎn)次數(shù)最少的那個(gè)開始,建議他們購(gòu)買或喜歡的東西。

4.阿姆斯特朗數(shù)
程序員中另一個(gè)受歡迎的程序是檢查該數(shù)字是否為Armstrong。在阿姆斯特朗數(shù)字中,一個(gè)數(shù)字的數(shù)字總和等于該數(shù)字本身。例如,153和371是阿姆斯特朗數(shù)。阿姆斯壯(Amstrong)編號(hào)主要用于數(shù)據(jù)安全應(yīng)用程序中以進(jìn)行數(shù)據(jù)加密和解密。
訪問IJITEE的鏈接。提到了無線傳感器網(wǎng)絡(luò)的Armstrong編號(hào)。他們使用了基于Armstrong的安全算法,其中使用Armstrong編號(hào)生成了128位密鑰。它在AES算法中用于數(shù)據(jù)加密和解密。?
5.霍夫曼編碼
霍夫曼編碼與加密和數(shù)據(jù)壓縮結(jié)合使用。它用于無損數(shù)據(jù)壓縮。根據(jù)概率,它的實(shí)現(xiàn)方式是您無需保留同一事物的多個(gè)副本。?
霍夫曼編碼是使用壓縮格式,如GZIP,PKZIP(winzip的,等等),和BZIP2。與互聯(lián)網(wǎng)之間的所有通信都使用霍夫曼編碼。大多數(shù)圖像文件(例如JPEG和PNG)均經(jīng)過霍夫曼編碼。同樣,音樂文件(例如MP3)也經(jīng)過霍夫曼編碼。?
霍夫曼代碼將定長(zhǎng)代碼轉(zhuǎn)換為變長(zhǎng)代碼。使用生成所需壓縮率的JPEG和MPEG技術(shù)對(duì)其進(jìn)行進(jìn)一步壓縮。?

6.動(dòng)態(tài)編程
對(duì)于計(jì)算機(jī)科學(xué)專業(yè)的學(xué)生和程序員而言,另一個(gè)最喜歡的主題是動(dòng)態(tài)編程。0-1背包問題,分詞問題,最長(zhǎng)公共子序列這些問題都是動(dòng)態(tài)編程中最流行和常見的問題。您解決了問題,使用了邏輯能力,但是在現(xiàn)實(shí)世界中實(shí)際使用該概念的地方……
動(dòng)態(tài)編程在生物信息學(xué),數(shù)學(xué)和經(jīng)濟(jì)學(xué)中被廣泛使用。生物信息學(xué)中的任務(wù),如序列比對(duì),蛋白質(zhì)折疊,RNA結(jié)構(gòu)預(yù)測(cè),和蛋白質(zhì)-DNA結(jié)合使用動(dòng)態(tài)編程。
在數(shù)學(xué)中,DP用于矩陣乘法,而Rocket技術(shù)廣泛使用DP。火箭的路徑是通過求解許多參數(shù)來確定的。使用動(dòng)態(tài)規(guī)劃可以最佳地解決所有決策問題。?
7.圖
無論您是在某個(gè)地方旅行,出門在外還是試圖找到通往特定目的地的路線。您可以在手機(jī)的Google Map中使用最好的朋友。您知道Google Map使用Graph數(shù)據(jù)結(jié)構(gòu)嗎?
圖形數(shù)據(jù)結(jié)構(gòu)是非常強(qiáng)大的數(shù)據(jù)結(jié)構(gòu)。該圖不僅可以表示地球,還可以表示整個(gè)宇宙。從微小的亞原子粒子到巨大的宇宙,您都可以借助Graph來表示每件事。?
使用Google地圖時(shí),所有城市和州都像帶有距離信息的圖形一樣連接在一起。從一個(gè)城市到達(dá)另一個(gè)城市有很多方法,但是要找到兩個(gè)城市之間的最短路徑,您需要使用一些算法。Dijkstra的算法是一種非常強(qiáng)大的算法,可以用來找到兩個(gè)城市之間的最短路徑。?
為了確定到達(dá)目的地的最短路徑,Dijkstra的算法可在手機(jī)中啟用導(dǎo)航系統(tǒng)/ GPS。Uber使用匈牙利算法將每輛車分配給尋找乘車的人。?
Facebook還使用圖形數(shù)據(jù)結(jié)構(gòu)來實(shí)現(xiàn)新聞提要或關(guān)注者。它使用Graph API在其應(yīng)用程序中實(shí)現(xiàn)大多數(shù)功能。一切都可以由頂點(diǎn)或節(jié)點(diǎn)來表示,例如頁(yè)面,位置,組,評(píng)論,照片,相冊(cè),故事,視頻,便箋等。每個(gè)連接或關(guān)系都是Facebook上的優(yōu)勢(shì)。Graph API以頂點(diǎn)和邊的形式存儲(chǔ)數(shù)據(jù)。?

8.Trie數(shù)據(jù)結(jié)構(gòu)
這是程序員的高級(jí)數(shù)據(jù)結(jié)構(gòu)主題。您了解到它可能是為了工作,您也喜歡根據(jù)它解決問題,但是此高級(jí)主題在實(shí)際應(yīng)用程序中的用途是什么。它在我們的日常生活中在哪里實(shí)現(xiàn)?讓我們得出一個(gè)有趣的答案……
您每天都在使用手機(jī),還使用其中的滑動(dòng)功能。您的移動(dòng)鍵盤中的這種滑動(dòng)功能以及在編寫文檔時(shí)自動(dòng)更正使用Trie數(shù)據(jù)結(jié)構(gòu)。Trie數(shù)據(jù)結(jié)構(gòu)將字符值保存在手機(jī)中。?
網(wǎng)絡(luò)瀏覽器歷史記錄也使用Trie數(shù)據(jù)結(jié)構(gòu)。您訪問過的站點(diǎn)的URL由Trie數(shù)據(jù)結(jié)構(gòu)組織。當(dāng)用戶鍵入以前使用的URL的前綴時(shí),瀏覽器將使用此功能強(qiáng)大的數(shù)據(jù)結(jié)構(gòu)來完成URL。?
寫在最后
現(xiàn)在,您是否已經(jīng)了解到這八種數(shù)據(jù)結(jié)構(gòu)了呢?這基本都是和我們自身離不開的,每一位程序員在進(jìn)行項(xiàng)目開發(fā)時(shí),也會(huì)應(yīng)用到其中的幾種。所以,數(shù)據(jù)結(jié)構(gòu)與算法,對(duì)于我們每一個(gè)人,無論是已經(jīng)是程序員還是在這條路上努力的小伙伴而言,這都是非常重要的。
另外筆者是一名CC++的程序員,如果你想更好的提升你的編程能力,好好學(xué)習(xí)C/C++編程知識(shí)的話!那么你很幸運(yùn)~

UP在主頁(yè)上傳了一些學(xué)習(xí)C/C++編程的視頻教程,有興趣或者正在學(xué)習(xí)的小伙伴一定要去看一看哦!會(huì)對(duì)你有幫助的~
分享(源碼、項(xiàng)目實(shí)戰(zhàn)視頻、項(xiàng)目筆記,基礎(chǔ)入門教程)
歡迎轉(zhuǎn)行和學(xué)習(xí)編程的伙伴,利用更多的資料學(xué)習(xí)成長(zhǎng)比自己琢磨更快哦!
編程學(xué)習(xí)書籍:

編程學(xué)習(xí)視頻:
