時間複雜度:乙個演算法所花費的時間與其中語句執行次數成正比例,演算法中的基本操作的執行次數,為演算法的時間複雜度。
大o的漸進表示法:
用常數1取代執行時間中所有加法常數。
在修改後的執行次數函式中,只保留最高端項。
如果最高端存在且不是1,則去除與這個專案相乘的常數。的=得到的結果就是打o階。
注意:大o階漸進表示法去掉了那些對結果影響不大的項,簡潔明瞭的表示出了執行次數。
在實際中演算法的時間複雜度包含最好、最差、平均情況,而一般關注關注的是演算法的最壞運**況
例子1:
//計算func1時間複雜度
void
func1
(int n)
int m=10;
while
(m--
)//執行m=10次。
printf
("%d\n"
,count)
;}
分析可知:基本操作執行了2n+10次,由大o階漸進表示法為o(n)。
例子2:
//計算bubblesort的時間複雜度
void
bubblesort
(int
* a,
int n)}if
(exchange ==0)
}}
分析可知:由氣泡排序可知最好執行狀態就是n次,最壞執行了n*(n+1)/2,由大o階漸進表示法時間複雜度為o(n^2)。
例子3:
//計算binarysearch的時間複雜度
intbinarysearch
(int
* a,
int n,
int x)
return-1
;}
分析可知:可知該演算法是二分查詢演算法可以知道最好狀態下執行1次就成功了,最壞情況下也就o(logn),所以複雜度為o(logn)。
空間複雜度:空間複雜度是對乙個演算法在執行過程中臨時占用儲存空間大小的量度,所以空間複雜度算的就是變數的個數。用大o漸進表示法表示。
例子1:
//計算bubblesort的空間複雜度
void
bubblesort
(int
* a,
int n)}if
(exchange ==0)
break;}
}
分析可知:可知氣泡排序所用的常數個額外空間,所以其看空間複雜度為o(1)。
例子2:
// 計算fibonacci的空間複雜度?
long
long
*fibonacci
(size_t n)
return fibarray ;
}
分析可知:動態開闢了n個空間,所以空間複雜度為o(n)。
例子3:
// 計算階乘遞迴factorial的時間複雜度?
long
long
factorial
(size_t n)
分析可知:遞迴呼叫n次,開闢了n個棧幀,每乙個棧幀使用了常數個空間。所以空間複雜度為o(n)。 時間複雜度和空間複雜度詳解
本文 演算法的時間複雜度和空間複雜度合稱為演算法的複雜度。1.時間複雜度 1 時間頻度 乙個演算法執行所耗費的時間,從理論上是不能算出來的,必須上機執行測試才能知道。但我們不可能也沒有必要對每個演算法都上機測試,只需知道哪個演算法花費的時間多,哪個演算法花費的時間少就可以了。並且乙個演算法花費的時間...
時間複雜度和空間複雜度詳解
演算法的時間複雜度和空間複雜度合稱為演算法的複雜度。1.時間複雜度 1 時間頻度 乙個演算法執行所耗費的時間,從理論上是不能算出來的,必須上機執行測試才能知道。但我們不可能也沒有必要對每個演算法都上機測試,只需知道哪個演算法花費的時間多,哪個演算法花費的時間少就可以了。並且乙個演算法花費的時間與演算...
時間複雜度和空間複雜度詳解
演算法的時間複雜度和空間複雜度合稱為演算法的複雜度。1.時間複雜度 1 時間頻度 乙個演算法執行所耗費的時間,從理論上是不能算出來的,必須上機執行測試才能知道。但我們不可能也沒有必要對每個演算法都上機測試,只需知道哪個演算法花費的時間多,哪個演算法花費的時間少就可以了。並且乙個演算法花費的時間與演算...