生成均匀分布的随机排列的算法

时间:2013-06-04 00:13:59

标签: algorithm distribution permutation

我有一组N个问题,每个问题被归类为R科目之一。我正在尝试为测验生成一些随机排列的问题。

我如何生成一组问题的随机排列,使得没有两个连续的问题具有相同的主题?它不需要是完美的;我只是不想让连续五个相同类型问题的人厌烦。

此外,如果无法进行这样的排序(如A中18和B中的2),算法是否可以找到“均匀分布”的排列? (在这种情况下,合理地类似于6As,B,7As,B,5A)

或者,由于我按顺序提交问题,我是否可以每次随机选择一个不同主题的剩余问题而不会在最后强制重复一次?

我已经在Google上随机浏览了一段时间,似乎无法找到适合这种情况的任何内容。除了随机生成排列,直到找到一个有效的方法,这是缓慢,丑陋和愚蠢的。

2 个答案:

答案 0 :(得分:1)

这是一个想法:

  1. 根据主题将您的问题分组为R组。
  2. 分别对每个组进行随机播放
  3. 根据组的相对大小交错组,使它们均匀分布。
  4. 这很简单,符合您的要求。由于交错始终是相同的(即来自主题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;
   }