6

ファイルで構成される成長するディレクトリ構造を(シード値に基づいて、同じテストを複数回再実行できるように)疑似ランダムに自動生成するプログラムを作成しようとしています。(これは、ソース管理データベースのインストールのストレス テストです)

ここで機能する可能性のある準ランダムな「スペース充填」シーケンス (例: van der Corput シーケンスまたはHalton シーケンス) に似たものを知っている人がいるかどうか疑問に思っていました。

編集:またはフラクタルアルゴリズム。これはフラクタル アルゴリズムのように思えます。


編集2:気にしないでください、私は明らかな解決策を見つけたと思います。空のツリーから始めて、疑似乱数ジェネレーターの順次出力を使用して決定論的に(生成された数とこれまでに生成されたツリーの状態に基づいて)1つを行いますN 個のアクションのうち、新しいサブディレクトリの作成、新しいファイルの追加、ファイルの名前変更、ファイルの削除など。

大量のファイルで問題が発生し、原因が正確にわからない状況に陥っているため、ファイルをフォルダー構造に順次ダンプするのではなく、この方法で行いたいと考えています。(ツリーの深さ、名前変更の数、削除の数など)

生成する必要があるのは 1 つの固定ツリーだけではありません。使用戦略は次のとおりです。ツリー構造を少し成長させ、いくつかのパフォーマンス統計を評価し、ツリー構造をもう少し成長させ、いくつかのパフォーマンス統計を評価します。

4

3 に答える 3

2

これが単なるテスト用である場合、単純で素朴な生成アルゴリズムの何が問題になっているのでしょうか? 同様に、ランダム (1 ~ 10) の量のサブディレクトリを生成し、それらの名前を生成してから、ディレクトリごとにサブディレクトリといくつかのファイルを再帰的に生成します。

これは簡単にカスタマイズでき、 のシードを制御できますrand。ファンキーなニーズの場合、ファイル/ディレクトリの量の分布は非線形になる可能性がありますが、ニーズにより適したものになります。

30分で作り上げて、やり遂げることができる何かに聞こえます. 数学的または複雑なものの必要性がわかりません。もちろん、これがただの楽しみでない限り:-)

于 2009-02-05T20:12:22.687 に答える
1

2番目の編集で述べたように、私はおそらくすべてをファイルツリートラバーサルとして実装し、PRNGが「ディレクトリへの変更」、「ディレクトリの作成」、「1レベル上に移動」、「ファイルの作成」、「削除」を決定します。 file」であり、削除するファイル、変更するディレクトリ、およびファイルとディレクトリの名前を生成するための別の値があります。

同様の方法を使用して、作成したワークフローサーバーのストレステストを行いました(作業項目がどこにあるかを追跡する必要はありませんでしたが、操作するワークフローサーバーをランダムに選択するだけで済みました)。

于 2009-02-05T20:39:44.257 に答える
1

これは、楽しいパズルになるさまざまな問題のセットです。

まず、疑似乱数ジェネレーターがあります。利用可能なものがたくさんあります。0..n-1 の範囲の数値を作成する関数のみを期待しています。

次に、単一ノード上のサブノードの数を決定するアルゴリズムがあります。線形関数を使用したくなるかもしれませんが、それは現実を正しく表していません。したがって、次の関数を作成できます。

randomsize() {
  int n = Random(0,10);
  if (n<10) return n;

  return Random(0,9) + 10 * random;
}

この関数は小さい数を生成します。ほとんどは 0 から 9 の範囲ですが、上限は事実上無限です。より大きな数が必要な場合は、より大きなしきい値を使用することもできます

randomsize() {
  int n = Random(0,100);
  if (n<10) return n;

  return Random(0,9) + 10 * random;
}

最後の問題は、ツリーをどのように作成するかです。これはかなり単純です。ただし、アルゴリズムは終了する必要があることに注意してください。そのため、次のいずれかを実行する必要があります。

  • 最大深度を使用する
  • ネストレベルに基づいて生成された数を減らす
  • サブノード全体のパーセンテージとして葉の数を決定します。このパーセンテージは、より高いレベルで増加する必要があります (最初のレベルで 10-50、2 番目で 20-60..5 番目で 50-100、6 番目で 60-100、9 番目以降で 90-100 まで)。

もちろん、パラメータを微調整して、必要なツリーを作成できます。

于 2009-02-05T20:28:52.077 に答える