從字面解析,就是乙個演算法執行的時間,很多小夥伴都想到了把演算法程式執行一遍,那麼消耗的時間就自然而然的知道了,這種方式是可以的,但是有很多的弊端,很容易受到執行環境的影響,效能的高低相差很大,對使用的資料規模也有關係。所以還是不能完整的去執行它。
這樣一種通用的方式就誕生了,「大o符號表示法」,在 大o符號表示法中,時間複雜度的公式是:t(n) = o( f(n) ),其中f(n) 表示每行**執行次數之和,而 o 表示正比例關係,這個公式的全稱是:演算法的漸進時間複雜度。這種方式並不是用於來真實代表演算法的執行時間的,表示執行時間增長的變化趨勢的。
1. 常數階o(1)
int i = 1;
int j = 2;
++i;
j++;
int m = i + j;
沒有迴圈等複雜結構,它的消耗並不隨著某個變數的增長而增長,無論有多長,這個**的時間複雜度就都是o(1)。
2.線性階o(n)
for(i=1; i<=n; ++i)
for迴圈裡面的**會執行n遍,因此它消耗的時間是隨著n的變化而變化的,這類**都可以用o(n)來表示它的時間複雜度。
3. 對數階o(logn)
int i = 1;
while(i在while迴圈裡面,每次都將 i 乘以 2,乘完之後,i 距離 n 就越來越近了。假設迴圈x次之後,i 就大於 2 了,此時這個迴圈就退出了,也就是說 2 的 x 次方等於 n,那麼 x = log2^n也就是說當迴圈 log2^n 次以後,這個**就結束了。因此這個**的時間複雜度為:o(logn)
4. 線性對數階o(nlogn)
for(m=1; m線性對數階o(nlogn) 其實非常容易理解,將時間複雜度為o(logn)的**迴圈n遍的話,那麼它的時間複雜度就是 n * o(logn),也就是了o(nlogn)。
5. 平方階o(n²)
for(x=1; i<=n; x++)
}
平方階o(n²) 就很容易理解了,如果把 o(n) 的**再巢狀迴圈一遍,它的時間複雜度就是 o(n²) 了。 時間複雜度解析
演算法,作為乙個programmer應該再清楚不過。乙個演算法的好壞是依靠什麼標準 來評判的呢?那就是時間複雜度和空間複雜度。今天就來 下時間複雜度,什麼是時間複雜度呢?在電腦科學中,時間複雜性,又稱時間複雜度,演算法的時間複雜度是乙個函式,它定性描述該演算法的執行時間。這是乙個代表演算法輸入值的字...
時間複雜度 解析
通常是用 大 o big o 表示法,來表示時間最壞複雜度 公式t n o f n f n 既函式總執行次數 推導大o階方法 1.用常數 1 取代執行時間中的所有加法常數 2.在修改後的執行次數函式中,只保留最高端 3.如果最高端存在且不是 1 則去除與這個項相乘的常數 常數階 o 1 示例 int...
解析時間複雜度和空間複雜度
說明 時間複雜度和空間複雜度從字面上理解 時間複雜度 時間複雜度的表示方法 一般用大o符號表示法表示,o f n n是影響複雜度變化的因子,f n 是複雜度的演算法。這個表示方法不是具體的運算時間,而是 執行時間的增長變化趨勢。隨著n的增長,演算法的執行運算時間增長速度記為f n 常見的時間複雜度量...