0

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

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

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

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

我在 Google 上随意查看了一段时间,似乎找不到任何适合这种情况的东西。除了随机生成排列,直到找到一个有效的排列,这是缓慢、丑陋和愚蠢的。

4

2 回答 2

1

这是一个想法:

  1. 根据主题将您的问题分成 R 组。
  2. 分别洗牌每组
  3. 根据组的相对大小交错组,使它们均匀分布。

这很简单,符合您的要求。由于交织总是相同的(即从主题 1 开始,然后从主题 2 开始,然后从主题 3 开始,然后再次从主题 1 开始),因此丢失了一点“随机性”。

这可以通过随机化您为每次迭代选择组的顺序来改进。

于 2013-06-04T00:31:12.313 回答
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;
   }
于 2013-06-04T19:44:19.860 回答