時間複雜度和空間複雜度

2021-08-16 20:32:42 字數 982 閱讀 2224

在進行演算法分析時,語句總的執行次數t(n)是關於問題規模n的函式,進而分析t(n)隨n的變化情況並確定t(n)的數量級。演算法的時間複雜度,也就是演算法的時間量度,記作:t(n)=o(f(n))。它表示隨問題規模n的增大,演算法執行的時間的增長率和f(n)的增長率相同,稱作演算法的漸近時間複雜度,簡稱為時間複雜度。其中f(n)是問題規模n的某個函式。

--用常數1取代執行時間中的所有加法常數。

--在修改後的執行次數函式中,只保留最高端項。

--如果最高端項存在且不是1,則去除與這個項相乘的常數。

--得到的最後結果就是大o階。

int sum = 0;

sum = (1+n)*n/2;

並不是由多少句就有o(多少)的複雜度,其實常量相加統一為o(1);

int n=100,sum=0;

for(int i=0;isum=sum+i

這是簡單的for迴圈,在迴圈體中的**需要這姓n次,所以時間複雜度為o(n);

int i,j,n=100;

for(i=0;ifor(j=0;jprintf();

n=100;外層執行1次,內層執行100次。所以當外層執行100次的時候。需要執行100*100次,也就是n的平方。

所以這段**的時間複雜度為o(n^2)。如果有三個這樣的巢狀迴圈則為o(n^3)。

int i,j,n=100;

for(i=0;ifor(j=i;jprintf();

n+(n-1)+(n-2)+...+1=n(n+1)/2

高斯定理。n^2/2+n/2

推理:根據上面的「分析「推理,第一條忽略,因為沒有常數相加。第二條只保留最高項,所以n/2這項去掉。第三條,去除與最高項相乘的常數,最終o(n^2)。

int i=1,n=100;

while(ii=i*2;

2的x次方等於n 得到x等於log(2)n  所以時間複雜度為logn

一般情況下,隨著輸入規模n的增大,t(n)增長最慢的演算法為最優演算法。

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

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

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

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

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

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