2、目前見過比較多的解釋:演算法的空間複雜度通過計算,演算法所需的儲存空間實現,演算法的空間複雜度的計算公式記作:s(n)=o(f(n)),其中,n為問題的規模,f(n)為語句關於n所佔儲存空間的函式。
這上面的定義都有點抽象下面是關於我自己的一點理解
3、關於我自己的一點理解,讓我們先來分別看兩段段**:
**一如下:
int arr=new int[n];
for(int i=0;i**二如下:
public void fun(int n){
for(int i=0;i分析**一:
在**一中arr陣列的大小並不確定,所以該陣列所占用的空間大小是所有元素之和,那麼也就是說它的空間複雜度為n,記為o(n)。它的時間複雜度為n,記為o(n);
分析**二:
在該方法中的**並沒有發生額外的分配空間的情況,不論輸入值的大小空間的複雜度始終為1,所以記為o(1)。而時間複雜度為n,記為o(n)。
小結:1、經過兩段**的分析,可以得出第一段**陣列的大小為n,也就是說程式為數內的元素分配了n個空間,那麼空間複雜度就是o(n);
2、第二段**中可以看出,在執行過程中其並沒有發生任何的分配空間的情況,因此我們可以認為它的空間複雜度是常數級別的,就是o(1)
3、如果需要輸入n個資料,每個資料因為需要和其他n個資料聯絡,所以要分配n*n個空間,或者說n的平方的空間,我們就說o(n²)個空間複雜度,這也是因為n是未知的,這個說明的經典的例子就是二維陣列
小白一枚如果有誤希望老哥們指點一下老弟
概念理解 時間複雜度 空間複雜度
一.時間複雜度 time complexity 在進行演算法分析時,語句總執行次數t n 是關於問題規模 n 的函式。進而分析執行次數t n 隨規模 n 的變化情況並確定t n 的數量級。演算法的時間複雜度就是演算法的時間度量,記作t n o f n 它表示隨問題規模 n 的增大,演算法的執行時間的...
時間複雜度 和 空間複雜度 的理解
目錄 時間複雜度 時間複雜度計算 空間複雜度 空間複雜度計算 常量空間 線性空間 二維空間 遞迴空間 若存在函式f n 當n趨於無窮大時,t n f n 的極限值是不為零的常數,那麼就稱f n 是t n 的同數量級函式。記作t n o f n 也稱之為o f n o為演算法的時間複雜度。知道了什麼是...
關於時間複雜度空間複雜度的理解
對於非科班出身的人來說,在學習演算法的時候經常會遇到的問題就是關於對事件空間複雜度的 理解。大 o 表示法 的準確的數學描述方式非常枯燥,我在這裡就不貼出來湊字數了,其實大 o 表示法的意思挺簡單的,就是表示 隨著輸入的值變化,程式執行所需要的時間與輸入值的變化關係。我們先看第乙個 這是乙個函式,輸...