分析時間複雜度(1)

2021-09-05 12:12:30 字數 1063 閱讀 9773

目錄

一、度量

1.1 定義

1.2 思路

二、實戰

2.1 例一

2.2 例二求n!的遞迴函式的時間複雜度

2.3 例三 

將演算法中基本操作的執行次數作為演算法時間複雜度的度量。這裡所討論的時間複雜度不是執行完一段程式的總時間,而是其中基本操作的總次數。這很好理解:程式執行環境不同,執行的總時間是不同的,正如在銀河系列巨型計算機和普通的個人用計算機執行同樣的程式,總時間肯定不同。所以時間複雜度是乙個抽象的概念,不指時間而是次數!

分兩步:1)找出基本操作,確定問題規模n。基本操作就是其重複執行次數和演算法的執行時間成正比的操作。問題規模n唯一決定了基本操作的執行次數。2)計算出n的函式f(n)。有時候可以很清楚地將表示式給出,有時候只能以隱函式的形式給出(俗稱待定係數法),往往後者是更常見的。

對於例1 而言,我們可以很明確知道f(n)的表示式,故而時間複雜度是o(√n)

int factorial(int n)

涉及到遞迴函式,就沒有明確的基本操作了:需要轉換思路。設t(n)為factorial(n)的時間開銷函式。t(1)=o(1)。(1)的開銷為o(1),遞迴呼叫factorial(n-1)的時間開銷為t(n-1);故而有關係式t(n) = o(1) + t(n-1) (n > 1)成立。

下面進行數學演算:

從例2我們可以看到:這一次我們並沒有求出確切的表示式,只是給出了數量級而已。

切記形上學!

void fun()

}

n指的是問題規模而不是程式中出現的n,要明確其深刻含義。

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

執行效率是演算法的乙個重要的考量指標,演算法的執行效率用時間 空間複雜度來衡量。今天我們來學習一下複雜度的分析。通常我們可以通過執行程式來獲得演算法的真正的執行時間,這種方法我們可以稱為事後統計法,但這種方法得到的是具體的資料,測試結果很依賴測試環境,而且受資料規模影像最大。因此,我們需要乙個不需要...

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

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

複雜度分析(上)時間複雜度 空間複雜度

為了肉眼 實時 快速地來分析出 的複雜度,我們需要乙個不用具體的測試資料來測試,就可以粗略地估計演算法的執行效率的方法。時間複雜度 空間複雜度 表示演算法的執行時間與資料規模之間的增長關係。每行 對應的 cpu 執行的個數 執行的時間都不一樣,但是,我們這裡只是粗略估計,所以可以假設每行 執行的時間...