資料結構與演算法 02 複雜度分析

2021-10-04 17:45:57 字數 1445 閱讀 5564

資料結構與演算法的本身解決的是「快」和「省」的問題。節省空間,且執行效率快,今天我們通過複雜度分析來考量**的執行效率,複雜度又分為時間複雜度和空間複雜度兩大類。

事後統計法:通過運用工具監控的**執行的方法,統計**的執行時間和占用空間。這種方法無法真實的反應**的效能。

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

受硬體的影響執行環境影響,不同的處理器的效能對執行相同的**,執行效率可能不同。

1.2 測試結果受資料規模影響大

資料規模越大,例如對一系列數字排序,當資料規模增大時,不同的排序演算法執行效率不同。比如小規模的資料排序,插入排序比快速排序要快。

時間複雜度又叫漸進時間複雜度,它是當前**執行所消耗的時間

我們粗略的認為執行每一行**是乙個時間單位,且每行執行**的速率相同。

常見間複雜度:o(1),o(logn),o(n),o(n²),o(2^n),o(n!)

2.1 時間複雜度 :o(1)

system.out.println("1");

system.out.println("2");

system.out.println("3");

system.out.println("4");

system.out.println("5");

上述**執行的時間是5個時間單位,是乙個常數,所以時間複雜度為 o(1)。

2.2 時間複雜度 :o(n)

for(int i=1;i<=n;i++)
這段**的執行時間單位和 n 有關係,執行了n 個時間單位 ,所以時間複雜度為o(n)

2.3 時間複雜度 :o(n²)

for(int i=1;i<=n;i++)
每迴圈一次,i的值擴大原來的2倍 ,所以 2^x=n ,則x=log2n,所以時間複雜度為 o(log2n) ,如果i的值擴大原來的3倍?4倍?那時間複雜度分別是o(log3n),o(log4n),我們可以忽略對數底的要求,對數階的時間複雜度統一為o(logn)。

2.5 常見的時間複雜度還有

空間複雜度又叫漸進空間複雜度。表示當前**執行所占用的最大空間。

我們常見的空間複雜度就是 o(1)、o(n)、o(n2),且 o(logn)、o(nlogn) 這樣的對數階複雜度基本不用。

漸進時間和空間複雜度只是提供乙個粗略的分析模型,重點是在我們程式設計中分析。當然即使再好的演算法,在不同的執行環境中效率還是有差別的,好的演算法,如果處理器不行還是不行,壞的演算法,執行在處理器快的環境中不一定慢,但是好的處理器,好的演算法,那肯定快。當然這和資料規模也有一定的聯絡。

資料結構與演算法 複雜度分析

一 什麼是複雜度分析?1.資料結構和演算法解決是 如何讓計算機更快時間 更省空間的解決問題 2.因此需從執行時間和占用空間兩個維度來評估資料結構和演算法的效能。3.分別用時間複雜度和空間複雜度兩個概念來描述效能問題,二者統稱為複雜度。4.複雜度描述的是演算法執行時間 或占用空間 與資料規模的增長關係...

資料結構與演算法之美 02複雜度分析(上)

如何分析 統計演算法的執行效率和資源消耗 複雜度描述的是演算法執行時間 或占用空間 與資料規模的增長關係。為什麼要需要複雜度分析?測試結果非常依賴測試環境,而且受資料規模影響很大,所以需要乙個不用具體資料來測試,可以粗略估計演算法的執行效率的方法 如何在不執行 的情況下,粗略的估算一段 的執行時間 ...

資料結構與演算法110 複雜度分析

很多人會有疑問,複雜度分為時間和空間複雜度,現在有很多任務具監控統計執行時間和占用記憶體大小,為什麼還要去分析呢?這種測試的的結果非常依賴當時的測試環境 硬體 網速等 結果還受到資料量的影響。所以我們需要通過時間空間複雜度來估計執行的效率。int sumnumber int n return sum...