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

2021-09-20 21:53:15 字數 2446 閱讀 8151

1.演算法效率

演算法效率可以用來衡量乙個演算法的好壞 ,演算法效率分析分為兩種:第一種是時間效率,第二種是空間效率.時間效率被稱為時間複雜度,空間效率被稱為空間複雜度.時間複雜度主要衡量的是乙個演算法的執行速度,而空間複雜度主要衡量乙個演算法所需要的額外空間,在計算機發展的早期,計算機的儲存容量很小。所以對空間複雜度很是在乎。但是經過計算機 行業的迅速發展,計算機的儲存容量已經達到了很高的程度。所以我們如今已經不需要再特別關注乙個演算法的空間複雜度。

2.時間複雜度

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

在電腦科學中,演算法的時間複雜度是乙個函式,它定量描述了該演算法的執行時間。乙個演算法執行所耗費的時間,從理論上說,是不能算出來的,只有你把你的程式放在機器上跑起來,才能知道。但是上機測試非常的麻煩,而且不同的硬體不同的機器執行的時間是不同的,所以才有了時間複雜度這個分析方式。乙個演算法所花費的時間與其中語句的執行次數成正比例,演算法中的基本操作的執行次數,為演算法的時間複雜度。

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

1.用常數1取代執行時間中的所有加法常數.

2.在修改後的執行次數函式中,只保留最高端項.

3.如果最高端項存在且不是1,則去除與這個專案相乘的常數.

最終得到的結果就是大o階.

例:

void func1(int n) 

} for (int k = 0; k < 2 * n ; ++ k)

int m = 10;

while (m--)

printf("%d\n", count);

}

這個函式的執行時間的函式式為

f(n) = n2 + 2 * n + 10

用大o的漸進表示法後,時間複雜度為

o(n2)

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

最差的情況也是該演算法存在的可能性之一,有出現最差現象的可能,如果出現最差現象時,此時時間複雜度不能滿足我們的要求,那麼這個演算法是存在問題的,換而言之,如果最差的情況都符合要求,那麼其他情況肯定也符合要求.

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

3.1二分查詢

int binarysearch(int arr,int x,int size) 

else if (x < arr[y])

else

} return -1;

}

這個演算法基本操作執行最少1次,最多o(logn)次,所以時間複雜度為 o(logn)

(logn在演算法分析中表示是底數為2,對數為n。有些地方會寫成lgn。)

3.2遞迴求階乘

long long factorial(size_t n)
這個演算法基本操作遞迴執行了n次,時間複雜度為o(n)

3.3遞迴斐波那契

long long fibonacci(size_t n)
這個演算法基本操作遞迴了2n次,時間複雜度為o(2n)

4. 空間複雜度

空間複雜度是對乙個演算法在執行過程中臨時占用儲存空間大小的量度 。空間複雜度不是程式占用了多少bytes的空間,算的是變數的個數。空間複雜度計算規則基本跟時間複雜度類似,也使用大o漸進表示法。

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

空間複雜度計算的是變數的個數,沒有借助輔助空間,空間複雜度就是o(1),動態開闢n個空間,空間複雜度就是o(n)

遞迴函式呼叫了n次,就開闢了n個棧幀,空間複雜度就是o(n)

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

遞迴:

long long fibonacci(size_t n)
(遞迴過程是乙個二叉樹,節點個數就是時間複雜度,樹的高度是空間複雜度)

時間複雜度為o(2n)

空間複雜度為o(n)

尾遞迴:

long long fib(long long n,long long first,long long second)

if(n==3)

return fib(second, first + second, n - 1);

}

時間複雜度為o(n)

空間複雜度為o(1)

迴圈:

long long fib(long long x)

int last2 = 1;

int last1 = 1;

int a=0;//最後一項

for (int n = 3; n <= x; ++n)

return a;

}

時間複雜度為o(n)

空間複雜度為o(1)

7常見時間複雜度

o(1),o(n),o(n2), o(n3), o(lgn),o(2n)

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

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

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

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

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

演算法 algorithm 是對特定問題求解步驟的一種描述。解決乙個問題往往有不止一種方法,演算法也是如此。那麼解決特定問題的多個演算法之間如何衡量它們的優劣呢?有如下的指標 1 時間複雜度 執行這個演算法需要消耗多少時間。2 空間複雜度 這個演算法需要占用多少記憶體空間。同乙個問題可以用不同的演算...