嵌套组合 - 选项分布在多个问题上

时间:2010-11-25 14:48:34

标签: ruby math combinations

请与我一起露面,因为我甚至不能熟练掌握数学世界。

我正在考虑分析测试。它由四个问题组成,每个问题有十个选项。从每个问题中,必须选择三个选项。那当然总共会产生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回答问题一,二,三和四的场景。

3 个答案:

答案 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:我不确定我的数字的准确性......很久以前研究了