例1. 分析以下演算法的時間複雜度。
voidf(
int n)
}
分析:演算法中while迴圈的if條件包含的p=p*f
語句可以不考慮,因為它執行的次數不超過d=d/2
語句的執行次數。
基本運算是語句d=d/2
(或f=f*f
),設其執行時間為t(n
)t(n)
t(n)
,則有d=n
/2t(
n)
>0≥
1,2t
(0)≤
nd=n/2^>0\geq 1,2^\le n
d=n/2t
(n)>0≥
1,2t
(0)≤
n,即t(n
)≤lo
gn=o
(log
n)
t(n)\leq logn=o(logn)
t(n)≤l
ogn=
o(lo
gn)
例2.分析下列演算法的時間複雜度
字串逆置(順序表逆置)
void
reverse
(char
* p)
}
基本語句為ch=p[i]
,頻數為n/2,時間複雜度為o(n
)o(n)
o(n)
。例3.分析下列演算法的時間複雜度
從二維整型陣列a[m][n]
中查詢出最大元素所在的行、列下標。
void
find
(int a[m]
[n],
int m,
int n,
int& lin,
int& col)}}
}
時間複雜度為o(m
×n
)o(m\times n)
o(m×n)
。例4.分析下列演算法複雜度。
void
func
(int n)
}
時間複雜度為o(n
12
)o(n^)
o(n21
)。
複雜度分析 時間複雜度 空間複雜度
執行效率是演算法的乙個重要的考量指標,演算法的執行效率用時間 空間複雜度來衡量。今天我們來學習一下複雜度的分析。通常我們可以通過執行程式來獲得演算法的真正的執行時間,這種方法我們可以稱為事後統計法,但這種方法得到的是具體的資料,測試結果很依賴測試環境,而且受資料規模影像最大。因此,我們需要乙個不需要...
複雜度分析 時間複雜度分析和空間複雜度分析
其實,只要講到資料結構與演算法,就一定離不開時間 空間複雜度分析。而且我個人認為,複雜度分析是整個演算法學習的精髓,只要掌握了它,資料結構和演算法的內容基本上就掌握了一半。1.時間複雜度分析 對於剛才羅列的複雜度量級,我們可以粗略地分為兩類,多項式量級和非多項式量級。其中,非多項式量級只有兩個 o ...
複雜度分析(上)時間複雜度 空間複雜度
為了肉眼 實時 快速地來分析出 的複雜度,我們需要乙個不用具體的測試資料來測試,就可以粗略地估計演算法的執行效率的方法。時間複雜度 空間複雜度 表示演算法的執行時間與資料規模之間的增長關係。每行 對應的 cpu 執行的個數 執行的時間都不一樣,但是,我們這裡只是粗略估計,所以可以假設每行 執行的時間...