Algorithm 生成均匀分布随机排列的算法
我有一组N个问题,每个问题都被归类为R个主题中的一个。我试图为测验生成一些随机排列的问题 我如何生成一组问题的随机排列,以确保没有两个连续的问题具有相同的主题?它不需要是完美的;我只是不想用五个相同类型的问题让人厌烦 此外,如果这样的排序是不可能的(如A的18和B的2),算法能找到“均匀分布”的排列吗?(在这种情况下,类似6As,B,7As,B,5As的合理值) 或者,由于我是按顺序提问的,我是否可以每次随机选择一个不同主题的剩余问题,而不必在最后重复一些 我在谷歌上随机搜索了一段时间,似乎找不到任何适合这种情况的东西。除了随机生成排列,直到你找到一个有效的排列,这是缓慢的,丑陋的和愚蠢的。这里有一个想法:Algorithm 生成均匀分布随机排列的算法,algorithm,distribution,permutation,Algorithm,Distribution,Permutation,我有一组N个问题,每个问题都被归类为R个主题中的一个。我试图为测验生成一些随机排列的问题 我如何生成一组问题的随机排列,以确保没有两个连续的问题具有相同的主题?它不需要是完美的;我只是不想用五个相同类型的问题让人厌烦 此外,如果这样的排序是不可能的(如A的18和B的2),算法能找到“均匀分布”的排列吗?(在这种情况下,类似6As,B,7As,B,5As的合理值) 或者,由于我是按顺序提问的,我是否可以每次随机选择一个不同主题的剩余问题,而不必在最后重复一些 我在谷歌上随机搜索了一段时间,似乎找不
这可以通过随机选择每次迭代的分组顺序来改进。从候选主题列表中删除以前使用的主题 例如,在Java中,假设您有10个主题:
Subject previous = listSubjects.get( 0 );
while( true ){
listCandidateSubjects.remove( previous );
int xSelection = Random.nextInt( 10 );
Subject current = listCandidateSubjects.get( xSelection );
listCandidateSubjects.add( previous );
// generate question for current subject here
// when have enough questions break
previous = current;
}
你找不到任何符合你的情况的“随机”的原因,是因为你的约束实际上使它不是随机的。你希望它是平衡的,而不是随机的。。。。“关闭为非主题”的确切含义是什么?为什么它适用于这个问题?好吧,因为我是从一组固定的主题开始的,一旦我讲到最后,我可能就没有任何可能用到的问题了。例如,从AAABB开始,我可能会得到BABA。。。然后呢?谢谢你的回答@user2449745如果您阅读了代码,您将看到之前删除的主题在选择后被重新添加。我列出的代码正是你的问题所说的你想要做的:避免两个后续问题都来自同一主题的可能性。但请看我的例子:如果我有3个主题A和2个主题B,而我恰好从B开始。。。然后它会变成B,A,B,A,然后我们会有一个错误,因为没有更多的B可供选择。@user2449745听着,你的问题说你不想让两个主题的问题连成一行。这就是我的算法所提供的。如果你想开始创建所有类型的异常和角落案例,你需要指定它们到底是什么。嗯,我想这完全符合要求!同意,很多随机性都丢失了,但我认为随机性并不是这个设置中最重要的东西。谢谢