日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【算法的时间复杂度和空间复杂度】-算法02

發布時間:2025/3/21 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【算法的时间复杂度和空间复杂度】-算法02 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

算法的時間復雜度和空間復雜度

一個算法的好壞我們主要從"時間"和"空間" 兩個維度來衡量

時間維度:是指執行當前算法所消耗的時間,我們通常用 “時間復雜度” 來描述。

空間維度:是指執行當前算法需要占用多少內存空間,我們通常用 “空間復雜度” 來描述。

1. 時間復雜度

我們先來看一個簡單的例子

public class TimeCompare {public static void main(String[] args) {int num1=0;int num2=0;//計算1-1000的和-循環求和long start1 = System.currentTimeMillis();for(int i=1;i<=100000;i++){num1+=i;}long start2 = System.currentTimeMillis();//前n項和公式:(首項+末項)*項數/2long start3 = System.currentTimeMillis();num2=(1+100000)*100000/2;long start4 = System.currentTimeMillis();System.out.println("num1:"+num1+" 時間:"+(start2-start1)+"ms");System.out.println("num2:"+num2+" 時間:"+(start4-start3)+"ms");} }

結果:

num1:705082704 時間:3ms num2:705082704 時間:0ms

兩種方法都可以算出前n項和,但是時間上面卻是天壤之別

上面我們通過運行程序得到的時間并不能真正表示時間復雜度,因為程序的運行會受計算機和運行環境的影響

大O符號表示法:
我們一般用 “算法的漸進時間復雜度” 衡量時間復雜度 即:T(n) = O(f(n))

解釋: f(n) 表示每行代碼執行次數之和

舉個栗子:

for(int i=0;i<n;i++){System.out.println("時間復雜度")}

時間復雜度為n,因為輸出語句會執行n次

注意:我們求時間復雜度時,直接保留最高次的即可,并且最高次的系數可以省略,常數也可以省略

如:3n^2+2n+1我們會寫為:T(n)=n^2

常見的時間復雜度量級有:

  • 常數階O(1) 只要沒有循環等復雜結構就是常數階

  • 對數階O(logN)

    //跳出循環需要 2^X=n 即 X=logN(2為底) 事件復雜度為:O(logN) int i = 1; while(i<n) {i = i * 2; }
  • 線性階O(n) n次循環就是線性階

  • 線性對數階O(nlogN) n次對數階

  • 平方階O(n2)

  • 立方階O(n3)

  • K次方階O(n^k)

  • 指數階(2^n)

從上到下時間復雜度依次變大,程序效率變低

2. 空間復雜度

空間復雜度是對一個算法在運行過程中臨時占用存儲空間大小的一個量度,同樣反映的是一個趨勢,我們用

S(n) =O(fn)來定義。

空間復雜度常用的有:O(1)、O(n)、O(n^2)、O(n^3)…

例:

算法執行需要的臨時空間不會隨著某個變量n的變化而變化,

此時空間復雜度為常量:即S(n)=O(1)

//S(n)=O(1) int i=0; i++; int j=0,k=1; //空間復雜度為:S(n)=O(n) int[] arr=new int[n]; for(int i=0;i<arr.length;i++){arr[i]=i; }

空間復雜度再看只看占用空間(內存)大小-即聲明的變量,和執行次數無關

總結

以上是生活随笔為你收集整理的【算法的时间复杂度和空间复杂度】-算法02的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。