生成具有很少唯一值的数据集

时间:2011-08-13 01:16:59

标签: c# algorithm

注意:这是2部分问题的第2部分。

Part 1 here

我想要更多地关于排序算法以及比编码更好的方法!所以我想我需要一些数据来处理。

我创建一些“标准”数据的方法如下:创建一定数量的项目,不确定它有多大,但我想玩得开心,让我的计算机呻吟一下:D

一旦我有了这个列表,我就会把它推入一个文本文件,然后读取它来运行我的算法。我应该总共有4个文本文件填充相同的数据,但只是排序不同以运行我的算法(见下文)。

如果我错了,请纠正我,但我相信我需要4种不同类型的场景来分析我的算法。

  • 随机排序的数据(为此我将使用knuth shuffle)
  • 反转数据(很容易)
  • 几乎排序(不确定如何实现)
  • 很少有人(再一次不知道如何处理这个)

此问题用于生成包含一些独特数据项的列表。

哪种方法最适合生成包含一些独特项目的数据集。

4 个答案:

答案 0 :(得分: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;
    }

答案 1 :(得分:0)

值得一看NBuilder。它是一个框架,旨在生成用于测试的对象,并且听起来就像您需要的那样。

您可以使用以下代码处理“少数独特”项目:

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

您还可以使用许多其他变体来获取您想要的数据。请查看网站上的一些示例以获取更多想法。

答案 2 :(得分:0)

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

关于模糊测试的重点是半随机数据。应该直接使这种方法适应您的问题

答案 3 :(得分:0)

我猜你的解决方案还可以。我只会轻描淡写地修改它:

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;
}

对于某些算法,这可能会有所不同。