Performance 洗牌时跟踪物品的最佳方法,洗牌前跟踪物品的位置
我有一系列问题。每个问题至少有两个答案可供选择。目前只有一种选择是正确的 让答案按相同的顺序排列,可以教会学生答案的位置,而不是学习问题的实际答案。汉奇洗牌回答是好的 问题:我使用索引跟踪每个问题的正确答案。这种方法不适用于将答案混合 当前问题结构:Performance 洗牌时跟踪物品的最佳方法,洗牌前跟踪物品的位置,performance,algorithm,language-agnostic,Performance,Algorithm,Language Agnostic,我有一系列问题。每个问题至少有两个答案可供选择。目前只有一种选择是正确的 让答案按相同的顺序排列,可以教会学生答案的位置,而不是学习问题的实际答案。汉奇洗牌回答是好的 问题:我使用索引跟踪每个问题的正确答案。这种方法不适用于将答案混合 当前问题结构: question structure { correct answer, index of where the correct answer is in the array below list of answers, simple arr
question structure {
correct answer, index of where the correct answer is in the array below
list of answers, simple array of strings
}
当在数组中移动正确答案时(Fisher–Yates shuffle),索引会发生变化
一种可能的解决方案是将结构切换到该模式,但效率低下:
question structure {
list of answers
}
answer structure {
boolean correct answer (true, false)
string answer
}
有更好的方法吗?
如何在数组中跟踪正确答案
我在考虑将一系列答案保存在一个列表中,然后使用一个地图并洗牌该地图。看起来像是杀伤力过大、复杂、内存和cpu不足。这样我就可以保持索引的正确答案
我对这个问题视而不见
注意:这个程序原型是用C#编写的,但应该没那么重要。在洗牌过程中,算法选择两个索引并在这些索引处交换数组元素。您所需要做的就是检查当前答案索引是否是这些索引之一。如果是,请将其更改为另一个 乙二醇
//给定两个元素i和j,它们将用于交换、更新应答索引
如果answerIndex=i,则
answerIndex好吧,如果是我,我会用一个int ID
来识别每个答案,然后用ID来识别正确的答案(比如int correct\u ID
。因此,当用户选择一个问题时,你所要做的就是比较正确的ID和所选问题的ID,不管你洗牌多少次
它与布尔思想类似,但也开启了其他可能性:如果您对答案执行其他操作,此ID也可以派上用场,因为比较int
比string
更快。
(如果我记得有一种情况可以作为示例,我会更新,现在还不能想出一个)好吧,这里有一个Python示例
>>> items = [
... (0, 'Apple'),
... (1, 'Banana'),
... (2, 'Orange'),
... (3, 'Pear'),
... ]
>>> import random
>>> random.shuffle(items)
>>> items
[(1, 'Banana'), (2, 'Orange'), (0, 'Apple'), (3, 'Pear')]
>>> for key, value in items:
... print key, value
...
1 Banana
2 Orange
0 Apple
3 Pear
>>>
关键的一点是您可以洗牌记录,其中每个记录都有一个与其关联的ID,而不仅仅是字符串值
您可以为每个项目存储唯一的ID,或者只将其中一个标记为“正确”答案(因此每个项目都有一个True或False,并且只有一个是True)
>>> items = [
... (0, 'Apple'),
... (1, 'Banana'),
... (2, 'Orange'),
... (3, 'Pear'),
... ]
>>> import random
>>> random.shuffle(items)
>>> items
[(1, 'Banana'), (2, 'Orange'), (0, 'Apple'), (3, 'Pear')]
>>> for key, value in items:
... print key, value
...
1 Banana
2 Orange
0 Apple
3 Pear
>>>