パーソナルブログメモリ

a = [1, 1]
for _ in "*" * 999: a += [sum(a[-2:])]
print(a)

Python 過去のアルゴリズムの高速化

2021-01-15 | プログラムをマスター計画2020

アルゴリズムを作成する楽しさにスピードアップさせて満足するというものがある。

ほんの1行で格段に上がることも多々あります。

 

呆然とするばかりである。こんなものを載せていたとは、と...

 

数独の超難問を解くpythonのプログラム

2019年10月22日 このころ個人的には今と同じでさえないですが、今と比べるとはるかに幸せな時代でした。

 

なんで見直そうかと思ったかといえば過去のルーチンではCodinGameのSudoku Solveの最後が解けないから、

実際、最後の問題はコンピュータで作成した難解問題らしく、それでも解けませんでした。

ロジック的にミスがあるようです。

 

過去の時間の測定は7.2秒ほど

 

1) 無駄読みを削る

全体としてもどうにかしたいけど、具体案が浮かばない。

ただこれでは遅い。

ここは全チェックをかけず打った場所の縦横ラインと3x3枠の判定で無駄よみは減らします。

(画面はキャプチャー取り損ない変化していません)

 

1.6秒高速化

 

2) 無駄読みを削る

クリア判定を毎回のように行っていました。

最初に、空白が1つでもあったら判定エラーにしたところ

 

0.8秒高速化

 

3) deepcopyを減らす

仮に入れてボードエラーが起こった時もdeepcopy

そこをボードエラーが起こった時は手を戻すに変更

最近作るアルゴリズムでは、deepcopy自体、ほぼ使うことないです。

 

 

0.6秒アップしました

 

4) 無駄読みを削る

ここを高速化しようとしていました。

 

そして呼び出し元をみていると...

146行目、なにやっているんだろうか?

 

コメントアウト

 

2.3秒ほど高速化しました。

呆然とするばかりである。こんなものを載せていたとは、と...

 

少し修正した全ソース

https://colab.research.google.com/drive/13H7j9ZDuXGQtmNwq7iDfe6E6AZ-CK-yJ?usp=sharing


最新の画像もっと見る

コメントを投稿

ブログ作成者から承認されるまでコメントは反映されません。