生成具有少量惟一值的数据集

本文关键字:数据集 | 更新日期: 2023-09-27 18:05:20

注意:这是一个两部分问题的第二部分。

第一部分

我想更多地了解排序算法,还有什么比编码更好的方法呢?所以我想我需要一些数据来处理。

我创建一些"标准"数据的方法如下:创建一组项目,不确定要多大,但我想玩得开心,让我的电脑发出一点呻吟:D

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

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

  • 随机排序的数据(为此我将使用knuth shuffle)
  • 反向数据(足够容易)
  • 几乎排序(不确定如何实现这一点)
  • 少数独特的(再次不确定如何处理这个)

这个问题用于生成一个包含几个唯一数据项的列表。

哪一种方法最适合生成只有几个唯一项的数据集

生成具有少量惟一值的数据集

回答我自己的问题。我不知道这是不是最好的,但它确实有效。

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

NBuilder可能值得一看。它是一个框架,用于生成用于测试的对象,听起来就像您所需要的。

你可以用这样的代码来处理"少数唯一的"条目:

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

你也可以使用很多其他的变量来获得你想要的数据。你可以看看网站上的一些示例来获得更多的想法。

http://pages.cs.wisc.edu/巴特/模糊/

都是关于模糊测试,专注于半随机数据。

我想你的解决方案还可以。我只会稍微修改一下:

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

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