数独パズルを生成するためのランダム化された再帰バックトラッキング アルゴリズムがあります (こちらを参照)。平均して十分に高速に動作しますが、最悪の場合の実行時間は容認できないほど遅くなります。以下は、100 回の試行の実行時間 (ミリ秒単位) のヒストグラムです (「More」は約 200,000 ミリ秒です!)。
tミリ秒後に単純にタイムアウトし、新しいランダム シードで再起動することで、アルゴリズムを改善したいと考えています。これが無限に繰り返されるのを防ぐために、n回試行したら停止するか、試行が失敗するたびにtを増やします。tが中央値よりもはるかに大きい場合、その後の試行ではるかに高速に実行できる可能性が高くなります 。
質問:
- 異なるプロセッサのタイムアウト期間tを調整するにはどうすればよいですか? 各実行前にプロセッサのパフォーマンスをベンチマークする高速で信頼性の高い方法はありますか? または、以前のすべての実行の平均実行時間を使用するなど、複数回の実行でプロセッサに適応する必要がありますか? 関連する場合は、Androidでこれを実行しています。
- ランタイムの分布におけるロングテールを完全に回避するためのより良い戦略はありますか?