簡単な数独ソルバーを作成しました。パフォーマンスを大まかにテストするために、単純なSystem.currentTimeMillis呼び出しを使用しています。
数独の初期設定をテキストファイルで用意しました。プログラムはファイルを読み取り、各数独構成を解決します。テストを実行すると、最初の 3 ~ 4 回のソルバ実行が残りの実行よりも非常に遅く、速度が遅いということは桁違いに遅いことに気付きました。
サンプルの疑似コード スニペットがあります。
main(){
while(file has lines){
configuration = readLine();
Solver s = new Solver(configuration);
now1 = System.currentTimeMillis();
s.solve();
now2 = System.currentTimeMillis();
System.out.print(now2 - now1);
}
}
私はsolve()メソッドのみを測定するので、IO は問題ではありません。一部のデータをプログラムにハードコーディングしましたが、それでも最初のいくつかは遅くなりました。パズルの難しさも問題ではありません。さまざまな順列と構成の難しさを試しましたが、常に同じです。最初のいくつかは遅くなります。
私の質問は - それはなぜですか、それを防ぐ方法はありますか?