1. Aufgabe (6 Punkte): Java-Programmierung (Arrays)

Ähnliche Dokumente
Muster. Informatik 3 (Februar 2004) Name: Matrikelnummer: Betrachten Sie den folgenden Suchbaum. A G H J K M N

Humboldt-Universität zu Berlin Berlin, den Institut für Informatik

Übung Informatik I - Programmierung - Blatt 8

Name: Seite 2. Beantworten Sie die Fragen in den Aufgaben 1 und 2 mit einer kurzen, prägnanten Antwort.

Übung Algorithmen und Datenstrukturen

Algorithmen und Datenstrukturen

Stud.-Nummer: Datenstrukturen & Algorithmen Seite 1

Informatik II Prüfungsvorbereitungskurs

Informatik B Sommersemester Musterlösung zur Klausur vom

Algorithmen & Datenstrukturen 1. Klausur

Suchbäume. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

! 1. Rekursive Algorithmen.! 2. Rekursive (dynamische) Datenstrukturen. II.3.2 Rekursive Datenstrukturen - 1 -

Wiederholung. Bäume sind zyklenfrei. Rekursive Definition: Baum = Wurzelknoten + disjunkte Menge von Kindbäumen.

Datenstrukturen Teil 2. Bäume. Definition. Definition. Definition. Bäume sind verallgemeinerte Listen. Sie sind weiter spezielle Graphen

Informatik II: Algorithmen & Datenstrukturen. Blättern Sie nicht um bevor Sie dazu aufgefordert werden!

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12 1. Kapitel 11. Listen. Listen

Übungsblatt Programmierung und Software-Entwicklung Generizität, Interfaces, Listen, Sortieralgorithmen & JUnit

Technische Universität Braunschweig Institut für Programmierung und Reaktive Systeme

13. Bäume: effektives Suchen und Sortieren

13. Hashing. AVL-Bäume: Frage: Suche, Minimum, Maximum, Nachfolger in O(log n) Einfügen, Löschen in O(log n)

Klausur Grundlagen der Informatik 9. April 2015

Informatik II, SS 2014

In C und Java müssen Variablen und Methodenergebnisse durch Typangaben erläutert werden. Welche der folgenden Aussagen sind korrekt und welche nicht:

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 16/17. Kapitel 13. Listen. Listen 1

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 15/16. Kapitel 12. Listen. Listen 1

Algorithmen & Datenstrukturen Midterm Test 2

Vorlesung Informatik 2 Algorithmen und Datenstrukturen

Name: Seite 2. Beantworten Sie die Fragen in den Aufgaben 1 und 2 mit einer kurzen, prägnanten Antwort.

Datenstrukturen und Algorithmen D-INFK

Punkte. Teil 1. Teil 2. Summe. 1. Zeigen Sie, dass der untenstehende Suchbaum die AVL-Bedingung verletzt und überführen Sie ihn in einen AVL-Baum.

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 16/17. Kapitel 14. Bäume. Bäume 1

Lösungsvorschläge. zu den Aufgaben im Kapitel 4

Informatik II Prüfungsvorbereitungskurs

Tutoraufgabe 1 (2 3 4 Bäume):

Tutoraufgabe 1 (Starke Zusammenhangskomponenten):

MB2-ALG, SS15 Seite 1 Hauptklausur, geschrieben am

Musterlösung Stand: 5. Februar 2009

ALP II Dynamische Datenmengen Datenabstraktion

Vorlesung Datenstrukturen

Bäume, Suchbäume und Hash-Tabellen

Vorlesung Informatik 2 Algorithmen und Datenstrukturen

Suchen und Sortieren

Abgabe: (vor 12 Uhr)

Klausur "ADP" SS 2015

Muster. Muster. B E I S P I E L K L A U S U R Informatik B Juli Teil I: Informatik 3 ACHTUNG. Schritt Queue 1 B

II. Grundlagen der Programmierung. Beispiel: Merge Sort. Beispiel: Merge Sort (Forts. ) Beispiel: Merge Sort (Forts. )

Es sei a 2 und b 2a 1. Definition Ein (a, b)-baum ist ein Baum mit folgenden Eigenschaften:

Klausur "ADP" SS 2016

Informatik II, SS 2014

Tutoraufgabe 1 (Listen):

Klausur Algorithmen und Datenstrukturen SS August Arbeitszeit 90 min

Was ist ein assoziativer Speicher?

Informatik 11 Kapitel 2 - Rekursive Datenstrukturen

