我覺得主要考慮和規(guī)模大小有關(guān)系的代碼段,比如循環(huán)部分的時(shí)間復(fù)雜度,對于o(1)代碼可以忽略掉
創(chuàng)新互聯(lián)-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價(jià)比袁州網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式袁州網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋袁州地區(qū)。費(fèi)用合理售后完善,十多年實(shí)體公司更值得信賴。
1、時(shí)間復(fù)雜度,一般看循環(huán)的次數(shù)。reverseArray只有一個(gè)for循環(huán),次數(shù)為n/2,即時(shí)間復(fù)雜度為n/2。n為數(shù)組的大小。reverseArray2有兩個(gè)for循環(huán),循環(huán)次數(shù)為n+n=2n。時(shí)間復(fù)雜度為2n。
2、空間復(fù)雜度,是看程序占用的內(nèi)存大小。reverseArray只是而外的只有一個(gè)變量temp,故空間復(fù)雜度為1。reverseArray2需要另外new一個(gè)數(shù)組出來,所以空間復(fù)雜度為n。n為數(shù)組大小。
for(int?p=0;pn*n;p++)
for(int?q=0;qp;q++)
sum--;
下面我來簡單解釋一下為什么是O(n^4)
p的所有取值,以及相對性的sum運(yùn)算的次數(shù)如下
p的取值:0??1??2??3??4??...??(n^2?-1)
sum次數(shù):0??0??1??2??3??...??(n^2?-2)
從上面的式子我們知道sum--執(zhí)行的次數(shù)也就是sum次數(shù)的累加和:
0+0+1+2+3+...+(n^-2)=1+2+3+?...?+(n^2?-2)這里我們可以用求和公式,但是需要搞定一個(gè)這里有多少項(xiàng),很明顯(n^2?-2)項(xiàng),帶入求和公式如下
=(1+(n^2?-2))*(n^2?-2)/2=(n^2?-1)(n^2?-2)/2=(n^4?-3*n^2?+2)/2
所以答案是O(n^4)
JAVA中算法的時(shí)間復(fù)雜程度 簡而言之就是運(yùn)算時(shí)候的執(zhí)行次數(shù)的統(tǒng)計(jì)
1.時(shí)間頻度
一個(gè)算法執(zhí)行所耗費(fèi)的時(shí)間,從理論上是不能算出來的,必須上機(jī)運(yùn)行測試才能知道。但我們不可能也沒有必要對每個(gè)算法都上機(jī)測試,只需知道哪個(gè)算法花費(fèi)的時(shí)間多,哪個(gè)算法花費(fèi)的時(shí)間少就可以了。并且一個(gè)算法花費(fèi)的時(shí)間與算法中語句的執(zhí)行次數(shù)成正比例,哪個(gè)算法中語句執(zhí)行次數(shù)多,它花費(fèi)時(shí)間就多。一個(gè)算法中的語句執(zhí)行次數(shù)稱為語句頻度或時(shí)間頻度。記為T(n)。
2.計(jì)算方法
1. 一般情況下,算法的基本操作重復(fù)執(zhí)行的次數(shù)是模塊n的某一個(gè)函數(shù)f(n),因此,算法的時(shí)間復(fù)雜度記做:T(n)=O(f(n)) 分析:隨著模塊n的增大,算法執(zhí)行的時(shí)間的增長率和f(n)的增長率成正比,所以f(n)越小,算法的時(shí)間復(fù)雜度越低,算法的效率越高。 2. 在計(jì)算時(shí)間復(fù)雜度的時(shí)候,先找出算法的基本操作,然后根據(jù)相應(yīng)的各語句確定它的執(zhí)行次數(shù),再找出T(n)的同數(shù)量級(它的同數(shù)量級有以下:1,Log2n ,n ,nLog2n ,n的平方,n的三次方,2的n次方,n?。?,找出后,f(n)=該數(shù)量級,若T(n)/f(n)求極限可得到一常數(shù)c,則時(shí)間復(fù)雜度T(n)=O(f(n))
例:算法:
for(i=1;i=n;++i)
{
for(j=1;j=n;++j)
{
c[ i ][ j ]=0; //該步驟屬于基本操作 執(zhí)行次數(shù):n的平方 次
for(k=1;k=n;++k)
c[ i ][ j ]+=a[ i ][ k ]*b[ k ][ j ]; //該步驟屬于基本操作 執(zhí)行次數(shù):n的三次方 次
}
} 則有 T(n)= n的平方+n的三次方,根據(jù)上面括號里的同數(shù)量級,我們可以確定 n的三次方 為T(n)的同數(shù)量級
則有f(n)= n的三次方,然后根據(jù)T(n)/f(n)求極限可得到常數(shù)c
則該算法的 時(shí)間復(fù)雜度:T(n)=O(n的三次方)
3.分類
按數(shù)量級遞增排列,常見的時(shí)間復(fù)雜度有: 常數(shù)階O(1),對數(shù)階O(log2n),線性階O(n), 線性對數(shù)階O(nlog2n),平方階O(n2),立方階O(n3),..., k次方階O(nk), 指數(shù)階O(2n) 。隨著問題規(guī)模n的不斷增大,上述時(shí)間復(fù)雜度不斷增大,算法的執(zhí)行效率越低。