2011-08-13 11 views
1

注:これは2つの部分からなる質問のパート2です。固有値の少ないデータセットの生成

Part 1 here

私はソートアルゴリズムの詳細に望むことだし、何それからコーディングするよりも行うには良い方法!だから、私はいくつかのデータが必要です。

次のようになりますいくつかの「標準」のデータを作成するための私のアプローチ:それを作るためにどのように大規模なわからない、アイテムのセット数を作成するが、私は楽しみを持っているし、私のコンピュータは少しうめき声作りたい:D

私はそのリストを持っていれば、それをテキストファイルにプッシュし、アルゴリズムを実行するためにそれを読み取るだけです。私は同じデータで満たされた合計4つのテキストファイルを持っているべきですが、私のアルゴリズムを実行するためには別の方法でソートしました(下記参照)。

私が間違っている場合は私を修正しますが、アルゴリズムをプロファイリングするには4種類のシナリオが必要です。

  • ランダムにソートされたデータは、(簡単に十分な)
  • 反転データを
  • ほとんど(これを実装する方法がわからない)ソート
  • 少数のユニークな((これのために私はクヌースshuffleを使用するつもりです)もう一度これにアプローチする方法がわからない)

この質問は、いくつかのユニークなデータ項目を含むリストを生成するためのものです。

いくつかのユニークな項目でデータセットを生成するのが最適です。

答えて

1

ここに自分の質問に答える。これが一番良いかどうかは分かりませんが、うまくいきます。

public static int[] FewUnique(int uniqueCount, int returnSize) 
    { 
     Random r = _random; 
     int[] values = new int[uniqueCount]; 
     for (int i = 0; i < uniqueCount; i++) 
     { 
      values[i] = i; 
     } 

     int[] array = new int[returnSize]; 
     for (int i = 0; i < returnSize; i++) 
     { 
      array[i] = values[r.Next(0, values.Count())]; 
     } 

     return array; 
    } 
0

NBuilderをご覧に値するかもしれません。これは、テスト用のオブジェクトを生成するために設計されたフレームワークで、必要なだけの音を出します。

あなたは、このようないくつかのコードで「少数のユニークな」アイテムを扱うことができます:

var products = Builder<YourClass>.CreateListOfSize(1000) 
    .WhereAll().AreConstructedWith("some fixed value") 
    .WhereRandom(20).AreConstructedWith("some other fixed value") 
    .Build(); 

あなたがそれを望むようにあなたのデータを取得するためにも使用することができ、他のバリエーションがたくさんあります。より多くのアイデアを得るために、サイトのサンプルの一部を見てください。

+0

ああ、それは素晴らしいです、それは多くのものに良いだろう!しかし、私はまだアルゴリズムを探していますので、他の言語で実装することができます。 – Odnxe

0

http://pages.cs.wisc.edu/~bart/fuzz/

すべてのセミランダムなデータに焦点を当てたファズテストについてです。あなたの問題にこのアプローチを適応させるのは簡単です。

+0

これまでにファズテストのことは聞いたことがありません。しかし、私は単純な学習目的のために少し殺すようです。 – Odnxe

+0

おそらく、あなたのデータが十分にランダムでないならば、それは潜在的な選択肢です – Woot4Moo

0

あなたの解決策はOKだと思います。私はそれを少しずつ変更するだけです:

public static int[] FewUnique(int uniqueCount, int low, int high, int returnSize) 
{ 
    Random r = _random; 
    int[] values = new int[uniqueCount]; 
    for (int i = 0; i < uniqueCount; i++) 
    { 
     values[i] = r.Next(low, high); 
    } 

    int[] array = new int[returnSize]; 
    for (int i = 0; i < returnSize; i++) 
    { 
     array[i] = values[r.Next(0, values.Count())]; 
    } 

    return array; 
} 

これはいくつかのアルゴリズムに違いがあります。

関連する問題