ContainerDatenstrukturen. Große Übung 4

Sommersemester Jewgeni Rose. Technische Universität Braunschweig

Manipulation von Mengen

Felder. M. Jakob. 28. April Gymnasium Pegnitz

3. Übungsblatt zu Algorithmen I im SoSe 2017

Reihungen. Martin Wirsing. in Zusammenarbeit mit Matthias Hölzl und Nora Koch 11/03

Übung Algorithmen und Datenstrukturen

NAME, VORNAME: Studiennummer: Matrikel:

Algorithmen und Datenstrukturen 1 VL Übungstest SS Juni 2011

Suchen. lineare Suche, binäre Suche, divide and conquer, rekursive und iterative Algorithmen, geordnete Daten, Comparable

12. Hashing. Hashing einfache Methode um Wörtebücher zu implementieren, d.h. Hashing unterstützt die Operationen Search, Insert, Delete.

Tutoraufgabe 1 (2 3 4 Bäume):

Praxis der Programmierung

Informatik II Vorlesung am D-BAUG der ETH Zürich

Grundlagen: Algorithmen und Datenstrukturen

Klausur Software-Entwicklung März 01

6. Verkettete Strukturen: Listen

Kapiteltests zum Leitprogramm Binäre Suchbäume

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12. Kapitel 13. Bäume. Bäume

Algorithmen I. Tutorium 1-3. Sitzung. Dennis Felsing

ALP II Dynamische Datenmengen Datenabstraktion (Teil 2)

Übung 4: Die generische Klasse AvlBaum in Java 1

Klausur zur Vorlesung Algorithmen und Datenstrukturen

Praktikum zu Einführung in die Informatik für LogWiIngs und WiMas Wintersemester 2017/18. Vorbereitende Aufgaben

Schwerpunkte. Verkettete Listen. Verkettete Listen: 7. Verkettete Strukturen: Listen. Überblick und Grundprinzip. Vergleich: Arrays verkettete Listen

Datenstrukturen und Algorithmen D-INFK

f 1 (n) = log(n) + n 2 n 5 f 2 (n) = n 3 + n 2 f 3 (n) = log(n 2 ) f 4 (n) = n n f 5 (n) = (log(n)) 2

Selbststudium OOP7 & ALG2 Auftrag

1. Typen und Literale (6 Punkte) 2. Zuweisungen (6 = Punkte)

Geordnete Binärbäume

Übung Algorithmen und Datenstrukturen

Kapitel 10. Komplexität von Algorithmen und Sortieralgorithmen

Sortieren und Suchen. Jens Wächtler Hallo Welt! -Seminar LS 2

Institut für Programmierung und Reaktive Systeme. Java 6. Markus Reschke

Bäume. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 10: Collections 4. Inhalt. Bäume. Einführung. Bäume.

Transkript:

Der folgende Mitschrieb wurde von Prof. Alexa am 16.07.2008 als Probeklausur in der MPGI2 Vorlesung gezeigt und wurde auf http://www.basicinside.de/2008/node/94 veröffentlicht. Die Abschrift ist unter der GNU Free Documentation License 1.2 veröffentlicht. 1. Aufgabe (6 Punkte): Java-Programmierung (Arrays) In einer Jugendherberge gibt es Zimmer für Übernachtungen. Auf jedem Zimmer steht eine bestimme Anzahl von Betten für die Gäste zur Verfügung. public class Gaestezimmer { public int betten; public int gaeste; Das Attribut betten gibt an, wie viele Betten in dem Zimmer vorhanden sind. Das Attribut gaeste gibt an, wie viele der Betten zur Zeit von Gästen belegt sind. Die Jugendherberge hat mehrere Etagen, auf jeder Etage gibt es mehrere Zimmer. Die Zimmer sind nach Etage und Nummer in einem 2-dimensionalen Array erfasst. (1. Dimension: Etage, 2. Dimension: Nummer). Gehen Sie davon aus, dass alle Felder im Array mit Zimmern initialisiert wurden (d.h. sie sind nicht mit null belegt). Erweitern Sie in den folgenden Aufgaben die Klasse Jugendherberge. public class Jugendherberge { public Gaestezimmer [][] zimmer; //... Ihre Methoden 1.1. Zimmer mit freien Betten (3 Punkte) Implementieren Sie die Methode suchezimmer, die ein Gästezimmer der Jugendherberge zurückliefert, in dem es noch mindestens eine bestimmte Anzahl von freien Betten gibt. Die Mindest-Anzahl freier Betten soll als Parameter übergeben werden. Wählen Sie einen geeigneten Rückgabewert für den Fall, dass kein Zimmer diese Bedingung erfüllt. public Gaestezimmer suchezimmer(int freiebetten) { for(int etage = 0; etage < zimmer.length; etage++) { for(int raum = 0; zimmer[etage].length; raum++) { Gaestezimmer g = zimmer[etage][raum]; if ((g.betten - g.gaeste) >= freiebetten) return g; return null;

