最近在练习演算法
刚好写到一个标准的硬币问题
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
1F:推 kaneson: 虽然没帮你验证你的code,直觉上来看这是有剪枝跟没剪枝 01/10 07:08
2F:→ kaneson: 的差别,不是只有省掉call func 01/10 07:08
我自己看起来是觉得都有剪,只是第一个版本要进入下一层function才剪
另外因为连结更动用手机编辑,不知道为何就把更早的两个回文删了,真是抱歉
※ 编辑: worcdlo (123.195.174.95), 01/10/2019 09:21:21
3F:推 kaneson: 我没有看题目纯分享经验,for里面多加了个if-then break 01/10 12:02
4F:→ kaneson: 两者展开树长相应该差挺多的。另外想提时间复杂度部分, 01/10 12:02
5F:→ kaneson: 书本理论只是讨论分级,假设某二者同级但差常数倍实机上 01/10 12:02
6F:→ kaneson: 会有感很正常,随着硬体换新,差异感会渐渐缩小。 01/10 12:02
7F:推 IhateOGC: 看你目的是为了效率还是好维护 01/10 18:26
8F:→ IhateOGC: 通常大型专案会朝向好维护,硬体花钱就有 01/10 18:26
9F:→ IhateOGC: 一堆Bug无法维护的code硬体效能再好都没用 01/10 18:27
10F:推 IhateOGC: 一个function包了5000行和一个function500行的差异 01/10 18:30
11F:→ IhateOGC: 效能可能差不到1/10000 01/10 18:31
12F:推 Astar5566: 这题要DP吧!? 怎麽会爆搜剪枝 01/10 22:49
13F:→ Astar5566: 至於你问的问题 其实不只插在有没有call 01/10 22:51
14F:→ Astar5566: 不只差在有没有call 那个for回圈没有break的话 01/10 22:52
15F:→ Astar5566: 也会多很多call出来 01/10 22:52