エンジニア的なネタを毎週書くブログ

東京でWebサービスの開発をしています 【英語版やってみました】http://taichiw-e.hatenablog.com/

続・計算量を減らす:ループ内の処理を短くすることは効果大

昨日、
taichiw.hatenablog.com
なるものを書いたわけなんですが…

小細工を考える前にコードそのものの見直しをすべきかも
というお話。

結論から言うと、

一行変えただけで3分弱→30秒、5~6倍、驚きの速さにwwwww


変えたのこれだけ。
f:id:taichiw:20180422065736p:plain
github.com

従来、打席毎に乱数インスタンスを生成していた(=乱数の初期化がされていた)のをやめ、インスタンス変数にしました。
Playerクラスは1シーズン、143試合の開始時に9人分生成されているため、

1試合最低27打席 ✕ 143試合=3861回(以上) newしていたのが、 9回のみのNewに。
すると、この処理の実行時間が…
f:id:taichiw:20180421070604p:plain

バッティング毎に乱数初期化していたとき
167秒、152秒、… だったのが


Player毎に乱数初期化
29秒、30秒、26秒、29秒、… に。

どぇぇぇ。変わりすぎやろ。