小编典典

二项式系数计算算法

algorithm

我需要一种计算组合而不耗尽内存的方法。这是我到目前为止所拥有的。

public static long combination(long n, long k) // nCk
{
    return (divideFactorials(factorial(n), ((factorial(k) * factorial((n - k))))));
}

public static long factorial(long n)
{
    long result;
    if (n <= 1) return 1;
    result = factorial(n - 1) * n;
    return result;
}

public static long divideFactorials(long numerator, long denominator)
{
    return factorial(Math.Abs((numerator - denominator)));
}

我已将其标记为C#,但理想情况下,解决方案应独立于语言。


阅读 354

收藏
2020-07-28

共1个答案

小编典典

public static long combination(long n, long k)
    {
        double sum=0;
        for(long i=0;i<k;i++)
        {
            sum+=Math.log10(n-i);
            sum-=Math.log10(i+1);
        }
        return (long)Math.pow(10, sum);
    }
2020-07-28