演算法的時間複雜度和空間複雜度

2021-09-11 23:19:08 字數 1785 閱讀 6281

1、時間複雜度

(1)時間頻度 乙個演算法執行所耗費的時間,從理論上是不能算出來的,必須上機執行測試才能知道。但我們不可能也沒有必要對每個演算法都上機測試,只需知道哪個演算法花費的時間多,哪個演算法花費的時間少就可以了。並且乙個演算法花費的時間與演算法中語句的執行次數成正比例,哪個演算法中語句執行次數多,它花費時間就多。乙個演算法中的語句執行次數稱為語句頻度或時間頻度。記為t(n)。

(2)時間複雜度 在剛才提到的時間頻度中,n稱為問題的規模,當n不斷變化時,時間頻度t(n)也會不斷變化。但有時我們想知道它變化時呈現什麼規律。為此,我們引入時間複雜度概念。 一般情況下,演算法中基本操作重複執行的次數是問題規模n的某個函式,用t(n)表示,若有某個輔助函式f(n),使得當n趨近於無窮大時,t(n)/f(n)的極限值為不等於零的常數,則稱f(n)是t(n)的同數量級函式。記作t(n)=o(f(n)),稱o(f(n)) 為演算法的漸進時間複雜度,簡稱時間複雜度。

(3)求解演算法的時間複雜度的具體步驟是:

⑴ 找出演算法中的基本語句;

演算法中執行次數最多的那條語句就是基本語句,通常是最內層迴圈的迴圈體。

⑵ 計算基本語句的執行次數的數量級;

只需計算基本語句執行次數的數量級,這就意味著只要保證基本語句執行次數的函式中的最高次冪正確即可,可以忽略所有低次冪和最高次冪的係數。這樣能夠簡化演算法分析,並且使注意力集中在最重要的一點上:增長率。

⑶ 用大ο記號表示演算法的時間效能。

將基本語句執行次數的數量級放入大ο記號中。

如果演算法中包含巢狀的迴圈,則基本語句通常是最內層的迴圈體,如果演算法中包含並列的迴圈,則將並列迴圈的時間複雜度相加。

(4)時間複雜度計算規則:

⑴ 只保留高階項

⑵ 不要係數

(4)簡單示例:

f(n)=2

o(f(n))=o(1)

for(int i=1;i2^x=n -> x= logn

for (i=2;i<=n;++i)

for(j=2;j<=i-1;++j)

2*(0+1+2+3+…+n-2)=n^2-2n+1 =o(n^2)

(5)常用的演算法的時間複雜度和空間複雜度

排序法平均時間

最差情形

穩定度額外空間

備註氣泡排序

o(n^2)

o(n^2)

穩定o(1)

n小時較好

交換排序

o(n^2)

o(n^2)

不穩定o(1)

n小時較好

選擇排序

o(n^2)

o(n^2)

不穩定o(1)

n小時較好

插入排序

o(n^2)

o(n^2)

穩定o(1)

大部分已排序時較好

基數排序

o(logrb)

o(logrb)

穩定o(n)

b是真數(0-9),r是基數(個十百)

shell排序

o(nlogn)

o(n^s)1不穩定

o(1)

s是所選分組

快速排序

o(nlogn)

o(n^2)

不穩定o(nlogn)

n小時較好

歸併排序

o(nlogn)

o(nlogn)

穩定o(1)

n小時較好

堆排序o(nlogn)

o(nlogn)

不穩定o(1)

n小時較好

演算法複雜度 時間複雜度和空間複雜度

1 時間複雜度 1 時間頻度 乙個演算法執行所耗費的時間,從理論上是不能算出來的,必須上機執行測試才能知道。但我們不可能也沒有必要對每個演算法都上機測試,只需知道哪個演算法花費的時間多,哪個演算法花費的時間少就可以了。並且乙個演算法花費的時間與演算法中語句的執行次數成正比例,哪個演算法中語句執行次數...

演算法複雜度 時間複雜度和空間複雜度

演算法複雜度 時間複雜度和空間複雜度 關鍵字 演算法複雜度 時間複雜度 空間複雜度 1 時間複雜度 1 時間頻度 乙個演算法執行所耗費的時間,從理論上是不能算出來的,必須上機執行測試才能知道。但我們不可能也沒有必要對每個演算法都上機測試,只需知道哪個演算法花費的時 間多,哪個演算法花費的時間少就可以...

演算法複雜度 時間複雜度和空間複雜度

演算法的時間複雜度是指執行演算法所需要的計算工作量。n稱為問題的規模,當n不斷變化時,時間頻度t n 也會不斷變化。但有時我們想知道它變化時呈現什麼規律。為此,我們引入時間複雜度概念。一般情況下,演算法中基本操作重複執行的次數是問題規模n的某個函式,用t n 表示,若有某個輔助函式f n 存在乙個正...