如何识别给定输入中的二项式系数(n选择r)

时间:2015-02-08 13:04:41

标签: algorithm number-theory binomial-coefficients

我正在尝试进行反向二项式系数计算,其中得到一组(n,r)的随机组合,然后我必须能够确定任何n-Choose-r(n,r)集或子集。对于例如如果用户输入以下集:{(1,2,3)(1,2,4)(1,3,4)(2,3,4)},则程序必须检测nCr(3,4)。

为此,首先我获得

all_combinations = nCr(subset_length,input_set_length) 

在这种情况下是nCr(3,4)= 4。

然后,我以[element:frequency]的形式计算每个元素的频率如下。

fs = [1:3], [2:3], [3:3], [4:3]

最后,

if (length(fs) != all_combinations ) return;
foreach(element in fs)
   if( count(fs.elements) != subset_length ) return;
print 'found nCr:' + subset_length + ',' + input_set_length  

所有元素的频率等于子集长度,我认为它是一个完整的组合集。

然而,它似乎无法检测复杂病例。例如,考虑以下情况:

{(1,2,3) (1,2,4) (1,3,4)}

不难看出固定元素为1,子集中有nCr(3,2)的组合

{(2,3) (2,4) (3,4)}

我认为应该有更好的方法来递归检测二项式系数。任何帮助都非常感谢。

0 个答案:

没有答案