亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

【數(shù)據(jù)結(jié)構(gòu)(C語(yǔ)言描述)】時(shí)空復(fù)雜度

Y3G / 2784人閱讀

摘要:目錄一時(shí)間復(fù)雜度例題二空間復(fù)雜度例題三常見(jiàn)復(fù)雜度對(duì)比一時(shí)間復(fù)雜度時(shí)間復(fù)雜度一個(gè)算法所花費(fèi)的時(shí)間與其中語(yǔ)句的執(zhí)行次數(shù)成正比例,算法中的基本操作的執(zhí)行次數(shù)。找到某條基本語(yǔ)句與問(wèn)題規(guī)模之間的數(shù)學(xué)表達(dá)式,就是算出了該算法的時(shí)間復(fù)雜度。


一、時(shí)間復(fù)雜度

時(shí)間復(fù)雜度:一個(gè)算法所花費(fèi)的時(shí)間與其中語(yǔ)句的執(zhí)行次數(shù)成正比例,算法中的基本操作的執(zhí)行次數(shù)。

  • 找到某條基本語(yǔ)句與問(wèn)題規(guī)模N之間的數(shù)學(xué)表達(dá)式,就是算出了該算法的時(shí)間復(fù)雜度。

舉個(gè)例子

void Func1(int N){	int count = 0;	for (int i = 0; i < N; ++i)	{		for (int j = 0; j < N; ++j)		{			++count;//N*N		}	}	for (int k = 0; k < 2 * N; ++k)	{		++count;//2*N	}	int M = 10;	while (M--)	{		++count;///10	}	printf("%d/n", count);//將上面相加得 N*N+2*N+10}

Func1 執(zhí)行的基本操作次數(shù) : N 2 N^2 N2 + 2 N + 10 +2N+10 +2N+10

當(dāng) N → ∞ {N /to /infty} N時(shí),按照高數(shù)中 lim ? x → ∞ /lim_{x /to /infty} limx? 的思想,Func1基本操作大概次數(shù)為: N 2 N^2 N2,該方法稱為大O的漸進(jìn)表示法。

大O的漸進(jìn)表示法: 實(shí)際中我們計(jì)算時(shí)間復(fù)雜度時(shí),我們其實(shí)并不一定要計(jì)算精確的執(zhí)行次數(shù),而只需要大概執(zhí)行次數(shù)。
大O符號(hào)(Big O notation):是用于描述函數(shù)漸進(jìn)行為的數(shù)學(xué)符號(hào)。記為: O ( □ ) O(□) O()

?注意:算法的時(shí)間復(fù)雜度存在最好、平均和最壞情況:
① 最壞情況:任意輸入規(guī)模的最大運(yùn)行次數(shù)(上界)
② 平均情況:任意輸入規(guī)模的期望運(yùn)行次數(shù)(期望對(duì)標(biāo)概率論中的期望)
③ 最好情況:任意輸入規(guī)模的最小運(yùn)行次數(shù)(下界)

在實(shí)際中一般情況關(guān)注的是算法的最壞運(yùn)行情況

大O法的規(guī)則

  1. 結(jié)果只保留最高階項(xiàng),且去掉系數(shù)
  2. 結(jié)果若為常數(shù),記為 O ( 1 ) O(1) O(1)

例題

例一:

//計(jì)算Func2的時(shí)間復(fù)雜度?void Func2(int N){	int count = 0;	for (int k = 0; k < 2 * N; ++k)	{		++count;//2 * N	}	int M = 10;	while (M--)	{		++count;//10	}	printf("%d/n", count);}

Func2 執(zhí)行的基本操作次數(shù) : 2 N + 10 2N+10 2N+10
用大 O O O法表示: O ( N ) O(N) O(N)

例二:

// 計(jì)算Func3的時(shí)間復(fù)雜度?void Func3(int N, int M){	int count = 0;	for (int k = 0; k < M; ++k)	{		++count;//M	}	for (int k = 0; k < N; ++k)	{		++count;//N	}	printf("%d/n", count);}

Func3 執(zhí)行的基本操作次數(shù) : M + N M+N M+N
用大 O O O法表示: O ( M + N ) O(M+N) O(M+N)

? ?情況分析:若 M < < N M<M<<N,則 O ( N ) O(N) O(N)
? ?? ?? ? ?? ? ?? ? ?若 M > > N M>>N M>>N,則 O ( M ) O(M) O(M)
? ?? ?? ? ?? ? ?? ? ?若 M ≈ N M ≈ N MN,則 O ( M ) O(M) O(M) O ( N ) O(N) O(N)

例三:

// 計(jì)算Func4的時(shí)間復(fù)雜度?void Func4(int N){	int count = 0;	for (int k = 0; k < 100; ++k)	{		++count;//100	}	printf("%d/n", count);}

Func4 執(zhí)行的基本操作次數(shù) : 100 100 100
用大 O O O法表示: O ( 1 ) O(1) O(1)

例四:

// 計(jì)算strchr的時(shí)間復(fù)雜度?const char * strchr ( const char * str, int character );

?strchr函數(shù)的用法
考慮最壞的情況,用大 O O O法表示: O ( N ) O(N) O(N)

例五:

// 計(jì)算BubbleSort的時(shí)間復(fù)雜度?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]);//第一輪N次,最后一輪1次,三角形面積計(jì)算得(N+1)*N/2				exchange = 1;			}		}		if (exchange == 0)			break;	}}

BubbleSort 執(zhí)行的基本操作次數(shù) : ( N + 1 ) N / 2 (N+1)N/2 (N+1)N/2
用大 O O O法表示: O ( N 2 ) O(N^2) O(N2)

例六:

// 計(jì)算BinarySearch的時(shí)間復(fù)雜度?int BinarySearch(int* a, int n, int x){	assert(a);	int begin = 0;	int end = n - 1;	while (begin < end)	{		int mid = begin + ((end - begin) >> 1);		if (a[mid] < x)			begin = mid + 1;		else if (a[mid] > x)			end = mid;		else			return mid;	}	return -1;}

從BinarySearch的思想來(lái)看,一半一半的查找容易得: O ( l o g 2 N ) O(log_2N) O(log2?N)

例七:

// 計(jì)算階乘遞歸Fac的時(shí)間復(fù)雜度?long long Fac(size_t N){	if (0 == N)		return 1;	return Fac(N - 1) * N;}

由圖可得復(fù)雜度為: O ( N ) O(N) O(N)

例八:

// 計(jì)算斐波那契遞歸Fib的時(shí)間復(fù)雜度?long long Fib(size_t N){	if (N < 3)		return 1;	return Fib(N - 1) + Fib(N - 2);}


由圖可得執(zhí)行的基本操作次數(shù)大概為 : 2 N ? 1 2^N-1 2N?1
復(fù)雜度為: O ( 2 N ) O(2^N) O(2N)

二、空間復(fù)雜度

空間復(fù)雜度:是對(duì)一個(gè)算法在運(yùn)行過(guò)程中臨時(shí)額外占用存儲(chǔ)空間大小的量度

  • 臨時(shí)額外占用的理解:函數(shù)運(yùn)行時(shí)所需要的??臻g(存儲(chǔ)參數(shù)、局部變量、一些寄存器信息等)在編譯期間已經(jīng)確定好了,因此空間復(fù)雜度主要通過(guò)函數(shù)在運(yùn)行時(shí)候顯式申請(qǐng)的額外空間來(lái)確定

例題

例一:

// 計(jì)算BubbleSort的空間復(fù)雜度?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;	}}

只開(kāi)辟了endi兩塊空間的大小,因此空間復(fù)雜度為: O ( 1 ) O(1) O(1)

例二:

// 計(jì)算Fibonacci的空間復(fù)雜度?// 返回斐波那契數(shù)列的前n項(xiàng)long long* Fibonacci(size_t n){	if (n == 0)		return NULL;	long long* fibArray = (long long*)malloc((n + 1) * sizeof(long long));	fibArray[0] = 0;	fibArray[1] = 1;	for (int i = 2; i <= n; ++i)	{		fibArray[i] = fibArray[i - 1] + fibArray[i - 2];	}	return fibArray;}

動(dòng)態(tài)開(kāi)辟了 N + 1 N+1 N+1個(gè)數(shù)組,還有 N ? 1 N-1 N?1個(gè)i,因此空間復(fù)雜度為: O ( N ) O(N) O(N)
時(shí)間復(fù)雜度: O ( N ) O(N) O(N)

例三:

// 計(jì)算階乘遞歸Fac的空間復(fù)雜度?long long Fac(size_t N){	if(N == 0)	return 1;	return Fac(N-1)*N;}


由圖可知空間復(fù)雜度為: O ( N ) O(N) O(N)

例八:

// 計(jì)算斐波那契遞歸Fib的時(shí)間復(fù)雜度?long long Fib(size_t N){	if (N < 3)		return 1;	return Fib(N - 1) + Fib(N - 2);}

因此空間復(fù)雜度為: O ( N ) O(N) O(N)

空間是可以重復(fù)利用的,但是時(shí)間是累計(jì)的。

三、常見(jiàn)復(fù)雜度對(duì)比


算法復(fù)雜度優(yōu)先級(jí): O ( 1 ) > O ( N ) > O ( N l o g N ) > O ( N 2 ) > O ( 2 N ) > O ( N ! ) O(1) >O(N) >O(Nlog^N) >O(N^2) >O(2^N) >O(N!) O(1)>O(N)>O(NlogN)>O(N2)>O(2

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/122324.html

相關(guān)文章

  • 守護(hù)城市安全:時(shí)空數(shù)據(jù)+深度學(xué)習(xí)

    摘要:上周,在舊金山召開(kāi)的人工智能國(guó)際較高級(jí)會(huì)議上,來(lái)自微軟亞洲研究院的鄭宇博士及其團(tuán)隊(duì)的論文首創(chuàng)性的將時(shí)空數(shù)據(jù)與深度學(xué)習(xí)結(jié)合起來(lái),利用時(shí)空深度殘差網(wǎng)絡(luò)用于預(yù)測(cè)城市人流問(wèn)題。 上周,在舊金山召開(kāi)的人工智能國(guó)際較高級(jí)會(huì)議AAAI 2017上,來(lái)自微軟亞洲研究院的鄭宇博士及其團(tuán)隊(duì)的論文Deep Spatio-Temporal Residual Networks for Citywide Crowd F...

    CarlBenjamin 評(píng)論0 收藏0
  • 何為語(yǔ)法樹(shù)

    摘要:原文鏈接何為語(yǔ)法樹(shù)什么是語(yǔ)法樹(shù)你是否曾想過(guò),這個(gè)世界存在這么多語(yǔ)言的意義。語(yǔ)法樹(shù),計(jì)算機(jī)描述世界真理的樹(shù)狀結(jié)構(gòu)。不同的語(yǔ)言,都會(huì)配之不同的語(yǔ)法分析器,而語(yǔ)法分析器是把源代碼作為字符串讀入解析,并建立語(yǔ)法樹(shù)的程序。 原文鏈接:BlueSun | 何為語(yǔ)法樹(shù) 什么是語(yǔ)法樹(shù)? 你是否曾想過(guò),這個(gè)世界存在這么多語(yǔ)言的意義。 假如現(xiàn)在你面前有一個(gè)物體,它是一個(gè)不規(guī)則的圓體,整個(gè)身體通紅,頭部還有...

    hikui 評(píng)論0 收藏0
  • 深度學(xué)習(xí)的時(shí)間序列模型評(píng)價(jià)

    摘要:技術(shù)總言這次主要說(shuō)最近發(fā)展的無(wú)監(jiān)督特征學(xué)習(xí)和深入學(xué)習(xí),其對(duì)于時(shí)間序列模型問(wèn)題的評(píng)價(jià)。建模連續(xù)數(shù)據(jù)的傳統(tǒng)方法包括從假定時(shí)間序列模型參數(shù)的估計(jì),如自回歸模型和線性動(dòng)力系統(tǒng),和著名的隱馬爾可夫模型。此外,時(shí)間序列對(duì)時(shí)間變量有明顯依賴性。 技術(shù)總言:這次主要說(shuō)最近發(fā)展的無(wú)監(jiān)督特征學(xué)習(xí)和深入學(xué)習(xí),其對(duì)于時(shí)間序列模型問(wèn)題的評(píng)價(jià)。這些技術(shù)已經(jīng)展現(xiàn)了希望對(duì)于建模靜態(tài)數(shù)據(jù),如計(jì)算機(jī)視覺(jué),把它們應(yīng)用到時(shí)間序列數(shù)...

    zhaochunqi 評(píng)論0 收藏0
  • 數(shù)據(jù)時(shí)代數(shù)據(jù)庫(kù)-云HBase架構(gòu)&生態(tài)&實(shí)踐

    摘要:摘要第九屆中國(guó)數(shù)據(jù)庫(kù)技術(shù)大會(huì),阿里云高級(jí)技術(shù)專家架構(gòu)師封神曹龍帶來(lái)題為大數(shù)據(jù)時(shí)代數(shù)據(jù)庫(kù)云架構(gòu)生態(tài)實(shí)踐的演講。主要內(nèi)容有三個(gè)方面首先介紹了業(yè)務(wù)挑戰(zhàn)帶來(lái)的架構(gòu)演進(jìn),其次分析了及生態(tài),最后分享了大數(shù)據(jù)數(shù)據(jù)庫(kù)的實(shí)際案例。數(shù)據(jù)備份及恢復(fù)。 摘要: 2018第九屆中國(guó)數(shù)據(jù)庫(kù)技術(shù)大會(huì),阿里云高級(jí)技術(shù)專家、架構(gòu)師封神(曹龍)帶來(lái)題為大數(shù)據(jù)時(shí)代數(shù)據(jù)庫(kù)-云HBase架構(gòu)&生態(tài)&實(shí)踐的演講。主要內(nèi)容有三個(gè)方...

    econi 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<