日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網(wǎng)站首頁 編程語言 正文

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

作者:i跑跑 更新時間: 2022-04-17 編程語言

目錄

1.什么是算法

算法特性

2.算法的復雜度

3.時間復雜度

3.1時間復雜度定義

3.2?大O的漸進表示法

4.空間復雜度

定義

舉例:

?5.時間復雜度和空間復雜度的對比


1.什么是算法

算法(Algorithm)是對某一特定類型的問題求解步驟的一種描述,是指定的有限序列,字面意思就是用于計算的方法。

算法特性

1.有窮性:一個算法總是會再執(zhí)行有限次數(shù)后停止。

2.確定性:每個步驟都有確定的含義,對相同的輸入有相同的輸出。

3.輸入:一個算法有零個或多個輸入。

4.輸出:一個算法有一個或多個輸出。

5.可行性:算法中每一步都可以通過已經(jīng)實現(xiàn)的基本運算的有限次運行來實現(xiàn)。

2.算法的復雜度

通常用算法的復雜度來衡量一個算法的好壞。那么,什么是復雜度呢?

算法在編寫成可執(zhí)行程序后,運行時需要耗費時間資源和空間(內(nèi)存)資源 。因此衡量一個算法的好壞,一般是從時間和空間兩個維度來衡量的,即時間復雜度和空間復雜度

時間復雜度主要衡量一個算法的運行快慢,而空間復雜度主要衡量一個算法運行所需要的額外空間。

3.時間復雜度

3.1時間復雜度定義

算法的時間復雜度是一個函數(shù),它定量描述了該算法的運行時間。(注:一個算法的執(zhí)行時間從理論上來說是不能算出來的,但算法花費的時間與其中語句的執(zhí)行次數(shù)成正比例,因此算法中的基本操作的執(zhí)行次數(shù),為算法的時間復雜度)
?

通俗一點來說:時間復雜度就是一個算法中執(zhí)行次數(shù)最多的那條語句的通式省略系數(shù)保留階數(shù)最高的式子。

3.2?大O的漸進表示法

推導大O階方法:
1、用常數(shù)1取代運行時間中的所有加法常數(shù)。

若是一個算法的執(zhí)行次數(shù)為確定的常數(shù)項,那么他的時間復雜度為O(1)
2、在修改后的運行次數(shù)函數(shù)中,只保留最高階項。
3、如果最高階項存在且不是1,則去除與這個項目相乘的常數(shù)。得到的結(jié)果就是大O階。

舉個例子:

int fun(int x)
{
	int count = 0;
	for (int i = 0; i < x; i++)
	{
		for (int j = 0;j

以此算法為例,count++,執(zhí)行次數(shù)為x*x次,那么它的時間復雜度為O(x^2)

void Func1(int N)
{
	int count = 0;
	for (int i = 0; i < N; ++i)
	{
		for (int j = 0; j < N; ++j)
		{
			++count;
		}
	}
	for (int k = 0; k < 2 * N; ++k)
	{
		++count;
	}
	int M = 10;
	while (M--)
	{
		++count;
	}

此例中運行最多的代碼段為++count,可以看出來它的執(zhí)行次數(shù)為

F(n)=n*n+2*n+10;應用大O的漸進表示法,我們保留最高階n*n=n^2,因此上述算法的時間復雜度為O(n^2)。

那么為什么是這樣呢?因為當n無窮大時,除去最高階對整個影響較大外,其他的常數(shù)及一次項對整體次數(shù)來說可忽略不計,時間復雜度取的是最差結(jié)果,因此對時間復雜度有了大O的漸進表示法。


4.空間復雜度

定義

空間復雜度也是一個數(shù)學表達式,不是程序占用了多少字節(jié)的空間,而是對一個算法在運行過程中臨時占用存儲空間大小的量度


空間復雜度計算規(guī)則基本跟實踐復雜度類似,也使用大O漸進表示法。
注意:函數(shù)運行時所需要的棧空間(存儲參數(shù)、局部變量、一些寄存器信息等)在編譯期間已經(jīng)確定好了,因此空間復雜度主要通過函數(shù)在運行時候顯式申請的額外空間來確定。

舉例:

void BubbleSort(int* a, int n)
{
	assert(a);
	for (size_t end = n; end > 0; --end)
	{
		int exchange = 0;
		for (size_t i = 1; i < end; ++i)
		{
			if (a[i - 1] > a[i])
			{
				Swap(&a[i - 1], &a[i]);
				exchange = 1;
			}
		}
		if (exchange == 0)
			break;
	}
}

上述算法中:n,exchange,i 在運行時要申請額外的空間來完成程序,因此額外申請了3個空間,是常數(shù),因此用大O漸進表示法表示其空間復雜度就是O(1)

?5.時間復雜度和空間復雜度的對比

注:時間是累加的,一去不復返的;空間卻是可以循環(huán)利用的。

?這里我們用斐波那契數(shù)的遞歸算法來對比時間復雜度與空間復雜度

原文鏈接:https://blog.csdn.net/weixin_53316121/article/details/123301278