有關回圈執行次數的問題
小弟 有個很囧的問題 想請問一下板上 有關下面迴圈執行的次數
int i,j,k,n;
執行次數
------------------------------------------------------------------------------
for(i=1;i<=n;i+) (n+1)
for(j=1;j<=n;j++) n * (n+1)
for(k=1;k<=n;k++) n * n * (n+1)
printf(" %d ,%d %d \n",i,j,k);
-----------------------------------------------------------------------------
Total: (n+1) + n*(n+1) + n*n*(n+1)
= n^3 + 2 n^2 + 2n +1
可是某書上寫著 實際的迴圈執行次數為: n * (n+1) *(n+2) /6
於是,我很假設 n=3; 且我知道 設定運算 " = " 的 COST 是 O(1)
i j k i j k
---------------------- ----------------------
值: 1 1 1 值: 2 2 1
2 2
3 3
4 (jump) 4 (jump)
2 1 3 1
2 2
3 3
4 (jump) 4 (jump)
3 1 4 (jump)
2 3 1 1
3 2
4 (jump) 3
4 (jump) 4 (jump)
2 1 1 2 1
2 2
3 3
4 (jump) 4 (jump)
3 1
2
3
4 (jump)
4
( END)
上述的 設定 動作 詳細如上圖
" 共有 52 次 設定 " 27 次 printf(" ");
依我推的 函數 : f(3)= n^3 + 2* ( n^2) + 2*n +1 = 52
但是 書上 的 函數 f'(3) = n *(n+1)*(n+2) / 6 = 10
到底 他所謂的執行次數 是指 printf(" ") 的次數 還是 設定的次數?
我真的搞不清楚 兩個迴圈我的推導跟課本 是一樣的
怎 三個迴圈就出錯 ??
我知道複雜的程式 推導 實際執行次數 是很 複雜的一件事
但這個 東西 我希望能弄懂 ~"~
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.225.21.177
推
07/10 14:32, , 1F
07/10 14:32, 1F
→
07/10 14:32, , 2F
07/10 14:32, 2F
→
07/10 14:33, , 3F
07/10 14:33, 3F
噓
07/10 14:48, , 4F
07/10 14:48, 4F
→
07/10 16:21, , 5F
07/10 16:21, 5F
→
07/10 16:47, , 6F
07/10 16:47, 6F
→
07/10 16:48, , 7F
07/10 16:48, 7F
→
07/11 09:28, , 8F
07/11 09:28, 8F
推
07/20 17:35, , 9F
07/20 17:35, 9F
→
07/20 17:35, , 10F
07/20 17:35, 10F
→
07/20 17:36, , 11F
07/20 17:36, 11F