Der Binomialkoeffizient

7. Februar 2010

So, jetzt hab ich mich in meiner Freizeit noch ein wenig mit dem Programmieren beschäftigt. Dieses mal kam der Binomialkoeffizient dran. Wer das nicht kennt: Man sollte wissen, was binomische Formeln sind. Sowas wie z.B.

(a + b)^2 = a^2 + 2*a*b + b^2

Jetzt gibt es vor jeder Variablenkombination (a^2, a * b, b^2) Faktoren. Diese werden durch den Binomialkoeffizienten bestimmt. Die Formel lautet:

(n | k) = (n!) / ((n-k)! * k!).

Der Binomialkoeffizient wird in der Mathematik so geschrieben: http://de.wikipedia.org/wiki/Binomialkoeffizient, doch ich kann das hier auf diese Weise schlecht so schreiben, deshalb eine kleine – leider falsche – Variante. Das Ausrufezeichen bedeutet Fakultät. Fakultät hat folgende Definition: n! = 1 * 2 * 3 * … * n. Doch wie benutzt man die Binomische Formel und den Binomialkoeffizienten?

Das ist ganz einfach. Angenommen, wir haben eine Formel:

(a + b)^n

Dann ist das n in der Binomischen Formel wie das n in dem Binomialkoeffizienten. Das k ist dann ein Wert von 1 bis n. Nun, die Formal sieht dann so aus:

(a + b)^n = (n | 1) * a^n + (n | 2) * a^n-1 * b + … + (n | n) * b^n

Falls das doch für den einen oder anderen etwas unverständlich war (was ich jedoch nicht hoffe): http://de.wikipedia.org/wiki/Binomische_Formel.

Doch nun wollen wir zum Quelltext kommen. Ich habe mir eine kleine Hilfe genommen. Wenn es ans Rechnen mit Fakultät geht, kommen sehr schnell sehr große Zahlen heraus. Deshalb hab ich die BigInteger-Klasse bei Codeproject zur Hilfe genommen. Hier meine kleine Funktion zum Berechnen der Fakultät:

//berechnet die fakultät von einer zahl n
public static BigInteger fak(uint n)
{
BigInteger erg = new BigInteger(”1″, 10);

for (uint j = 1; j <= n; j++)
{
erg *= new BigInteger(j.ToString(), 10);
}

return erg;
}

Und dann noch die Funktion für den Binomialkoeffizienten:

//berechnet den binomialkoeffizienten
public static BigInteger binomialkoeffizient(uint n, uint k)
{
BigInteger erg = new BigInteger(”0″, 10);

//anwenden der formel (n! / (n-k)!k!)
erg = fak(n) / (fak(n – k) * fak(k));

return erg;
}

Nun kann man ohne große Probleme die Fakultät und den Binomialkoeffizienten berechnen :) .

Kommentar schreiben