Algorithmus für die Berechnung der Binomial-Koeffizienten

Brauche ich eine Möglichkeit, die Berechnung der Kombinationen ohne running out of memory. Hier ist, was ich habe, so weit.

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)));
}

Habe ich es markiert wie C#, aber die Lösung sollte idealerweise-unabhängigen Sprache.

  • Diese zahlen werden als "Binomialkoeffizienten" und als ein sehr häufiges Objekt, die erschienen sind, bevor Sie in SO: stackoverflow.com/q/4256188/422353
  • Welche Kombination genau versuchst du? Ist es einfach nCk, oder ist es etwas anderes? Ich bin nur gefragt, weil dein Kommentar am Anfang sagt "nCk" aber Ihr code nicht direkt berechnen.
  • Ja, fügen Sie diese Zeile zu factorial(): if (n > 20) throw new OverflowException();
  • Es ist einfach nCk.
InformationsquelleAutor Nyx | 2012-10-19
Schreibe einen Kommentar