[問題] call function的成本

看板C_and_CPP作者時間6年前發表 (2019/01/09 13:29), 6年前編輯推噓5(5010)
留言15則, 3人參與, 6年前最新討論串1/1
最近在練習演算法 剛好寫到一個標準的硬幣問題 https://leetcode.com/problems/coin-change/ 本來用DP寫,發現只beat 70% 參考別人的寫法後,發現這題很多人都用DFS寫 於是寫了一個版本(DFS)結果time limit exceeded 後來改了一個版本(DFS2) DFS2只是簡單的將原本的return判斷式移動到進入遞迴之前,結果時間卻差很多 當然能理解多進一層遞迴確實成本有差 但是從時間複雜度來看,order應該一致的? 主要想請教原本寫法會time limit exceeded是否只是單純進遞迴成本差太多? 或著有其他因素在? 程式碼: https://goo.gl/e7ZEBq [額外請教一個github問題] 我每次編輯程式碼都會將tab的縮排長度設定為4 但是存檔後打開,看起來都自動跳回8 用筆電的話反而會自動跳為2 不知道要如何將它真的固定為4 ※ 編輯: worcdlo (42.73.253.241), 01/10/2019 06:41:56

01/10 07:08, 6年前 , 1F
雖然沒幫你驗證你的code,直覺上來看這是有剪枝跟沒剪枝
01/10 07:08, 1F

01/10 07:08, 6年前 , 2F
的差別,不是只有省掉call func
01/10 07:08, 2F
我自己看起來是覺得都有剪,只是第一個版本要進入下一層function才剪 另外因為連結更動用手機編輯,不知道為何就把更早的兩個回文刪了,真是抱歉 ※ 編輯: worcdlo (123.195.174.95), 01/10/2019 09:21:21

01/10 12:02, 6年前 , 3F
我沒有看題目純分享經驗,for裡面多加了個if-then break
01/10 12:02, 3F

01/10 12:02, 6年前 , 4F
兩者展開樹長相應該差挺多的。另外想提時間複雜度部分,
01/10 12:02, 4F

01/10 12:02, 6年前 , 5F
書本理論只是討論分級,假設某二者同級但差常數倍實機上
01/10 12:02, 5F

01/10 12:02, 6年前 , 6F
會有感很正常,隨著硬體換新,差異感會漸漸縮小。
01/10 12:02, 6F

01/10 18:26, 6年前 , 7F
看你目的是為了效率還是好維護
01/10 18:26, 7F

01/10 18:26, 6年前 , 8F
通常大型專案會朝向好維護,硬體花錢就有
01/10 18:26, 8F

01/10 18:27, 6年前 , 9F
一堆Bug無法維護的code硬體效能再好都沒用
01/10 18:27, 9F

01/10 18:30, 6年前 , 10F
一個function包了5000行和一個function500行的差異
01/10 18:30, 10F

01/10 18:31, 6年前 , 11F
效能可能差不到1/10000
01/10 18:31, 11F

01/10 22:49, 6年前 , 12F
這題要DP吧!? 怎麼會爆搜剪枝
01/10 22:49, 12F

01/10 22:51, 6年前 , 13F
至於你問的問題 其實不只插在有沒有call
01/10 22:51, 13F

01/10 22:52, 6年前 , 14F
不只差在有沒有call 那個for迴圈沒有break的話
01/10 22:52, 14F

01/10 22:52, 6年前 , 15F
也會多很多call出來
01/10 22:52, 15F
文章代碼(AID): #1SDVTBJC (C_and_CPP)