作者ericerix (我的帥,在於臉)
看板Python
標題[閒聊] 用if else規避一些條件反而更慢?
時間Sun Dec 6 11:14:05 2020
選手1號:
https://pastebin.com/TL2Ys690
選手2號:
https://pastebin.com/B6i600fX
這是integer轉羅馬的題目,
令我比較意外的是,
選手1號有去判斷temp是否為0,是的話直接換下一個不囉唆
而選手2號沒有去判斷,而是即使是0也照著做,感覺會多運算一些,例如下面mod
而實測結果居然是選手2號比較快?
所以可以理解成,判斷是否為0比mod還要慢囉?
那這樣到底要什麼時候去下if else來使程式變快而不是變慢?
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 101.10.13.175 (臺灣)
※ 文章網址: https://webptt.com/m.aspx?n=bbs/Python/M.1607224450.A.D52.html
※ 編輯: ericerix (101.10.13.175 臺灣), 12/06/2020 11:14:42
1F:→ LP9527: 大部分計算比判斷快 12/06 13:46
2F:推 art1: 因為 CPU 的分支預測猜錯了就會慢很多,所以一些最佳化方法 12/06 14:07
3F:→ art1: 會用特殊技巧讓判斷變成計算 12/06 14:08
4F:→ shane87123: 借串問 dict和array存取速度是否也有差別? 12/06 15:38
5F:推 pmove: dict 是hash 很快喔 12/06 17:45
6F:→ OrzOGC: dict存取感覺都慢array很多 12/06 18:24
7F:推 pmove: Array在Python叫list, 跟dict比速度,詳細要看您怎麼用?如 12/06 19:57
8F:→ pmove: 果您要存取的list元素要線性搜尋,這時改用dict 會快很多 12/06 19:57
9F:推 miwuz: 推樓上~ 12/06 20:40
10F:推 germun: 不保證誰快 不過有些方法的優勢要在資料量大才顯現的出來 12/06 22:49
11F:→ DLHZ: 詳情請見算盤本 簡單來說因為處理器中pipeline設計的緣故會 12/07 01:25
12F:→ DLHZ: 有些難以處理的情況 而if系列的指令就是其中一種(control ha 12/07 01:25
13F:→ DLHZ: zard) 雖然有更進一步改進解決的方法 但一般來說能避免判斷 12/07 01:25
14F:→ DLHZ: 式的寫法還是會比較快 有錯還請指正 12/07 01:25
15F:→ leolarrel: 可以google "CPU 管線 分支預測" 12/08 16:48