有關回圈執行次數的問題

看板C_and_CPP作者 (小銓)時間15年前 (2009/07/10 13:25), 編輯推噓1(218)
留言11則, 5人參與, 最新討論串1/1
小弟 有個很囧的問題 想請問一下板上 有關下面迴圈執行的次數 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
第一,你列的程式後面執行次數是錯的,應該是n*n*n
07/10 14:32, 1F

07/10 14:32, , 2F
第二,根據n*(n+1)*(n+2)/6 我覺得你程式會否看錯,是不是
07/10 14:32, 2F

07/10 14:33, , 3F
for(i=1;i<=n;i++) for(j=i;j<=n;j++) for(k=j;k<=n;k++)
07/10 14:33, 3F

07/10 14:48, , 4F
先寫好標題 =_=
07/10 14:48, 4F

07/10 16:21, , 5F
1,2,3 只有3個 1,2,3,....,n只有n個拉
07/10 16:21, 5F

07/10 16:47, , 6F
那不知道 設定 "=" 算不算 執行次數呢@"@? 還是 printf
07/10 16:47, 6F

07/10 16:48, , 7F
才算執行次數 這樣n=3 印出 27次 n*n*n=27
07/10 16:48, 7F

07/11 09:28, , 8F
你不是問迴圈跑起幾次嗎? 跟 設定 "=" 有什麼關係
07/11 09:28, 8F

07/20 17:35, , 9F
n * (n+1) *(n+2) /6 是指Σk^3 (k=1~n)
07/20 17:35, 9F

07/20 17:35, , 10F
所以你的程式應該是三樓說的那樣
07/20 17:35, 10F

07/20 17:36, , 11F
PS. Σk^3 是高一數學歐
07/20 17:36, 11F
文章代碼(AID): #1ALj3B_r (C_and_CPP)