Du befindest dich hier: FSI Informatik » Prüfungsfragen und Altklausuren » Prüfungen im Bachelor-Studium (1. - 5. Semester) » aud » Forendiskussionen   (Übersicht)

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.

Link zu der Vergleichsansicht

Beide Seiten, vorherige ÜberarbeitungVorherige Überarbeitung
Nächste Überarbeitung
Vorherige Überarbeitung
pruefungen:bachelor:aud:loesung-miniklausur-15 [29.03.2016 09:40] – Layout & DP korrigiert Marcel[Inf]pruefungen:bachelor:aud:loesung-miniklausur-15 [01.04.2019 10:27] (aktuell) SpeedyGonzalez
Zeile 48: Zeile 48:
 private long pLR(int n, long[] ps) { private long pLR(int n, long[] ps) {
  ps[1] = 2;  ps[1] = 2;
- if (ps[n== 0) {+ if (n >2) {
  ps[n] = pLR(n - 1, ps);  ps[n] = pLR(n - 1, ps);
  int i = 0;  int i = 0;
Zeile 62: Zeile 62:
 ==== Aufgabe 5 - Streuspeicherung ==== ==== Aufgabe 5 - Streuspeicherung ====
 Diese Aufgabe entspricht 1:1 [[https://fsi.cs.fau.de/dw/pruefungen/bachelor/aud/loesungws14#aufgabe_4_-_streuspeicherung_18|Aufgabe 4 aus der Klausur WS14/15]]. Diese Aufgabe entspricht 1:1 [[https://fsi.cs.fau.de/dw/pruefungen/bachelor/aud/loesungws14#aufgabe_4_-_streuspeicherung_18|Aufgabe 4 aus der Klausur WS14/15]].
 +
 +Nein, nicht ganz. Hier muss im Gegensatz zur großen Klausur nicht das alte Objekt zurückgegeben werden, falls man auf dieses an der zu besetzenden Stelle trifft. Das erkennt man auch daran, dass in der Miniklausur der return-type "void" verwendet wurde.
 +
 +<code>
 +class HashSet<K>  {
 +    K[][] map;
 +    int s, b, c;
 + 
 +    HashSet(int s, int b, int c) {
 +        assert 0 < c && c < s;
 +        this.s = s; //size of map
 +        this.b = b; //bucket size
 +        this.c = c; //collision increment
 +        map = (K[][]) new Object[s][b];
 +    }
 + 
 +    K put(K k, int hk) {
 +        assert k != null && 0 <= hk && hk < s;
 +        int pos = hk; //current position during exploration
 +        do { 
 +            for(int i = 0; i < b; i++) { //Für jede Stelle b des Buckets
 +                if(map[pos][i] == null) {
 +                    map[pos|[i] = k;
 +                    return;
 +            }
 +            pos += c;
 +            pos %= s; //hiermit wird sichergestellt, dass pos nicht Groesser als s wird und in diesem Fall wieder von vorne beginnt, aber Schrittlänge c beibehaelt
 +        } while (pos != hk); //pos wird im do-Block geaendert, wenn es also wieder gleich hk werden wuerde, liegt ein Zyklus vor
 + 
 +        throw new IllegalArgumentException();
 +    }
 +}
 +</code>