今天學(xué)習(xí)算法的程序步計算計算時間復(fù)雜度的時候,這樣一段程序的時間復(fù)雜度為2n + 3。(其中的count++就是指的程序步的個數(shù))
float Sum(float list[], const int n) {
float tempsum = 0.0;
count++; // 針對賦值語句
for (i = 0; i < n; i++) {
count++; //針對for循環(huán)語句
tempsum += list[i];
count++; //賦值語句
}
count++; //針對for循環(huán)的最后一次執(zhí)行
count++; // return語句
return tempsum;
}
在這里,我不是很清楚為什么代碼倒數(shù)第三行會對for循環(huán)的最后一次執(zhí)行做一次計數(shù)。
最后,我又去學(xué)習(xí)了下for循環(huán),發(fā)現(xiàn)代碼打的久了,竟然忘記最基本的東西了。
沒錯,就是for循環(huán)的表達(dá)式執(zhí)行順序。
假設(shè)有這樣一段代碼
for (表達(dá)式1, 表達(dá)式2, 表達(dá)式3){
內(nèi)部嵌套語句...
}
執(zhí)行順序是:
- 計算
表達(dá)式1 - 計算
表達(dá)式2, 若結(jié)果為true,則進(jìn)行第三步;若結(jié)果為false,則跳至第五步 - 執(zhí)行
內(nèi)部嵌套語句 - 計算
表達(dá)式3 - 退出循環(huán)
quit the circle
也就是說,對于for(i = 0; i < n; i++)這條語句來說,內(nèi)部嵌套語句一共執(zhí)行了n次,但是表達(dá)式2也就是i < n這個條件,一共判斷了n+1次。
這里的程序步計算的時候,針對for循環(huán)的最后一次執(zhí)行,說的就是這個判斷語句。