資料結構與演算法 時間複雜度和空間複雜度

2022-07-04 17:45:09 字數 1360 閱讀 2624

一、階數比較

時間複雜度判斷理論: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

;int b=a+2;

這種只執行常數規模的情況時間複雜度是o(1)

2、對數階(o(log2n))

1

int n=100;2

int i=1;3

while(i<=n)

在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)

3、線性階

1

int j=0;2

for(int i=1;i<=n;i++)

這個**,for迴圈裡面的**會執行n編,因此它消耗的時間是隨著n的變化而變化o(n)

4、線性對數階o(nlogn)

1

int j=0;2

for(int i=1;i<=n;i++)

7 }

線性對數階o(nlogn) 其實非常容易理解,將時間複雜度為o(logn)的**迴圈n遍的話,那麼它的時間複雜度就是 n * o(logn),也就是了o(nlogn)。

5、平方階o(n2)

1

int a=0;2

for(int i=1;i<=n;i++)

7 }

如果把 o(n) 的**再巢狀迴圈一遍,它的時間複雜度就是 o(n²),這段**其實就是巢狀了2層n迴圈,它的時間複雜度就是 o(nn),即 o(n²) 如果將其中一層迴圈的n改成m,那它的時間複雜度就變成了 o(mn)

1

for(i=o;i)

67 }

這裡分析下,當i=0的時候,j可以迴圈n次,i=1的時候,j迴圈n-1次,所以得出:

n+n-1+n-2+.....+1=(n+1)*n/2=n^2/2+n/2;也是o(n2)

6、k次方階

同2次方階

資料結構與演算法 時間複雜度與空間複雜度

解決乙個問題的方法可能有很多,但能稱得上演算法的,首先它必須能徹底解決這個問題 稱為準確性 且根據其編寫出的程式在任何情況下都不能崩潰 稱為健壯性 程式和演算法是完全不同的概念。演算法是解決某個問題的想法 思路 而程式是在根據演算法編寫出來的真正可以執行的 例如,要依次輸出一維陣列中的資料元素的值,...

資料結構和演算法(時間複雜度和空間複雜度)

測試演算法效率 即運算時間 事後統計方法 主要通過設計好的測試程式和資料,利用計算機計時器對不同演算法編制的程式的執行時間進行比較,從而確定演算法效率的高低 事前分析估算方法 比上個方法更優 在計算機編寫程式前,依據統計方法對演算法進行估算 乙個高階語言在計算機上執行時所消耗的時間取決於下列因素 1...

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

演算法效率分兩種,時間效率和空間效率,即時間複雜度和空間複雜度,前者衡量演算法執行速度,後者衡量演算法所需要的額外空間 2.1基本概念 演算法中的時間複雜度是乙個函式,定量描述了演算法執行時間 總結下來就是 演算法種基本操作的執行次數 關注點 操作的數量級 基本操作的執行次數 執行時間和硬體資源強相...