大學時我也沒學會:每個程序員都必須知道的7種算法和數據結構


大學時我也沒學會:每個程序員都必須知道的7種算法和數據結構


大學時我也沒學會:每個程序員都必須知道的7種算法和數據結構

在程序員職業生涯中,算法和數據結構是最重要的主題,如果想走進編程世界並賺錢的話。今天,我們將通過最簡單的示例瞭解它們的作用以及在何處使用它們。

一.排序算法

排序是計算機科學中研究最多的概念。目的是按特定順序排列列表中的各項。儘管每種主要的編程語言都有內置的排序庫,但是如果您知道它們是如何工作的,它會派上用場。根據要求,您可能要使用其中任何一種。

1.合併排序

2.快速排序

3.桶排序

4.堆排序

5.計數排序

更重要的是,人們應該知道何時何地使用它們。如在電子商務網站中按價格,受歡迎程度等排序。

二.搜索算法

二進制搜索用於對排序後的數據集執行非常有效的搜索。時間複雜度為O(log 2 N)。目的是將列表中可能包含該項目的部分分成兩半,直到將其縮小到一個可能的項目為止。比如:當您在歌曲排序列表中搜索歌曲名稱時,它將執行二進制搜索和字符串匹配以快速返回結果。

應用範圍舉例:

1.用於網絡爬網搜索引擎,即爬蟲

2.用於人工智能以構建機器人,例如國際象棋機器人

3.在地圖上找到兩個城市之間的最短路徑以及許多其他此類應用程序


三.散列(哈希)

哈希查找是當前最廣泛使用的技術,用於通過鍵或ID查找適當的數據。我們通過其索引訪問數據。以前,我們依靠排序+二進制搜索來查找索引,而現在我們使用散列。

數據結構稱為哈希映射或哈希表或字典,可有效地將鍵映射到值。我們可以使用鍵執行值查找。目的是使用適當的哈希函數執行鍵->值映射。


四.動態編程

動態編程(DP)是通過將複雜問題分解為更簡單的子問題來解決的方法。我們解決子問題,記住它們的結果,並使用它們來迅速解決複雜的問題。


五.平方求冪

假設您要計算2的32次方。通常,我們將迭代32次並找到結果。如果我告訴您可以5次迭代完成該怎麼辦?

通過平方或二進制求冪來進行求冪是快速計算O(log 2 N)中數字的大正整數冪的通用方法。不僅如此,該方法還用於計算多項式和平方矩陣的冪。

應用舉例:RSA加密中最需要計算大數冪。RSA還使用模塊化算術以及二進制冪運算。


六.字符串匹配和解析

模式匹配/搜索是計算機科學中最重要的問題之一。關於該主題已經進行了很多研究,但是對於任何程序員,我們只會列舉兩個基本必要條件。

1.KMP算法(字符串匹配)

Knuth-Morris-Pratt算法用於必須匹配長字符串中的短模式的情況。例如,當我們在文檔中按Ctrl + F關鍵字時,我們將在整個文檔中執行模式匹配。

2.正則表達式(字符串解析)

很多時候,我們必須通過解析預定義的限制來驗證字符串。它在Web開發中大量用於URL解析和匹配。


七.素性測試算法

有確定性和概率性的方法來確定給定數是否為質數。我們將看到確定性和概率性(非確定性)方式。

應用舉例:質數最重要的用途是在密碼學中。更準確地說,它們用於RSA算法的加密和解密,這是公鑰加密系統的第一個實現。另一個用途是哈希表中使用的哈希函數

最後,相較而言,人工智能領域,可能是高校畢業生最好的磨鍊場之一,在那裡,可以快速提升和紮實你的基礎,然後你再去學其它技術,就會容易不少。並且對於判斷那些技術的實現原理還會有幫助。


分享到:


相關文章: