2014-11-08 92 views
1

組塊的時間效率我有這樣的塊的代碼:計算的代碼

int f = 0; 

for(int i=1 ; i<m ; i=i*2) { 
    for(int l=500 ; l<700 ; l++) { 
     f++; 
    } 
    for(int j=n ; j>0 ; j=j/2) { 
     f++; 
    } 
    for(int k=0 ; k<m ; k=k+3) { 
     f++; 
    } 

    f += 10; 
} 

其中m和n給定爲參數。

到目前爲止,我已經計算出這一點:

主要用於成倍週期爲增量,這意味着它的時間效率O(log m)

,第一對循環消耗一定的時間O(200),因此它不會影響時間代碼的效率。

第二個用於循環遞減由具有n個每itteration的值的1/2,因此,其時間效率是O(log n)

由3每itteration第三對週期爲增量=>它具有O(m/3)時間效率,但我們不需要一個常數,所以它是O(m)

總而言之,當我們結合一切時,我們得到了O(log(m) * (log n + m))

這個分析全部正確嗎?

+2

@ ChrisJester-楊n和m是參數,因此不能進一步簡化如你所建議的。對於兩個變量,big-O的定義是「如果存在M,N,C,則運行時間爲O(f(n,m)),使得對於所有m> M,對於所有n> N,運行時間<= Cf(n,m)「。 – 2014-11-09 01:56:55

+0

@anonymous有道理。在那種情況下,OP的分析似乎是正確的。 – 2014-11-09 01:59:51

回答

0

使用西格瑪符號,可能會發現有條不紊:

enter image description here