我有一组N个问题,每个问题被归类为R科目之一。我正在尝试为测验生成一些随机排列的问题。
我如何生成一组问题的随机排列,使得没有两个连续的问题具有相同的主题?它不需要是完美的;我只是不想让连续五个相同类型问题的人厌烦。
此外,如果无法进行这样的排序(如A中18和B中的2),算法是否可以找到“均匀分布”的排列? (在这种情况下,合理地类似于6As,B,7As,B,5A)
或者,由于我按顺序提交问题,我是否可以每次随机选择一个不同主题的剩余问题而不会在最后强制重复一次?
我已经在Google上随机浏览了一段时间,似乎无法找到适合这种情况的任何内容。除了随机生成排列,直到找到一个有效的方法,这是缓慢,丑陋和愚蠢的。
答案 0 :(得分:1)
这是一个想法:
这很简单,符合您的要求。由于交错始终是相同的(即来自主题1的问题,然后来自主题2,然后来自主题3,并且再次从主题1开始),所以会丢失一点“随机性”。
这可以通过随机化每次迭代选择组的顺序来改进。
答案 1 :(得分:0)
从候选科目列表中删除以前使用过的科目。
例如,在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;
}