【发布时间】:2014-06-28 13:10:05
【问题描述】:
我正在构建一个测验应用程序,它会从问题池中随机抽取问题。但是,要求问题池仅限于用户尚未看到的问题。然而,如果用户已经看过所有问题,那么算法应该“重置”并且只显示用户看过一次的问题。也就是说,始终向用户显示他们从未见过的问题,或者,如果他们已经看到所有这些问题,则总是先向他们显示他们不经常看到的问题,然后再显示他们经常看到的问题。
列表 (L) 的创建方式满足以下条件:列表 (I) 中的任何值都可能存在一次或在列表中重复多次。让我们在列表中定义另一个值 J,使其与 I 的值不同。那么0 <= abs(frequency(I) - frequency(J)) <= 1 将始终为真。
换句话说:如果一个值在列表中重复 5 次,并且 5 次是列表中任何值重复的最大次数,那么列表中的所有值将重复 4 次或5次。该算法应该先用frequency == 4返回列表中的所有值,然后再用frequency == 5返回任何值。
对不起,这太冗长了,我正在努力简洁地定义这个问题。请随时向 cmets 提出问题,如果需要,我将进一步获得资格。
提前感谢您提供的任何帮助。
澄清
感谢您迄今为止提出的答案。我认为它们中的任何一个都还没有。让我进一步解释。
我没有与用户互动并向他们提问。我将问题 ID 分配给考试记录,以便在用户开始考试时确定他们有权访问的问题列表。因此,我有两种数据结构可供使用:
- 用户有权访问的可能问题 ID 列表
- 此用户之前分配的所有问题 ID 的列表。这是上面描述的列表 L。
因此,除非我弄错了,否则此问题的算法/解决方案将需要涉及使用上述两个列表的基于列表和/或集合的操作。
结果将是一个问题 ID 列表,我可以将其与考试记录相关联,然后插入到数据库中。
【问题讨论】:
-
我认为问题比你说的要简单得多。我在下面有您的解决方案,它不使用多个列表或枢轴,并且更容易编码。让我知道是否有不足之处。您使用的是 Python 2 还是 3?
-
@AaronHall 请参阅我的问题中的说明。另外,我使用的是 Python 2。
-
需求蔓延;即使是编码人员也无法抗拒。我相信我编辑的答案可以为您节省一步并获得相同的信息。
标签: python algorithm list frequency