从有序列表创建随机有序列表

时间:2008-10-03 17:40:48

标签: algorithm

我有一个应用程序可以获得制造过程的质量结果 创建图表既显示坏的帕累托图,也显示生产吞吐量。

为了自动执行测试这些统计过程的任务,我想确定地能够将记录添加到数据库中,并让质量技术转到某些图表并与已知的好图表进行比较。但是,我也想模拟结果,以便他们进入数据库,就像用户正在运行测试过程一样。

我有一个想法是填写一个列表,其中包含i number good,j number bad1,k number bad 2等等。然后在插入数据库之前以某种方式随机排序列表。

所以,我的问题是,是否有一个标准算法来获取值的排序列表并创建一个随机排序的列表?

7 个答案:

答案 0 :(得分:12)

你想要使用shuffle algorithm.确保使用正确的shuffle算法而不是自制的算法,因为它可能会为数据引入某种形式的微妙模式。见this post by Jeff Atwood about the problem with using "random enough" shuffles.

答案 1 :(得分:1)

答案 2 :(得分:0)

我们的主持人有一篇关于洗牌的非常好的文章,我相信可以采用一些好的想法 http://www.codinghorror.com/blog/archives/001008.html

答案 3 :(得分:0)

取决于您对“随机性”的需求。最简单的方法可能就是将所有元素都传递到哈希集中并迭代结果。您获得的顺序将是确定性的,但对于大多数意图和目的,可以认为是随机的。或者,您可以在列表的[0..length]之间生成随机数,挑选元素并将它们推送到新列表中。假设列表删除是恒定时间,结果将是以O(n)效率生成的随机列表。

答案 4 :(得分:0)

Random rnd = new Random();
List<int> orderedList = new List<int>();
List<int> randomList = new List<int>();
while (orderedList.Count != 0)
{
    int index = rnd.Next(0, orderedList.Count);
    randomList.Add(orderedList[index]);
    orderedList.RemoveAt(index);
}

答案 5 :(得分:0)

一个简单的答案是有一个数组或向量,循环遍历它,对于每个被访问的位置,从列表的其余部分随机选择一个元素并将其与当前元素交换。
你需要一个合理的随机数生成器。

答案 6 :(得分:-1)

我以前的方式是让一个循环运行多次,生成两个0到列表长度的随机数,然后交换这两个元素。