Sie sind auf Seite 1von 2

Universitt Konstanz Fachbereich Informatik & Informationswissenschaft

Diskrete Strukturen SS 2012

PD Dr. Sven Kosub / Mennatallah El-Assady, Volker Mhlberg, Julian Mller, Kevin Sieg, Steen Sievering

6. bungsblatt
Ausgabe: 25.05.2012 Abgabe: 01.06.2012, bis sptestens 12:00 per Mail an den Tutor

Vertiefung: (a) Wie viele injektive Funktionen f : {0, 1} {0, 1}n gibt es? (b) Ersetzen Sie den Faktor B(n, k) in
n k n1 k1

10 Punkte

= B(n, k)

geeignet.

(c) Ersetzen Sie den Faktor F (n, k) in nk = F (n, k) (n 1)k1 geeignet. (d) Bestimmen Sie den Koezienten von x5 y 7 in (x + y)12 . (e) Bestimmen Sie den Koezienten von x4 y 2 z 6 in (x + y + z)12 . (f) Bestimmen Sie (g) Bestimmen Sie
n k=0 m k=0 n 2 k . n nk k mk

(h) Bestimmen Sie das inverse Element von (4, 1, 2, 6, 3, 5) in S6 . (i) Wie viele Permutationen von n Elementen gibt es, in deren Tupeldarstellung stets die 1 vor der 2 kommt? (j) Wie viele Permutationen von n Elementen gibt es, in deren Tupeldarstellung stets die 1 vor der 2 und die 2 vor der 3 kommt? Kreativitt: (a) Fr alle n N+ und k N+ gilt nk = k (n 1)k1 + (n 1)k . (b) Fr alle n, m, k N gilt (n + m)k =
k k i=0 i

10 Punkte

Beweisen Sie durch kombinatorische Argumente folgende Aussagen fr fallende Faktorielle: nki mi .

Bemerkung: Wir setzen nk =def 0, falls k < 0 oder k > n gilt. Transfer: 10 Punkte

Zusammen mit einer Kommilitonin erstellen Sie eine eigene Java-Bibliothek mit mathematischen Studieninhalten. Unabhngig voneinander haben Sie Methoden zur Berechnung von Binomialkoezienten implementiert. Sie haben sich fr eine rekursive Version entschieden: public static long binomialRecursion(int n, int k) { if ((k==0) || (k==n)) return 1; if ((k<0) || (k>n)) return 0; return binomialRecursion(n-1,k-1)+binomialRecursion(n-1,k); }

Ihre Kommilitonin ist dagegen iterativ vorgegangen: public static long binomialIteration(int n, int k) { if (k<0 || n<k) return 0; long[][] h=new long[n+1][n+1]; for (int i=0; i<=n; i++) h[i][0]=h[i][i]=1; for (int i=1; i<=n; i++) for (int j=0; j<=i; j++) h[i][j] = (j==0 ? 0 : h[i-1][j-1]) + (i==j ? 0 : h[i-1][j]); return h[n][k]; } Um Ihre Bibliothek klein zu halten, diskutieren Sie darber, welche Implementation Sie behalten und gegebenenfalls verbessern wollen. Dazu versuchen Sie folgende Fragen zu beantworten: (a) Wie gro ist
64 32

(b) Fr welche k (in Abhngigkeit von n) knnen Sie mittels Induktion ber n zeigen, dass fr die Anzahl C(n, k) rekursiver Aufrufe von binomialRecursion auf Eingabe (n, k) n C(n, k) 2 gilt? Hinweis: Gehen Sie dabei von folgender Rekursionsgleichung fr C(n, k) aus: C(n, k) = C(n 1, k 1) + C(n 1, k) + 2 falls 0 < k < n 0 sonst

(c) Wie viele Binomialkoezienten werden durch die Methode binomialIteration bestimmt und in dem Array h gespeichert, um den Wert n auszugeben? k (d) Wie msste die Methode binomialRecursion abgendert werden, sodass rekursiv nur Eingaben (n, k) mit 2k n aufgerufen werden? (e) Wie msste die Methode binomialIteration abgendert werden, sodass nur jene Binomialkoezienten bestimmt (und in h gespeichert) werden, die tatschlich zur Bestimmung von n ntig sind? Hinweis: Beachten Sie auch die Symmetrieeigenschaft des k Binomialkoezienten wie in Teilaufgabe (d).