一、階數比較
時間複雜度判斷理論:o(1) <= o(log2(n)) <= o(n) <= o(n*log2(n)) <= o(n^2) <=...<=o(n^k) <= o(2^n)
二、計算方法
用常數1代替執行時間中的所有加法常數
修改後的執行次數中只保留最高端項
去除最高端項的係數
三、常見的求時間複雜度例子
1、常數階
int a=1這種只執行常數規模的情況時間複雜度是o(1);int b=a+2;
2、對數階(o(log2n))
1在while迴圈裡每次都將i乘以2,i距離n越來越近,如果迴圈x次之後i大於n此時這個迴圈退出也就是說2的x次方等於n那麼x=log2n也就是說當迴圈log2n次以後,這個**就結束了,此時這個短髮的時間複雜度是o(log2n),o(log2n)的這個n是隨著**變化的,如果裡面不是2倍遞增則將發生相應變化eg:i=i*3 則時間複雜度為o(log3n)int n=100;2
int i=1;3
while(i<=n)
3、線性階
1這個**,for迴圈裡面的**會執行n編,因此它消耗的時間是隨著n的變化而變化o(n)int j=0;2
for(int i=1;i<=n;i++)
4、線性對數階o(nlogn)
1線性對數階o(nlogn) 其實非常容易理解,將時間複雜度為o(logn)的**迴圈n遍的話,那麼它的時間複雜度就是 n * o(logn),也就是了o(nlogn)。int j=0;2
for(int i=1;i<=n;i++)
7 }
5、平方階o(n2)
1如果把 o(n) 的**再巢狀迴圈一遍,它的時間複雜度就是 o(n²),這段**其實就是巢狀了2層n迴圈,它的時間複雜度就是 o(nn),即 o(n²) 如果將其中一層迴圈的n改成m,那它的時間複雜度就變成了 o(mn)int a=0;2
for(int i=1;i<=n;i++)
7 }
1這裡分析下,當i=0的時候,j可以迴圈n次,i=1的時候,j迴圈n-1次,所以得出:for(i=o;i)
67 }
n+n-1+n-2+.....+1=(n+1)*n/2=n^2/2+n/2;也是o(n2)
6、k次方階
同2次方階
資料結構與演算法 時間複雜度與空間複雜度
解決乙個問題的方法可能有很多,但能稱得上演算法的,首先它必須能徹底解決這個問題 稱為準確性 且根據其編寫出的程式在任何情況下都不能崩潰 稱為健壯性 程式和演算法是完全不同的概念。演算法是解決某個問題的想法 思路 而程式是在根據演算法編寫出來的真正可以執行的 例如,要依次輸出一維陣列中的資料元素的值,...
資料結構和演算法(時間複雜度和空間複雜度)
測試演算法效率 即運算時間 事後統計方法 主要通過設計好的測試程式和資料,利用計算機計時器對不同演算法編制的程式的執行時間進行比較,從而確定演算法效率的高低 事前分析估算方法 比上個方法更優 在計算機編寫程式前,依據統計方法對演算法進行估算 乙個高階語言在計算機上執行時所消耗的時間取決於下列因素 1...
資料結構 時間複雜度與空間複雜度
演算法效率分兩種,時間效率和空間效率,即時間複雜度和空間複雜度,前者衡量演算法執行速度,後者衡量演算法所需要的額外空間 2.1基本概念 演算法中的時間複雜度是乙個函式,定量描述了演算法執行時間 總結下來就是 演算法種基本操作的執行次數 關注點 操作的數量級 基本操作的執行次數 執行時間和硬體資源強相...