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))
。
這個分析全部正確嗎?
@ 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
@anonymous有道理。在那種情況下,OP的分析似乎是正確的。 – 2014-11-09 01:59:51