01 複雜度分析與學習策略

2021-10-04 06:46:02 字數 2518 閱讀 4220

從今天開始,邁過「資料結構和演算法」這道坎!
1.面試、程式設計角度

1.1 通關大廠面試

1.2 日常業務中不再crud,提高**質量(有助於閱讀框架原始碼、背後設計思想。更好處理日常業務需求)

1.3 更高的要求、追求,高手之間比內功、細節

2.個人角度

2.1 不被行業淘汰,不再原地踏步

2.2 對程式設計要有追求、不要滿足現狀

2.3 訓練大腦思維,對生活、事業都有裨益

1. 什麼是資料結構和演算法?

1.1 概念

資料結構:對資料的組織方式

演算法:對資料結構的操作

1.2 兩者關係:相輔相成

演算法是建立在資料結構之上的操作,資料結構是演算法的操作物件

2.學習的重點在什麼地方?

心法:複雜度分析(佔據半壁江山)

口訣:10個資料結構:資料、佇列、堆、鍊錶、二叉樹、trie樹圖、跳表、雜湊表、棧

10個演算法:遞迴、排序、二分查詢、搜尋、雜湊演算法、貪心演算法、分治演算法、回溯演算法、動態規劃、字串匹配演算法

建議:不要為學習而學習,要學它的「來歷」 「自身」的特點 「適合解決的問題」 以及 「實際應用場景」。也就是說,

要將知識與實際問題聯絡起來。先知己知彼(能解決什麼問題),再應用到戰場(應用地方)。

3.一些技巧:

1).邊學邊練,適度刷題

千里之行始於足下,要多敲**

2).多問、多思考、多互動

不要被動記憶,多辯證思考。

掌握一門知識,要說出來,通過交流、表達促進學習

3).打怪公升級法

學習途中,設立切實可行的object

4).知識需要沉澱,不要想檢視一下子掌握所有

量變引起質變、學習知識的過程是反覆迭代、不斷沉澱的過程

3.1 如何分析、統計演算法的執行效率和資源消耗

3.1.1 為什麼需要複雜度分析

事後統計法的侷限:

1.測試結果非常依賴環境

2.測試結果受資料規模影響很大

3.1.2 時間複雜度(漸進時間複雜度)

1.大0複雜度表示法:所有**的執行時間t(n)與每行**的執行此時n成正比,可表示為:t(n) = o(f(n))

意義:表**執行時間隨資料規模增長的變化趨勢

3.2.分析方法:

1).只關注迴圈執行次數最多的一段**

2).加法法則:總複雜度等於量級最大的那段**的複雜度

3).乘法法則:巢狀**的複雜度等於巢狀內外**複雜度的乘積

3.3.幾種常見時間複雜度例項分析

複雜度量級:o(1) o(logn) o(n) o(nlogn) o(n2..n^k) 2^n n!

可粗分:多項式量級和非多項式量級

3.4.多項式時間複雜度解釋

1.o(1):常量級時間複雜度

一般情況下,只要演算法中不存在迴圈語句、遞迴語句,即使有成千 上萬行的**,其時間複雜度也是ο(1)。

2.o(logn)、o(nlogn)

3.o(m+n) o(m*n)

3.5 空間複雜度(漸進空間複雜度)

表示演算法的儲存空間與資料規模之間的增長關係.

3.6 **最好、最壞、平均、均攤時間複雜度

// n 表示陣列 array 的長度 

intfind

(int

array,

int n,

int x)

}return pos;

}

3.6.1 最好、最壞時間複雜度

最好時間複雜度:在最理想情況下,執行這段**的時間複雜度

最壞時間複雜度:在最糟糕情況下,執行這段**的時間複雜度

3.6.2 平均情況時間複雜度

要考慮每種情況發生的概率:加權平均值,也叫期望值。故平均時間複雜度的全稱是「加權平均時間複雜度」 或 「期望時間複雜度」

大多數情況下,不需分析最好、最壞、平均時間複雜度。

只有同一塊**在不同情況下,時間複雜度有量級差別時,才會使用

3.6.3 均攤時間複雜度

攤還分析法:把耗時多的操作分攤到耗時少的操作,這樣,一組連續操作的平均耗時就降低。此時的時間複雜度為均攤時間複雜度

應用在特殊場景: 對乙個資料結構進行一組連續操作,大部分情況下時間複雜度都很低,只有個別情況下時間複雜度比較高,

而且這些操作之間存在前後連貫的時序關係

在能夠應用均攤時間複雜度分析的場合,一般均攤時間復 雜度就等於最好情況時間複雜度。

複雜度分析是我們學習資料結構與演算法的的有效導向/衡量標準,在後面學習10種演算法時再分析對應的複雜度。

一點題外話:

以為理解就完事了。但最後時間還是無情帶走了之前一切的努力,只留下殘留在腦海中的一些零散碎片。這裡與大家共勉,

以印證那句誓言———「從今天起,邁過「資料結構與演算法」這道坎」!

參考:

極客時間的《資料結構與演算法之美》

01 複雜度分析(上)

執行次數!大 o 時間複雜度實際上並不具體表示 真正的執行時間,而是表示 執行時間隨資料規模增長的變化趨勢,所以,也叫作漸進時間複雜度 asymptotic time complexity 簡稱時間複雜度。當 n 很大時,你可以把它想象成 10000 100000。而公式中的低階 常量 係數三部分並...

01 複雜度分析(上) 時間 空間複雜度講解

我們都知道,資料結構和演算法本身解決的是 快 和 省 的問題,即如何讓 執行得更快,如何讓 更省儲存空間。所以,執行效率是演算法乙個非常重要的考量指標。那如何來衡量你編寫的演算法 的執行效率呢?這裡就要用到時間 空間複雜度分析。1 什麼是複雜度分析?複雜度也叫漸進複雜度,包括時間複雜度和空間複雜度,...

複雜度分析 時間複雜度分析和空間複雜度分析

其實,只要講到資料結構與演算法,就一定離不開時間 空間複雜度分析。而且我個人認為,複雜度分析是整個演算法學習的精髓,只要掌握了它,資料結構和演算法的內容基本上就掌握了一半。1.時間複雜度分析 對於剛才羅列的複雜度量級,我們可以粗略地分為兩類,多項式量級和非多項式量級。其中,非多項式量級只有兩個 o ...