空間復(fù)雜度舉例 如何計(jì)算一個(gè)算法的時(shí)間復(fù)雜度和空間復(fù)雜度?
如何計(jì)算一個(gè)算法的時(shí)間復(fù)雜度和空間復(fù)雜度?它是根據(jù)一個(gè)程序的數(shù)據(jù)n的大小來(lái)顯示它所使用的時(shí)間和空間的近似值說(shuō)白了,它是顯示時(shí)間或空間是如何隨著n的增長(zhǎng)而增長(zhǎng)的例如for(int i=0 i這個(gè)循環(huán)執(zhí)行
如何計(jì)算一個(gè)算法的時(shí)間復(fù)雜度和空間復(fù)雜度?
它是根據(jù)一個(gè)程序的數(shù)據(jù)n的大小來(lái)顯示它所使用的時(shí)間和空間的近似值
說(shuō)白了,它是顯示時(shí)間或空間是如何隨著n的增長(zhǎng)而增長(zhǎng)的
例如
for(int i=0 i
這個(gè)循環(huán)執(zhí)行了n次,所以時(shí)間復(fù)雜度是O(n)
for(int i=0 i
{
for(int j)=0j
}]這個(gè)嵌套的兩個(gè)循環(huán),時(shí)間復(fù)雜度是O(n^2)
時(shí)間復(fù)雜度只能粗略地表示所用的時(shí)間
而且一些基本步驟的運(yùn)行時(shí)間是不同的,所以我們無(wú)法計(jì)算,所以我們省略了
例如
for(int i=0I
a=b
and
for(int i=0I
運(yùn)行時(shí)間當(dāng)然是第二快的,但是它們的時(shí)間復(fù)雜度是相同的O(n)
判斷時(shí)間復(fù)雜度,看循環(huán)
時(shí)間復(fù)雜度是程序的運(yùn)行時(shí)間,這也可以說(shuō)是次數(shù);
空間復(fù)雜度是程序所占用的空間;
以下程序:
int a[1000000
]int CNT=0
for(int i=0 i
for(int j=0 j
a[CNT]=0
空間主要是一個(gè)大小為1000000的數(shù)組a;時(shí)間復(fù)雜度是兩個(gè)for循環(huán)。第一個(gè)循環(huán)要做一次,第二個(gè)循環(huán)要做1000次,第一個(gè)循環(huán)要做1000次,一共1000×1000次
如果兩個(gè)循環(huán)分別對(duì)應(yīng)m和N次,那么要做的次數(shù)就是m*N
你能聽(tīng)懂前兩句話嗎?
什么叫時(shí)間復(fù)雜度和空間復(fù)雜度?
當(dāng)計(jì)算機(jī)完成任務(wù)時(shí),它有兩個(gè)指示器:時(shí)間和所有內(nèi)存(即空間)。兩者呈負(fù)相關(guān)。也就是說(shuō),在設(shè)計(jì)特定的程序時(shí),可以選擇使用更多的內(nèi)存,這樣可以提高程序的速度,也就是減少程序的運(yùn)行時(shí)間。另一方面,也可以選擇使用較少的內(nèi)存,這樣可以節(jié)省內(nèi)存,但同時(shí),程序運(yùn)行速度會(huì)變慢,這意味著程序運(yùn)行時(shí)間會(huì)更長(zhǎng)??傊?,該算法只有兩種策略,一種是以時(shí)間換空間,另一種是以空間換時(shí)間。直接答案是高空間復(fù)雜度和低時(shí)間復(fù)雜度的算法,反之亦然。