请与我一起露面,因为我甚至不能熟练掌握数学世界。
我正在考虑分析测试。它由四个问题组成,每个问题有十个选项。从每个问题中,必须选择三个选项。那当然总共会产生12个答案。
使用Ruby的[]。组合分析可能的组合数量,我的戴尔工作站会冻结并无法生成合理的值。这个计算真的非常强烈/大吗?
在12个答案中使用40个选项,我认为我应该运行:
[0...39].combination(12){|x| p x }
我还找到了the Wikipedia article on Combination。但是在数学方面存在障碍,这真的没有让我变得更聪明。
我会非常感谢我能在这件事上得到任何帮助。谢谢大家。
中学/后续问题:
并指向任何能够找到智能方法来生成所有可能组合的人。它是模拟所有可能答案的“离线”Ruby应用程序所必需的。我的大脑因分析文档而头晕目眩 - 但我似乎找不到有效的方法来完成这项任务。
理想情况下,我需要一个包含代表所选选项的整数的巨型数组:
[[0, 1, 2], [0, 1, 2], [0, 1, 2], [0, 1, 2]]
...例如表示使用选项0,1和2回答问题一,二,三和四的场景。
答案 0 :(得分:3)
你提供的代码是要求从40件事中选择12件事的所有方法,这是一个巨大的数字(因此你的机器冻结的原因),但是,从你描述你的情况的方式来看,我认为这是不对的。
每个问题都应该单独处理,也就是说,你想要从10件事情中选择3件事的方式的数量:
[0...9].combination(3) {|x| p x }
将打印出所有不同的方式。这提供了回答单个问题的所有方法(对于所有问题都是相同的)。
这也应该运行得更快,因为它的计算量要小得多。
然后,您将每个问题的组合数相乘,以获得回答所有四个问题的总方式。
我的计算给出:
每个问题120个组合。
120 * 120 * 120 * 120 = 207,360,000组合用于整个测试。
答案 1 :(得分:1)
你有四套“选择3个中的3个”组合。
请拜托,哦,请上帝通过实际产生所有可能的组合来解决这个问题!这就是人类发明数学的原因: - )
一组“10选三”有多个选项等于(如您链接到的维基百科页面所示):
10! / ((10-3)! * 3!)
= 10! / (7! * 3!)
= (10! / 7!) / 3!
= (10 * 9 * 8) / (3 * 2 * 1)
= 720 / 6
= 120
您有四个问题,因此您可以将每个问题中可能的组合数相乘,以获得测试的总组合数。
120 * 120 * 120 * 120
= 207,360,000
......正如Jonathan在上面所示。
答案 2 :(得分:0)
我不确定,但是10个可能的答案,选择4,将提供210种可能性。
然后,匹配问题1和2将给出210 * 210 = 44.100种可能性。 另一方面,匹配问题3和4将给出其他44.100可能性。
匹配1& 2 + 3& 4将 1.944.810.000 possibilites
这是相当多的可能性......
但你对40之间的12的想法会给出一个更大的数字,大约 5.586.853.480 。
通常在组合上进行 brute-fore 并不是一个好主意......
PS:我不确定我的数字的准确性......很久以前研究了