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

2021-09-20 15:17:22 字數 2440 閱讀 7003

如何衡量乙個演算法的好壞?

演算法:用一系列的計算步驟,將輸入資料轉化為輸出結果

演算法效率:時間效率(時間複雜度)和空間效率(空間複雜度)

乙個演算法的好壞取決於這個演算法的效率,即時間效率和空間效率,時間和空間效率約高,演算法越好。

什麼是時間複雜度?

演算法中的基本操作的執行次數,稱為演算法的時間複雜度。

時間複雜度為什麼不使用時間來衡量而使用基本語句的執行次數來衡量?

因為每台計算機的cpu等硬體條件不同,對於同乙個演算法,計算時間可能會有不同,如果用時間衡量時間複雜度,不具代表性,而每個演算法基本語句的執行次數是相同的,所以用基本語句的執行次數來衡量時間複雜度。

時間複雜度的o漸進表示法

(1)用常數1取代執行時間中的所有加法常數,例:o(10)=>o(1)

(2)在修改後的執行次數函式中,只保留最高端項,例:o(n^2+n)=> o(n^2)

(3)如果最高端項存在且不是1,則去除與這個項相乘的常數,例:o(2n^2)=> o(n^2)

所以,乙個演算法執行的基本操作次數為n^2+2n+10,時間複雜度為 o(n^2)

時間複雜度的:最優、平均、最差情況,為什麼時間複雜度看的是最差情況?

如果在乙個長度為n的陣列中查詢乙個數,最好情況是查詢1次,最差情況是查詢n次,平均查詢n/2次,乙個演算法應考慮到所有可能出現的情況,而不是只考慮最優情況,所以時間複雜度看的是最差情況。

如何求解:二分查詢、遞迴求階乘、遞迴斐波那契的時間複雜度?

(1)二分查詢

int binarysearch(int* a,int n,int x)

else

}return -1;

}

二分查詢最壞情況為n=2^m,即m=log(2)n,所以時間複雜度為o(log(2)n)

(2)遞迴求階乘

long long factorial(size_t n)

遞迴函式時間複雜度計算方法:單次遞迴函式中的呼叫次數*遞迴函式總的遞迴次數

對於遞迴函式求階乘,單次呼叫次數為1,總呼叫次數為n,所以時間複雜度為o(n)

(3)遞迴斐波那契

long long fibonacci(size_t n)

對於遞迴斐波那契函式,單詞呼叫次數為1,總呼叫次數為2^n,所以時間複雜度為 o(2^n)

什麼是空間複雜度?

空間複雜度是對乙個演算法在執行過程中臨時占用儲存空間大小的度量。

如何求空間複雜度? 普通函式&遞迴函式

空間複雜度的計算規則與時間複雜度類似,也使用o漸進表示法。

(1)普通函式

void bubblesort(int* a,int n)

} if(exchange==0)

}}

對於此冒泡函式,由於沒有占用額外的記憶體空間,所以空間複雜度為o(1)

(2)遞迴函式

long long factorial(size_t n)

對於此遞迴求階乘函式,遞迴呼叫深度為n,單次遞迴所需空間為1,所以空間複雜度為o(n)

分析遞迴斐波那契數列的:時間、空間複雜度,並對其進行優化,偽遞迴優化—>迴圈優化

(1)遞迴斐波那契

long long* fibonacci(size_t n)

long long* fibarray=new long long[n+1};

fibarray[0]=0;

fibarray[1]=1;

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

return fibarray;

}

時間複雜度:o(n)

空間複雜度:o(n)

(2)偽遞迴斐波那契

long fibonacci(long first,long second,long n)

return fibonacci(second,first+second,n-1)

}

時間複雜度:o(n)

空間複雜度:o(1)

(3)迴圈斐波那契

long fibonacci(long first,long second,long n)

while(n>3)

third=first+second;

return third;

}

時間複雜度:o(1)

空間複雜度:o(1)

總結常見時間複雜度

執行10次———————— o(1)

執行2n次———————— o(n)

執行2n^2+n+1次———— o(n^2)

執行log(2)n+1次———— o(log(2)n)

執行2^n+1次—————— o(2^n)

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

1.演算法效率 演算法效率可以用來衡量乙個演算法的好壞 演算法效率分析分為兩種 第一種是時間效率,第二種是空間效率.時間效率被稱為時間複雜度,空間效率被稱為空間複雜度.時間複雜度主要衡量的是乙個演算法的執行速度,而空間複雜度主要衡量乙個演算法所需要的額外空間,在計算機發展的早期,計算機的儲存容量很小...

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

1 演算法o n 關注n的階數,當數十分大的時候,常數可以忽略。o n 又稱為大o記法。2 t n o f n 隨著n變化而變化,f n 是某個函式,執行的次數等於時間,一般情況下,t n 增長最慢的演算法最優。4 推到o n 1,用1取代時間中所有加法常數 哪些可以忽略 2,在修改後的執行函式中,...

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

通常我們衡量乙個演算法的複雜度時,會有兩種演算法效率分析方式 第一種是時間效率,第二種是空間效率。時間效率被稱為時間複雜度,而空間效率被稱作空間複雜度。時間複雜度主要衡量的是乙個演算法的執行速度,空間複雜度主要衡量一乙個演算法所需要的額外空間,在計算機發展的早期,計算機的儲存容量很小。所以對空間複雜...