我需要计算在Python combinatorials(NCR),但无法找到的功能做在math,numpy或stat 图书馆.类似于类型函数的东西:
comb = calculate_combinations(n, r)
Run Code Online (Sandbox Code Playgroud)
我需要可能的组合数量,而不是实际的组合,所以itertools.combinations我不感兴趣.
最后,我想避免使用阶乘,因为我将计算组合的数字可能变得太大而且阶乘将变得非常可怕.
这似乎是一个非常容易回答的问题,但是我被淹没在关于生成所有实际组合的问题中,这不是我想要的.:)
非常感谢
干杯,
我知道你可以用下面的公式得到组合的数量(没有重复,顺序并不重要):
// Choose r from n n! / r!(n - r)!
但是,我不知道如何在C++中实现它,因为例如
n = 52 n! = 8,0658175170943878571660636856404e+67
即使是unsigned __int64(或unsigned long long),这个数字也太大了.是否有一些解决方法来实现公式而没有任何第三方"bigint" - 库?
可能重复:
如何计算R中的组合和排列?
当我尝试使用Combinat包和combn命令计算R中的组合时,它给了我所有可能的组合.但我只想返回组合的数量,即我希望在10C2的情况下得到45.我该怎么办?
给出一个矢量:
labels <- c(1,2,3,3,3)
Run Code Online (Sandbox Code Playgroud)
如何获得所有可能的群组重新标记?对于这个例子:
1,2,3,3,3
1,3,2,2,2
2,1,3,3,3
2,3,1,1,1
3,1,2,2,2
3,2,1,1,1
Run Code Online (Sandbox Code Playgroud)
我一直在看permute包,但我不知道如何将它应用于这种情况.
如何编写递归函数来获得R中的组合(n,r)=组合(n-1,r-1)+组合(n-1,r)?我尝试了以下代码,但我只收到一条错误消息:
nCr=function(n, r) {
if (r == 0)
{
if (r == n) {
return (1)
} } else {
return (nCr(n-1, r-1) + nCr(n-1, r))
}
}
Run Code Online (Sandbox Code Playgroud)
谢谢!
combinations ×3
r ×3
algorithm ×1
c++ ×1
permutation ×1
permute ×1
python ×1
recursion ×1
statistics ×1