アルゴリズムをテストする場合、一般的なアプローチはランダムテストです。ある分布(通常は均一)に従ってかなりの数の入力を生成し、それらに対してアルゴリズムを実行して、正当性を検証します。最新のテストフレームワークでは、いくつかの制限がありますが、アルゴリズムシグネチャを指定して自動的に入力を生成できます。
入力が数字、リスト、または文字列の場合、そのような入力を簡単に生成します。ツリーはより難しくなりますが、それでも簡単です(確率的な文脈自由文法または同様のアプローチを使用)。
ランダムグラフを(効率的に)生成するにはどうすればよいですか?通常、グラフをランダムに均一に選択することは、望むものではありません。それらは接続されているか、平面であるか、サイクルフリーであるか、他のプロパティを満たしている必要があります。拒否サンプリングは、潜在的に膨大な望ましくないグラフのセットのため、次善のようです。
注目すべき有用な分布は何ですか?ここで有用なのは
- グラフは手元のアルゴリズムを十分にテストする可能性が高く、
- 効果的かつ効率的に生成できます。
ランダムグラフには多くのモデルがあることを知っているので、この点でグラフ生成に最適な洞察に感謝します。
「あるアルゴリズム」が一般的すぎる場合は、テスト中のアルゴリズムの具体的なクラスとして、最短パス検索アルゴリズムを使用してください。テスト用のグラフは、接続されており、かなり高密度である必要があります(高い確率で、または少なくとも予想)。テストの場合、最適な解決策は、最短のパスの周りにランダムなグラフを作成して、目的の結果を知ることです(別のアルゴリズムを使用する必要はありません)。