0

我正在尝试进行反向二项式系数计算,其中我得到一组 (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)}

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

4

0 回答 0