資料結構時間複雜度計算

2021-07-06 03:57:42 字數 1871 閱讀 6371

(1)for迴圈

一次for迴圈的執行時間至多是該for迴圈內語句的執行時間乘以迭代次數。

(2)巢狀的for迴圈

肯定是計算最內層迴圈語句的執行次數,然後再乘以所以迴圈的迭代次數。

(3)整個程式

其實找到迴圈迭代次數最多,巢狀最多的進行計算就好。

3、當然,我們計算的只是大概值,而且為了計算的簡便,我們一邊進行適當的放大,即只考慮最壞最壞的情況,算出其時間複雜度即可。

二、最大子串行

書中通過4種不同的解法來進一步強化我們應該如何計算時間複雜度,小白我也好好學習了下,在此寫下學習筆記。

題目:算出乙個整數序列中最大的子串行的值。

演算法一:

int maxsubsequencesum1(const int a,int n)

if(thissum>maxsum)}}

if(maxsum==0)

if(i!=n)

}maxsum=max;}}

return maxsum;

}我們可以看出其最大的for迴圈有三重,而且最壞的可能迭代次數都是n,所以我們可以很容易的得出,此演算法的時間複雜度為o(n^3),其中資源最明顯的浪費就在重複計算了從低i到第k的子串行的值,所以演算法二便是進行了簡單的修改。 

演算法二: 

int maxsubsequencesum2(const int a,int n)}}

if(maxsum==0)

if(i!=n)

}maxsum=max;}}

return maxsum;

}其實改變的地方即使採用的累加的策略而已,但卻使效率大大的提高了,所以這裡也是提高演算法效率的乙個小小的技巧,即盡力減少不必要的計算,盡量利用現有的計算結果。 

演算法三:

int max3(const int a,const int b,const int c)

int maxsubsum(const int a,int left,int right)

int center=(right+left)/2;

maxleftsum=maxsubsum(a, left, center);

maxrightsum=maxsubsum(a, center+1, right);

leftbordersum=maxleftbordersum=0;

for(int i=center;i>=left;i--)

}rightbordersum=maxrightbordersum=0;

for(int i=center+1;i<=right;i++)

}return max3(maxleftsum,maxrightsum,maxleftbordersum+maxrightbordersum);

}int maxsubsequencesum3(const int a,int n)

if(i!=n)

}maxsum=max;}}

return maxsum;

}這個演算法使用了分治的思想,還有遞迴的思想,即把乙個問題不斷的分解成類似的規模更小的子問題來解決,所以這裡我們要求乙個序列的最大子串行,其實就是求左半部分,有伴部分和中間部分的最大子串行,而求左半部分,後半部分的最大子串行顯然是將問題的規模變小了,所以可以遞迴使用,直到剩下乙個數的情況.而中間部分呢,則取左右兩邊,左邊從右往左,右邊從左往右的最大子串行。然後加起來作為中間部分的值,最後比較中間部分,左半部分,後半部分三部分的值就可以得到結果啦。

演算法四:

int maxsubsequencesum4(const int a,int n)

else if(thissum<0)

}if(maxsum==0)

if(i!=n)

}maxsum=max;}}

return maxsum;

}

資料結構 時間複雜度計算

1.演算法的特性 輸入 input 乙個演算法有0個或多個輸入,以刻畫運算物件的初始情況,所謂0個輸入是指演算法本身定出了初始條件 輸出 output 乙個演算法有乙個或多個輸出,以反映對輸入資料加工後的結果。沒有輸出的演算法是毫無意義的。可以在控制台列印輸出或者返回乙個或多個值等。確定性 defi...

資料結構 時間複雜度計算

1.演算法的特性 輸入 input 乙個演算法有0個或多個輸入,以刻畫運算物件的初始情況,所謂0個輸入是指演算法本身定出了初始條件 輸出 output 乙個演算法有乙個或多個輸出,以反映對輸入資料加工後的結果。沒有輸出的演算法是毫無意義的。可以在控制台列印輸出或者返回乙個或多個值等。確定性 defi...

資料結構 時間複雜度 空間複雜度

1.演算法效率 演算法效率可以用來衡量乙個演算法的好壞 演算法效率分析分為兩種 第一種是時間效率,第二種是空間效率.時間效率被稱為時間複雜度,空間效率被稱為空間複雜度.時間複雜度主要衡量的是乙個演算法的執行速度,而空間複雜度主要衡量乙個演算法所需要的額外空間,在計算機發展的早期,計算機的儲存容量很小...