[闲聊] 用if else规避一些条件反而更慢?

楼主: ericerix (Ponwar)   2020-12-06 11:14:05
选手1号:
https://pastebin.com/TL2Ys690
选手2号:
https://pastebin.com/B6i600fX
这是integer转罗马的题目,
令我比较意外的是,
选手1号有去判断temp是否为0,是的话直接换下一个不囉唆
而选手2号没有去判断,而是即使是0也照着做,感觉会多运算一些,例如下面mod
而实测结果居然是选手2号比较快?
所以可以理解成,判断是否为0比mod还要慢囉?
那这样到底要什么时候去下if else来使程式变快而不是变慢?
作者: LP9527 (ㄊㄇ抽菸都去)   2020-12-06 13:46:00
大部分计算比判断快
作者: art1 (人,原来不是人)   2020-12-06 14:07:00
因为 CPU 的分支预测猜错了就会慢很多,所以一些最佳化方法会用特殊技巧让判断变成计算
作者: shane87123 (阳光大肥宅)   2020-12-06 15:38:00
借串问 dict和array存取速度是否也有差别?
作者: pmove (金疾柠檬)   2020-12-06 17:45:00
dict 是hash 很快喔
作者: OrzOGC (洞八达人.拖哨天王)   2020-12-06 18:24:00
dict存取感觉都慢array很多
作者: pmove (金疾柠檬)   2020-12-06 19:57:00
Array在Python叫list, 跟dict比速度,详细要看您怎么用?如果您要存取的list元素要线性搜寻,这时改用dict 会快很多
作者: miwuz (ibike)   2020-12-06 20:40:00
推楼上~
作者: germun (ger)   2020-12-06 22:49:00
不保证谁快 不过有些方法的优势要在资料量大才显现的出来
作者: DLHZ ( )   2020-12-07 01:25:00
详情请见算盘本 简单来说因为处理器中pipeline设计的缘故会有些难以处理的情况 而if系列的指令就是其中一种(control hazard) 虽然有更进一步改进解决的方法 但一般来说能避免判断式的写法还是会比较快 有错还请指正
作者: leolarrel (真.粽子无双)   2020-12-08 16:48:00
可以google "CPU 管线 分支预测"

Links booklink

Contact Us: admin [ a t ] ucptt.com