1、一道题有可能有多个知识点
2、按不同的知识点抽题组卷,要求去重,即同一道题有两个知识点的话,不能在一套试卷里出现两次
例如:题号有 1,2,3,4,5,6 知识点A包含1,2,3,4 四道题,知识点B包含3,4,5,6四道题,现在要在知识点A下抽取2道题,知识点B下抽取3道题,算法如何实现?题量有100道题,知识点有6个的时候,六个知识点中一共抽取45道题,运算量级如何?
谢谢作答。
你看下这个方案能否满足你的需求:
1. 将题目整理成Key:Value键值对(questionMap),key:某个知识点 value:包含某个知识点的题目集合
2. 遍历需要抽取的知识点(k1),和知识点对应的题目个数,从 questionMap 中按照获取k1对应的所有题目(如果题目太多可以先获取一部分),将获取的题目放入去重集合中(resultSet),resultSet 内部具有去重功能,计算成功放入的个数 k1Count,直到 k1Count 等于知识点(k1)要求的题目个数
3. 遍历完所有的知识点之后,resultSet 就是你需要的问卷了
在题库有限的前提下,如果同时要求以下来两点,我认为是不一定有解的:
1. 最后抽取的题目的个数一定(比如 必须有45道题)
2. 最后抽取的题目包含的知识点个数一定(比如 必须有6个知识点,不多不少)
运算量很小, 就是一个有约束的组合问题。 请问你最大就有 6 个知识点? 那么 45 道题目就覆盖 6 个知识点? 那重复覆盖是不可避免的了?