生成具有少量惟一值的数据集
本文关键字:数据集 | 更新日期: 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;
}
对于某些算法,这可能会有所不同