Klausur 11.08.2011

Aufgabe 4

Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.

Klausur 11.08.2011
Hey, kann mir irgendjemand vielleicht bei der Aufgabe 4 (dynamische Programmierung) der Klausur vom 11.08.11 helfen?

Hier mal meine bisherigen Ansätze
Aufgabe 4a):

static boolean isPrimeDP(long p, long primes){

	for(int i = 0; i < primes.length; i++){
		if(primes[i] != 0 && p != primes[i]){
			if((p % primes[i] == 0){
				return false;
			}
		}else{
			return true;
		}
}

…und Aufgabe 4b (ich weiß, dass das so noch nicht passt, aber hab auch keine Ahnung wies richtig geht…):

static long getPrimeDP(int n){
	long[] primes = new long[n+1];
	primes[0] = 2;
	return getPrimeDPHelper(n, primes);
}

static long getPrimeDPHelper(int n, long primes){
	if(n == 0){
		return ;    //????
	}else{
		return getPrimeDPHelper(n-1, primes); //????
	}
}
	

und eigentlich müsste ich ja in der 4b) auch iwie isPrimeDP() verwenden, aber ich komm nicht drauf wann/wo und wie :smiley:

Wär super wenn sich jemand erbarmen würde!
Danke schonmal :slight_smile:


Siehe 8-59


Hier nochmal für die Ewigkeit (wird im Prüfungswiki verlinkt):

static long getPrimeDPHelper(int n, long primes[]) {
  if (primes[n] == 0) { // check if already stored
    primes[n] = getPrimeDPHelper(n-1, primes); // compute & store
    do {
      primes[n]++;
    } while (!isPrimeDP(primes[n], primes)); // check with DP
  }
  return primes[n]; // return stored value
}

Hallo, bei der Methode, welche die Halde wieder herstellen soll:

Ist die Zeile

wirklich richtig? left.data==smallest.
Es muss ja nicht unbedingt left.data sein, es kann ja auch left.left.data oder left.left.left.data oder so sein, dachte ich.

Hier gehhts zur Angabe, Aufgabe 2d):

https://www2.informatik.uni-erlangen.de/teaching/WS2011/AuD/organisation/oldexams/secure/11-08-11_klausur.pdf

NACHTRAG: Sehe gerade dass im Betreff Aufgabe 4 steht, geht aber um Aufgabe 2, war vielleicht doch nicht so gut dass ich die alte Diskussion raus gekramt hab =)


Das handelst Du mit dem rekursiven Aufruf ab.
Du tauscht den Wert “eins nach unten” und rufst darauf dann die Methode wieder auf.


Ach so. Entscheidend ist wohl nur dass smallest nach oben kommt. wo das jetzige nach unten rutscht ist wohl nicht so wichtig. Stimmt so war das ja bei der Halde=)
Okay, ich denke ich habs verstanden. Danke.


Nein, kann es nicht. Laut Aufgabenstellung liefert [m]getSmallest()[/m] den kleinsten Wert aus [m]data[/m], [m]left.data[/m] und [m]right.data[/m].
Es gibt also nur die drei Fälle der aktuelle Knoten ist der kleinste, das linke Kind ist der kleinste oder das rechte Kind ist der kleinste. Alle drei Fälle werden im Lösungsvorschlag abgedeckt.

Du scheinst übrigens die falsche Klausur verlinkt zu haben.


FAIL. Ist korrigiert =)

Die KLausurlinks sind aber allgemein irgendwie nicht richtig.
https://www2.cs.fau.de/teaching/WS2013/AuD/organisation/oldexams/secure/13-08-01_klausur.pdf
Der hier führt zum Beispiel zum Sommersemester 2013, obwohl im Link WS2013 drin steht. Oder habe ich es einfach nur nicht richtig verstanden ?


Letzteres. Es gibt für jedes Semester eine eigene AuD-Seite, die Inhalte sind allerdings größtenteils identisch. So krieg man z.B. auf der Seite zum WS2009 auch die aktuellen Folien …