1、嵌套循環(huán)時間復(fù)雜度的計算
該程序,最上面的嵌套循環(huán)里,i每執(zhí)行一次,j就執(zhí)行N次,所以嵌套循環(huán)執(zhí)行次數(shù)為N*N次;中間的k變量循環(huán)了2*N次;最后M變量循環(huán)10次。所以總共執(zhí)行了 N*N+2*N+10 次!
所以該程序時間復(fù)雜度為O(N2) 。
2、雙重循環(huán)時間復(fù)雜度的計算
該程序,上面的for循環(huán)執(zhí)行了2*N次,下面的M循環(huán)了10次。所以該時間復(fù)雜度的函數(shù)式為 F(N)=2N+10。則時間復(fù)雜度為O(N)。
該程序,上面的循環(huán)了M次,下面循環(huán)了N次,所以該時間復(fù)雜度為O(M+N)。
3、常數(shù)循環(huán)時間復(fù)雜度的計算
該程序執(zhí)行了100次,因為沒有未知數(shù)是常數(shù)次,所以該程序的時間復(fù)雜度為O(1)。注意不是代表算法運(yùn)行一次,運(yùn)行的是常數(shù)次。
4、strchr時間復(fù)雜度的計算
strchr的功能是查找字符,程序大致如下:
我們假設(shè)從hello world中去查找字符,那么
所以我們認(rèn)為該時間復(fù)雜度為最壞情況O(N)。
5、冒泡排序的時間復(fù)雜度計算
冒泡排序的執(zhí)行次數(shù)是(N-1)+(N-2)+…+1次。
舉個例子來說,一個數(shù)列 5 4 3 2 1 進(jìn)行冒泡升序排列,第一次大循環(huán)從第一個數(shù)(5)開始到倒數(shù)第二個數(shù)(2)結(jié)束。
比較過程:先比較5和4,4比5小,交換位置變成4 5 3 2 1,比較5和3,3比5小,交換位置變成4 3 5 2 1……最后比較5和1,1比5小,交換位置變成4 3 2 1 5,這時候共進(jìn)行了4次比較交換運(yùn)算,最后1個數(shù)變成了數(shù)列最大數(shù)。
對于n位的數(shù)列則有比較次數(shù)為 (n-1) + (n-2) + …… + 1 = n * (n - 1) / 2,也就是等差數(shù)列求和,這就得到了最大的比較次數(shù)。
將n * (n - 1) / 2展開得到的最大量級為n2。所以冒泡排序的時間復(fù)雜度為O(n2)。
6、二分查找的時間復(fù)雜度計算
算時間復(fù)雜度不能只是去看幾層循環(huán),而是要去看它的思想。
此處,二分查找每查找一次就要除以2。假設(shè)一個數(shù)組大小為N,那么每查找一次,N就要除以2,最好的情況是O(1),最壞的情況是查找到最后N/2/2/…/2=1,也就是2x=N,所以X=log2N
所以是二分查找時間復(fù)雜度為
7、計算n的階乘遞歸時間復(fù)雜度計算
遞歸算法:遞歸次數(shù)*每次遞歸調(diào)用的次數(shù)。
這里遞歸了N次,而每次調(diào)用的次數(shù)為常數(shù)次,所以可忽略,則該時間復(fù)雜度為O(N)。
8、斐波那契的時間復(fù)雜度計算
這里也可用遞歸算法求,也就是遞歸次數(shù)*每次遞歸調(diào)用的次數(shù)。
遞歸次數(shù)為20+21+…+2n-1,而每次遞歸調(diào)用的次數(shù)為常數(shù)次可忽略不計。所以可看成等比數(shù)列求和。
所以該時間復(fù)雜度為O(2N)。文章來源:http://www.zghlxwxcb.cn/news/detail-726290.html
最后總結(jié),我們計算時間復(fù)雜度不能單純只看執(zhí)行次數(shù),最好是畫圖自己理解計算,利用公式等來求我們的時間復(fù)雜度。文章來源地址http://www.zghlxwxcb.cn/news/detail-726290.html
到了這里,關(guān)于數(shù)據(jù)結(jié)構(gòu):關(guān)于時間復(fù)雜度的例題計算的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!