AI面試-算法結構基礎

其實目前國內幾乎只要是技術崗,面試中都100%會問算法和數據結構。面試

這二者能快速體現候選人真實的水平,好比代碼量,代碼的質量,性能,思惟是否有邏輯,是否靈活。算法

算法結果概述數組

1、前言數據結構

1.應用範圍:機器學習、數據挖掘、天然語言處理、圖形學等。機器學習

2.求職方面的考點貪心、分治、動態規劃、樹、圖等。並且考官很是喜歡用算法來驗證你的代碼水平!函數

2、概述工具

1.定義:簡單的說,算法就是解決問題的方式。性能

2.特色:有窮性、肯定性、可行性、有輸入&輸出。學習

3、基礎算法:測試

1.窮舉法:求N個數的所有排列、8皇后問題。

2.分而治之:二分查找——減而治之、歸併排序——分而治之。

3.貪心:最小生成樹——Prim、Kruskal、單元最短路——Dijkstra。

4.動態規劃:揹包問題、士兵路徑。

算法複雜度問題

1、概述

談算法不談複雜度=耍流氓!

硬件發展是常數級的,可是算法規模擴大是指數級別的。

在實現以前,要預估算法所須要的資源:時間、空間。

2、時空複雜度:

1.含義:使用大O記號(最壞狀況,忽略係數)。

2.包括:時間複雜度(基本操做次數)、空間複雜度(佔用內存字節數)、二者的區別是空間能夠再利用、聯繫是時空互換(Hash表)。

3.舉例:

O(1) :基本運算,+,-,*,/,%,尋址。

O(logn) :二分查找。

O(n1/2) :枚舉約數。

O(n) :線性查找。

O(n2):樸素最近點對。

O(n3) :Floyd最短路、普通矩陣乘法。

O(nlogn):歸併排序。

O(2n)  :枚舉所有的子集。

O(n!): 枚舉全排列。

上述例子的總結: 

優秀:O(1) < O(logn) < O(n1/2) < O(n) < O(nlogn) 。

可能能夠優化:O(n2) < O(n3) < O(2n) < O(n!) 。

4.方法:輸入輸出、數循環次數、均攤分析。

棧和隊列問題

1、二者的共性和區別

1.共性:存放數據的線性表、空間複雜度O(n)、單次操做時間複雜度O(1) 。

2.區別:隊列——先進先出(FIFO),棧——先進後出(FILO)。

2、操做

入棧/隊列、出棧/隊列、判斷滿/空。

3、實現

1.須要的工具:數組和鏈表皆可(線性表)、指針(輔助變量):棧頂/底指針、隊頭/尾指針。

2.關鍵:出入元素的同時移動指針。

4、應用

括號匹配測試及模擬系統棧,由於篇幅比較長,能夠在公衆號後臺回覆「應用」獲取。

哈希表問題

1、哈希表概述

1.定義:存放數據的集合。

2.操做:根據(Key, Value)進行,插入、查找、刪除(能夠沒有)。 

3.空間複雜度:O(m)。

4.單次操做時間複雜度:O(1) 。

5.本質:Key的索引。

2、哈希表例題

1.題目:給出n個[0, m)範圍內的整數,去重。

2.解題思路:

①快速排序:指望時間複雜度O(nlogn) ,附加空間複雜度O(1)。

②計數(基數)排序:時間複雜度O(n + m) 、附加空間複雜度O(m)。

3.在思考一下:

若n << m,計數排序的大量空間被浪費。

只需判斷是否出現過,優化?

將Key區間[0, m) 映射到[0, p) 。

H(key) = key mod p、若m > p, 多對一的映射方式。

3、哈希表的實現

1.處理衝突(Key, Value):開放地址法(數組)、拉鍊法(數組+鏈表)。

2.負載率:負債率=已有元素大小/ 存儲散列大小。

3.哈希函數設計:負載率越低,效率越高,通常負載率小於50%。

4、哈希表應用

1.題目:設字符串A=‘12314123’,求‘123’在A中出現的次數。若是不會寫KMP又想要O(n),應該怎麼處理那?

2.思路:Key(‘123’) = ‘1’* 10^2 +‘2’* 10 + ‘3’* 1 = 123。

3.問題:Key相等時Value有可能不一樣、每次比較Value也是不小的開銷,特別是Value可能很大、不考慮Value將產生錯誤率(錯誤率換時間)、多重哈希(下降錯誤率)。

布隆過濾器問題

1、布隆過濾器概述

1.定義:判斷一個字符串是否出現過的數據結構

2.和哈希表的區別:哈希表是空間換時間,而布隆過濾器是錯誤率換空間。

2、布隆過濾器的實現

1.由01的數字序列構成 

2.插入:多個不一樣hash函數計算Key,置1

3.查找:有一個爲0不可能存在,全爲1可能存在

4.空間?

 

3、布隆過濾器的評價

1.優勢:時間和空間、多個hash函數可並行、交差並(位運算)。

2.缺點:錯誤率隨着負載率上升而上升、沒法刪除。

相關文章
相關標籤/搜索