我正在尝试进行反向二项式系数计算,其中得到一组(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)}
我认为应该有更好的方法来递归检测二项式系数。任何帮助都非常感谢。