看板 Grad-ProbAsk 關於我們 聯絡資訊
https://i.imgur.com/ZYTZ4ya.jpg 請問這題要如何下手 題目看不太懂.... 答案就只給一個O(n^2)而已 拜託了 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 120.105.145.196 ※ 文章網址: https://www.ptt.cc/bbs/Grad-ProbAsk/M.1539355170.A.3BB.html
tataTangQQ: 一個loop call funtion,function裡也有一個loop10/12 23:38
謝謝你 有看懂了
befdawn: 後面還有題目嗎?10/12 23:48
後面剩一個右大括號而已
skyHuan: compute_value()副程式是O(k)10/13 00:22
skyHuan: 主程式迴圈i從1開始跑到n10/13 00:23
skyHuan: i小於1000的時候是O(1)10/13 00:23
skyHuan: i很大的時候(超過1000)就是O(i)10/13 00:23
skyHuan: 複雜度=1+1+...+1+1000+1001+1002+...+n=O(n^2)10/13 00:23
可是題目上是寫n<1000,不是i<1000 是題目有錯嗎 ※ 編輯: sooge (125.231.41.246), 10/13/2018 02:11:54
skyHuan: 喔喔喔我看錯題目,那還是一樣在n很大的時候迴圈O(n)跑n10/13 07:47
skyHuan: 次,所以O(n^2)10/13 07:47
skyHuan: 複雜度是討論n很大的時候。還有這題程式s沒設初值跑應該10/13 07:49
skyHuan: 會出錯雖然跟這題無關XD10/13 07:49
另外我想問value=value+(i*k)這個式子 最後答案不是要變成 (0+1+.......k-1)*k=[(k-1)*k/2]*k嗎 然後代回n應該是O(n^3)才對 為什麼會是O(n^2) ※ 編輯: sooge (125.231.41.246), 10/13/2018 10:32:59
skyHuan: value=value+(i*k)這個式子只要O(1),迴圈跑k次所以compu 10/13 10:47
skyHuan: te_value()整個副程式呼叫一次是O(k),複雜度是看input d10/13 10:47
skyHuan: ata大小不是看算出來的值 10/13 10:47
不知道我有沒有理解錯誤 所以value=value+(i*k)可以直接看成value++的意思嗎,因為 我們主要是要看它跑了幾次迴圈不是要看它算出來的值 ※ 編輯: sooge (120.105.145.168), 10/13/2018 11:11:57
skyHuan: 對啊今天如果有一個程式 10/13 11:25
skyHuan: int test(int k){ return k*k; } 10/13 11:25
skyHuan: 複雜度也是O(1)不是k^2 他只做了一次乘法 10/13 11:25
懂了 太謝謝你了!! 感謝 ※ 編輯: sooge (120.105.145.153), 10/13/2018 11:33:32
befdawn: 請問s大(可惜這邊不能直接tag哈哈),複雜度跟 input da 10/13 14:16
befdawn: ta 大小有關,是指 input 值大小嗎?(這樣是算 bits?) 10/13 14:16
skyHuan: 我說錯了應該要說資料量大小影響到執行"次數",比如資料 10/13 14:48
skyHuan: 量是n,迴圈跑到n,資料量就有影響到複雜度,像上面test( 10/13 14:48
skyHuan: )函式如果只是算數"值"就不會影響複雜度 10/13 14:48
skyHuan: int test(int k){ return k*k; } => O(1) 10/13 14:52
skyHuan: int test(int k){ 10/13 14:52
skyHuan: for(i=0;i<k;i++) printf("hello!"); } => O(k) 10/13 14:52
befdawn: 了解,謝謝s大解說 10/13 15:10