timeit モジュールを使用してパフォーマンスを測定しながら、いくつかの異なるアルゴリズム (16x16 の数独を解くため) を相互にテストしています。ただし、最初の timeit.repeat() 反復のみが実際に計算されているように見えます。これは、他の反復がはるかに高速になっているためです。t.repeat(repeat=10, number=1) を使用して単一のアルゴリズムをテストすると、次の結果が得られます。
[+] 次の結果: solve1 (関数 1/1)
[+] 最速........: 0.00003099
[+] 最遅........: 32.38717794
[+] 平均*........: 0.00003335 (最小/最大値なしで計算された平均)
10 の結果のうち最初の結果は、完了するまでに常にはるかに長い時間がかかります。これは、timeit.repeat() ループの 2 から 10 までの反復がループの前の反復のキャッシュされた結果を何らかの形で使用するという事実によってのみ説明できるようです。実際に for ループで timeit.repeat() を使用していくつかのアルゴリズムを相互に比較すると、パズルの解が 1 回だけ計算されるように見えます。
[+] 結果: solve1 (関数 1/3)
[+] 最速........: 0.00003099
[+] 最遅........: 16.33443809
[+] 平均*........: 0.00003263 (最小/最大値なしで計算された平均)
[+] 結果: solve2 (関数 2/3)
[+] 最速........: 0.00365305
[+] 最遅..........: 0.02915907
[+] 平均*........: 0.00647599 (最小/最大値なしで計算された平均)
[+] 結果: solve3 (関数 3/3)
[+] 最速........: 0.00659299
[+] 最遅........: 0.02440906
[+] 平均*........: 0.00717765 (最小/最大値なしで計算された平均)
本当に奇妙なことは、アルゴリズムの相対速度 (相互に関連する) が測定全体で一貫していることです。これは、すべてのアルゴリズムが独自の結果を計算していることを示しています。この極端なパフォーマンスの向上は、中間結果 (最初のソリューションの計算時に取得) の大部分がまだ何らかのキャッシュにあり、Python プロセスによって予約されているためですか?
どんな助け/洞察も大歓迎です。