Hallo,
Ich hab ne Aufgabe über dynamische Programmierung von Binomialkoeffizienten.
Man muss zuerst ein Attribut “long[][] PascalTriangel” deklarieren, in dem das Zwischenergebnis am Index [n][k] gespeichert wird. Danach werden zwei Klassenkonstante UNBEKANNT= -1, und MAX_N =60 definiert.
Man soll im Konstruktor für die Tabelle passend Speicher reservieren, damit die Werte (n,k) für 0<= n<= MAX_N und 0<=k<= n ablegen kann.
Im Konstruktor soll die Tabelle mit UNBEKANNT bzw. mit 1 initialisiert werden, falls dies der Wert des Binominalkoeffizienten wäre.
(Später soll in einer Methode Binominalkoeffizient
Nur dann (rekursiv) berechnet werden, wenn es vorher noch nie berechnet wurde (also Unknown in der Tabelle steht) oder außerhalb des gespeicherten Bereichs liegt. )
Ich hab den Konstruktor implementiert aber ich weiß nich wo das Ergebnis UNBEKANNT ist.
Die zweite Frage ist soll ich anstatt While Schleife ne if-Bedingung schreiben?!
Ich hab ne Aufgabe über dynamische Programmierung von Binomialkoeffizienten.
Man muss zuerst ein Attribut “long[][] PascalTriangel” deklarieren, in dem das Zwischenergebnis am Index [n][k] gespeichert wird. Danach werden zwei Klassenkonstante UNBEKANNT= -1, und MAX_N =60 definiert.
Man soll im Konstruktor für die Tabelle passend Speicher reservieren, damit die Werte (n,k) für 0<= n<= MAX_N und 0<=k<= n ablegen kann.
Im Konstruktor soll die Tabelle mit UNBEKANNT bzw. mit 1 initialisiert werden, falls dies der Wert des Binominalkoeffizienten wäre.
(Später soll in einer Methode Binominalkoeffizient
Nur dann (rekursiv) berechnet werden, wenn es vorher noch nie berechnet wurde (also Unknown in der Tabelle steht) oder außerhalb des gespeicherten Bereichs liegt. )
Ich hab den Konstruktor implementiert aber ich weiß nich wo das Ergebnis UNBEKANNT ist.
Die zweite Frage ist soll ich anstatt While Schleife ne if-Bedingung schreiben?!
Java:
public static final int UNBEKANNT = -1;
public static final int MAX_N = 60;
private long[][] pascalTriangle;
public Binomial(int k, int n) {
pascalTriangle = new long[n][k];
while (n <= 0 && n >= MAX_N && k >= 0 && k <= n) {
for (int i = 0; i < pascalTriangle.length; i++) {
pascalTriangle[i] = new long[i + 1];
pascalTriangle[i][0] = 1;
for (int j = 0; j <= pascalTriangle.length; j++) {
pascalTriangle[i][j] = (pascalTriangle[i - 1][j - 1]) +
(pascalTriangle[i - 1][j]);
}
pascalTriangle [i][i] = 1;
}
}
}