int cal(int n) }}
我們分析上面程式的時間是t(n)=(2n²+2n+3)*unit_time,unit_time表示每一行**執行的時間
所有**的執行時間和每行**的執行次數成正比,那麼我們就可以用如下的公式來表示:
t(n)=o(f(n))
t(n)表示**執行的時間,f(n)表示每行**執行的次數總和,大o表示**的執行時間和執行次數成的正比關係,所以上例的時間t(n)=o(2n²+2n+3),這就是大o時間複雜度表示,大o實際表達的是**執行時間隨資料增加的趨勢,也叫作漸進時間複雜度(asymptotic time complexity),簡稱時間複雜度。
1.只關注迴圈執行最多的一段**
int cal(int n)
return sum;
}
上述**,我們只需關注迴圈的**,所以時間複雜度是o(n)
2.加法規則:總複雜度等於量級最大的那段**的複雜度
int cal(int n)
int sum_2 = 0;
int q = 1;
for (; q < n; ++q)
int sum_3 = 0;
int i = 1;
int j = 1;
for (; i <= n; ++i)
}return sum_1 + sum_2 + sum_3;
}
第乙個迴圈因為只有100次,所以時間複雜度是o(1),第二個時間複雜度是o(n),第三個時間複雜度是o(n²),所以整個**的時間複雜度去最大量級的就是o(n²)
3.乘法法則:巢狀**的時間複雜度等於巢狀內外**的複雜度的乘積
int cal(int n)
} int f(int n)
return sum;
}
單獨看cal(n)函式中迴圈的時間複雜度是t1(n)=o(n),但是迴圈內部巢狀了個f(n)函式,f(n)的時間複雜度是t2(n)=o(n),所以總的時間複雜度是t(n)=t1(n)*t2(n)=o(n)*o(n)=o(n²)
常量:o(1)
線性:o(n)
對數:o(logn)
線性對數:o(nlogⁿ)
k次方階:o(n²),o(n³)…o
指數階:o(2ⁿ)
階乘:n!
1.分析一下o(logⁿ)和o(nlogⁿ)
i=1;
while (i <= n)
分析上述**的迴圈執行多少次,就可以知道此**的執行時間複雜度
i的取值如下:
2º,2¹,2²,....n
可以知道時間複雜度是o(logn)
2.o(m+n),o(m*n)時間複雜度由兩個資料的規模來決定
int cal(int m, int n)
int sum_2 = 0;
int j = 1;
for (; j < n; ++j)
return sum_1 + sum_2;
}
上述**,事先無法評判m還是n大,所以時間複雜度是o(m+n)
// n表示陣列array的長度
int find(int array, int n, int x)
} return pos;
}
上述**,從乙個陣列中查詢變數x,如果x在第乙個位置,那麼時間複雜度就是o(1),如果x在最後乙個位置,那麼時間複雜度就是o(n),每種情況下的時間複雜度是不同的
1、最好時間複雜度
在最理想的情況下執行這段**的時間
上述**的最好時間複雜度是o(1)
2、最壞情況時間複雜度
在最糟糕的情況下,執行這段**的時間複雜度
上述**的最壞時間複雜度是o(n)
3、平均時間複雜度
上述變數x要麼在陣列中,要麼不在陣列中,在陣列中的概率是1/2,不在陣列中的概率也是1/2,如果在陣列中,那麼在0~n-1位置之間的概率是1/n,考慮每種情況的概率,那麼平均時間複雜度如下:
4.均攤時間複雜度
這段**的平均時間複雜度就是o(n)
空間複雜度表示的演算法占用的儲存空間與資料規模之間的增長關係
void print(int n)
}
上述**的空間複雜度就是o(n)
常見的空間複雜度有o(1),o(n),o(n²)…
演算法複雜度 時間複雜度和空間複雜度
1 時間複雜度 1 時間頻度 乙個演算法執行所耗費的時間,從理論上是不能算出來的,必須上機執行測試才能知道。但我們不可能也沒有必要對每個演算法都上機測試,只需知道哪個演算法花費的時間多,哪個演算法花費的時間少就可以了。並且乙個演算法花費的時間與演算法中語句的執行次數成正比例,哪個演算法中語句執行次數...
演算法複雜度 時間複雜度和空間複雜度
演算法複雜度 時間複雜度和空間複雜度 關鍵字 演算法複雜度 時間複雜度 空間複雜度 1 時間複雜度 1 時間頻度 乙個演算法執行所耗費的時間,從理論上是不能算出來的,必須上機執行測試才能知道。但我們不可能也沒有必要對每個演算法都上機測試,只需知道哪個演算法花費的時 間多,哪個演算法花費的時間少就可以...
演算法複雜度 時間複雜度和空間複雜度
演算法的時間複雜度是指執行演算法所需要的計算工作量。n稱為問題的規模,當n不斷變化時,時間頻度t n 也會不斷變化。但有時我們想知道它變化時呈現什麼規律。為此,我們引入時間複雜度概念。一般情況下,演算法中基本操作重複執行的次數是問題規模n的某個函式,用t n 表示,若有某個輔助函式f n 存在乙個正...