1.2 Freie Betten auf einer Etage (3 Punkte) Implementieren Sie die Methode freiebettenaufetage, welche die Anzahl nicht belegter Betten auf einer bestimmten Etage zurückgibt. Die Nummer der Etage wird als Parameter übergeben. Falls die Etage nicht existiert, soll die Methode 0 als Ergebnis liefern. public int freiebettenaufetage(int etage) { int frei = 0; if ((etage >= 0) && (etage < zimmer.length)) for(int raum = 0; raum < zimmer[etage].length; raum++) frei += (zimmer[etage][raum].betten - zimmer[etage][raum].gaeste); return frei;

2. Aufgabe (ohne weitere Angaben) 2.2 Sortieralgorithmen (3 Punkte) Gegeben sind die Implementationen von den Sortieralgorithmen A und B durch die gleichgenannten Methoden. public static void A (lang [] a) { for(int i = 1; i < a.length; i++) { helpa(a, i); public static void helpa (long [] a, int h) { for(int i = h; i>=1; i--) { if (a[i-1] <= a[i]) break; swap(a, i-1, i); public static void B (long [] a) { for(int i = 0; i < a.length;i++) { int j = helpb(a,i); swap(a,i,j); public static void helpb(long [] a, int h) { int result = h; for(int i = h+i); i < a.length; i++) if (a[i] < [a.result]) result = i; return result; Beide Implementationen benutzen die Hilfsmethode static void swap(long [] a, int i, int j), die die Zahlen an Position i und j im Array a vertauscht. Algorithmen in-situ stabil Name des Verfahrens (ja/nein) (ja/nein) A ja ja InsertionSort B ja ja SelectionSort

3. Aufgabe (ohne weitere Angaben) 4. Aufgabe (ohne weitere Angaben) 5. Aufgabe (2 Punkte) 5.1 Hashtabellen (2 Punkte) Fügen Sie die drei Schlüssel 10, 15, 21 in der angegeben Reihenfolge in eine anfangs leere Hashtabelle ein. Die Tabelle hat 5 Speicherplätze. Die folgende Hashfunktion h und Sondierungsfunktion g sind zu verwenden. h(k) = k mod 5 g(k,j) = (j + 3) mod 5 Hierbei ist k der einzufügende Schlüssel und j der zuletzt getestete Speicherplatz. Geben Sie für jeden Schlüssel an, welche Positionen getestet werden, wo Kollisionen auftreten und wo der Schlüssel letztendlich gespeichert wird. [-,-,-,-,-] h(10)=0 [10,-,-,-,-] h(15)=0 k(15,0)=(0+3) mod 5=3 [10,-,-,15,-] h(21)=1 [10,21,-,15,-] keine Kollision Kollision keine Kollision keine Kollision

6. Aufgabe (9 Punkte): Java-Programmierung (Listen) Im Rahmen dieser Aufgabe soll mit einer einfachen Liste gearbeitet werden. Gegeben sind die Klassen Rechteck und ListElement public class Rechteck { private double a; private double b; public Rechteck(double a, double b) { this.a = a; this b = b; public class ListElement { private Rechteck rechteck; private ListElement naechstes; public ListElement(Rechteck rechteck, ListElement naechstes) { this.rechteck = rechteck; this.naechstes = naechstes; public void setrechteck(rechteck rechteck) { this.rechteck = rechteck; public Rechteck getrechteck() { return this.rechteck; public ListElement getnaechstes() { return this.naechstes; public void setnaechstes(listelement naechstes) { this.naechstes = naechstes;

6.1 Listenklasse (2 Punkte) Implementieren Sie zunächst eine Klasse RechteckListe. Die Klasse repräsentiert eine einfach verkettete Liste mit Objekten der Klasse ListElement und soll die Attribute Listenanfang und Länge der Liste beinhalten. Achten Sie darauf, Kapselung zu verwirklichen. Ergänzen Sie eine get-methode, für den Zugriff auf die Listenlänge und eine Methode loeschen, die alle Elemente aus der Liste entfernt. public class RechteckListe { private ListElement first; private int length; public int getlength() { return length; public void loeschen() { length = 0; first = null; 6.2 Gefilterte Liste (3 Punkte) Ergänzen Sie in der Klasse RechteckListe eine Methode filter, die aus der Rechteckliste alle Rechtecke entfernt, deren Fläche kleiner ist als der übergebene Wert minflaeche. Hinweis: Für die Lösung dieser Aufgabe stehen Ihnen keine weiteren als die Methoden aus der vorgegebenen Klasse ListElement zur Verfügung. public void filter (double minflaeche) { ListElement current = first; ListElement previous = current; while(current!= null) { if ((current.getrechteck().a * current.getrechteck().b) >= minflaeche) { previous = current; else { if (current == first) first = current.getnaechstes(); else previous.setnaechstes(current.getnaechstes()); length--; current = current.getnaechstes();

7.Aufgabe (8 Punkte): Suchbäume 7.1 Einfügen in Suchbäume Fügen Sie in einen binären, geordneten Baum (Suchbaum) mit Werten nur in den Blättern die folgenden Werte in gegebener Reihenfolge ein: 15,22,44,43,42 Der Baum ist vor dem Einfügen des Wertes 15 leer. Beim Erzeugen innerer Knoten solll gelten: Der Schlüssel gibt den größten Wert des linken Teilbaums an. Geben Sie den Baum nach jedem eingefügten Wert an. Einfügen der 15: [15] Einfügen der 22: (15) [15] [22] Einfügen der 44: (15) [15] (22) [22] [44] Einfügen der 43: (15) [15] (22) [22] (43) [43] [44] Einfügen der 42: (15) [15] (22) [22] (43) (42) [44] [42] [43] 7.2 (ohne weitere Angaben)

7.3 Binäre Suchlisten - Aufbau (2 Punkte) Gegeben ist die folgende Struktur eines binären, geordneten Baums (Suchbaum). Die Werte sind ganze Zahlen und befinden sich nur in den Blättern. In welcher Reihenfolge müssen die vier Elemente 1, 2, 3 und 4 in einen leeren Baum eingefügt werden, um diese Struktur zu ergeben? Geben Sie alle geeigneten Einfügereihenfolgen an. Es gilt dieselbe Anforderung beim einfügen wie in Teilaufgabe 1: Der Wert eines inneren Knotens gibt den größten Wert im linken Teilbaum an. ( ) ( ) ( ) [ ] [ ][ ] [ ] Mögliche Reihenfolgen (unvollständig!): 2,3,4,1 2,3,1,4 2,4,1,3 2,4,3,1 etc...

8. Aufgabe (7 Punkte): Graphen 8.1 Dijkstra Algorithmus (3 Punkte) Bestimmen Sie mit Hilfe des Dijkstra-Algorithmus die kürzesten Wege vom Startknoten A zu allen anderen Knoten. Verwenden Sie dazu die folgende Tabelle, in der Sie Felder, in denen Relaxation stattfindet, umkreisen und Felder, die die endgültigen Knoten angeben, unterstreichen. Hinweis: Die gleichen Kosten sei die Knotenordnung so, dass kleinere Buchstaben jeweils vor größeren kommen (alphabetische Ordnung), d.h. z.b. wenn B und C beide die Kosten 5 haben, dann wählen Sie B. Iteration A B C D E F G X 0 0 inf inf inf inf inf inf inf 1 0 (5) (1) inf (4) inf inf inf 2-5 1 (4) 4 inf inf inf 3 5-4 4 inf (6) inf 4 5-4 (6) 6 inf 5 5-6 6 (10) 6-6 6 (8) 7-6 (7) 8-7 -

8.2 Topologische Sortierung (2 Punkte) Geben Sie eine topologische Sortierung der Knoten des folgenden Graphen an. A, G, E, F, B, C, D 8.3 Eindeutigkeit (1 Punkt) Ist die topologische Sortierung des Graphen aus der letzten Unteraufgabe (8.2) eindeutig? Begründen Sie ihre Antwort. Nein, denn A, E, F, B, C, D, G ist auch eine Lösung 8.4 Topologische Sortierbarkeit (1 Punkt) Unter welcher Bedingung ist eine topologische Sortierung nicht möglich? Wenn der Graph nicht kreisfrei ist, ist die topologische Sortierung nicht möglich.