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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

算法空间复杂度

發(fā)布時間:2023/12/31 编程问答 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 算法空间复杂度 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

在 算法時間復(fù)雜度 中,我們一塊了解了算法時間復(fù)雜度相關(guān)的內(nèi)容,比如常見的時間復(fù)雜度、時間復(fù)雜度的計算、以及提供了幾個簡單的例子來推算時間復(fù)雜度。今天就一塊來了解下算法的空間復(fù)雜度。

首先說下空間,拿吃飯舉例子吧:咱們把做好的菜從鍋里吃到肚里是需要碗的吧(你要是就著鍋吃飯那就……),如果鍋里的菜很多你還想一次性弄出來,是不是有兩種方案。一種是找個盡可能大的碗,一種是找很多個碗。算法也是一樣,數(shù)據(jù)從輸入到輸出中間的處理過程是需要容器的,換句話說就是需要空間的。

在上篇介紹時間復(fù)雜度的時候,我們知道了說一個算法的時間復(fù)雜度并不是說一個算法的具體的執(zhí)行時間的。空間復(fù)雜度也同理,并不是說一個算法執(zhí)行需要的具體空間大小。

定義

說下具體的定義吧:算法的空間復(fù)雜度通過計算算法所需的存儲空間實現(xiàn),算法空間復(fù)雜度的計算公式記作:S(n)=O(f(n)),其中,n為問題的規(guī)模,f(n)為語句關(guān)于n所占存儲空間的函數(shù)。

上段話中有個重點需要說下,和我舉的例子也是有關(guān)系的:所需的存儲空間指的是一個算法在運行過程中的臨時占用存儲空間,就像我舉例中的碗一樣,只是臨時用的。

一個算法在計算機存儲器上所占用的存儲空間,包括存儲算法本身所占用的存儲空間,算法的輸入輸出數(shù)據(jù)所占用的存儲空間和算法在運行過程中臨時占用的存儲空間這三個方面。

幾種情況

常量空間

類似于時間復(fù)雜度 O(1),當算法的存儲空間大小固定,和輸入規(guī)模沒有直接的關(guān)系時,空間復(fù)雜度記作O(1)。

int m = 2;

線性空間

當算法分配的空間是一個線性的集合(如數(shù)組),并且集合大小和輸入規(guī)模 n 成正比時,空間復(fù)雜度記作 O(n)。

int[] array = new int[n]

二維空間

當算法分配的空間是一個二維數(shù)組集合,并且集合的長度和寬度都與輸入規(guī)模 n 成正比時,空間復(fù)雜度記作 O(n2n^2n2)。

int[][] matrix = new int[n][n];

類似時間復(fù)雜度,如果為 int[][] matrix = new int[m][n]; 的話,復(fù)雜度就是 O(mnmnmn) 了。

遞歸空間

先說下遞歸吧,說白了就是自己調(diào)用自己,比如下面的代碼:

void fun4(int n){if(n<=1){return;}fun4(n-1);}

再說下遞歸空間吧,正如上述代碼一樣,遞歸代碼中沒有顯示聲明變量或者集合,但是計算機在執(zhí)行程序時,會專門分配一塊內(nèi)存,用來存儲“方法調(diào)用棧”。方法調(diào)用棧包括入棧和出棧兩個操作:

  • 當進入一個新方法時,執(zhí)行入棧操作,把調(diào)用的方法和參數(shù)信息壓入棧中。
  • 當方法返回時,執(zhí)行出棧操作,把調(diào)用的方法和參數(shù)信息從棧中彈出。

還是上述代碼,假設(shè)現(xiàn)在傳入?yún)?shù) 5,那么方法 fun4(5) 的調(diào)用信息先入棧:

接下來遞歸調(diào)用相同的方法,方法 fun4(4) 的調(diào)用信息入棧:

依次類推,遞歸越來越深,棧內(nèi)的元素也越來越多,最終形成下圖:

當 n=1 的時候,觸發(fā)遞歸的結(jié)束條件,執(zhí)行 return,方法出棧。

最終,所有入棧的元素都會出棧。

由上面“方法調(diào)用棧”的出入棧過程可以看出,執(zhí)行遞歸操作所需要的內(nèi)存空間和遞歸的深度成正比。純粹的遞歸操作的空間復(fù)雜度也是線性的,如果遞歸的深度是n,那么空間復(fù)雜度就是 O(n)。

此部分的棧的相關(guān)特性以后會有博文介紹,請期待~

兩種思想

時間換空間與空間換時間

TODO:等看力扣的時候補充具體的案例

總結(jié)

以上是生活随笔為你收集整理的算法空间复杂度的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。