Aufgabenblatt 2 Suchen und Sortieren. Aufgabe 1: Vergleiche und Sortieren in Java

Ähnliche Dokumente
Aufgabenblatt Eigenschaften von Algorithmen. Aufgabe 1: Algorithmische Korrektheit

QuickSort ist ein Sortieralgorithmus, der auf der Idee des Teile & Beherrsche beruht, und das gegebene Array an Ort und Stelle (in place) sortiert

Algorithmen und Datenstrukturen II

Klausur "ADP" SS 2015

Algorithmen und Datenstrukturen 12

Institut für Programmierung und Reaktive Systeme 26. April Programmieren II. 10. Übungsblatt

Heute. Nachbetrachtung Wissensüberprüfung. Sortieren Interface Comparable TreeSet Sortieren von Arrays: Arrays.sort() 3.12.

Tutoraufgabe 1 (Hoare-Kalkül):

Institut für Informatik

Übung zur Vorlesung Programmierung

1 Bizz Buzz Woof (ca =18 Punkte) def read file(file_in): fp = open(file_in, r ) l = fp.read() fp.close() return l

Tutoraufgabe 1 (Listen):

Institut für Programmierung und Reaktive Systeme 8. Mai Programmieren II. 10. Übungsblatt

4. Sortieren 4.1 Vorbemerkungen

DAP2 Praktikum Blatt 2

Klausur Grundlagen der Programmierung

Vom Leichtesten zum Schwersten Sortieralgorithmen

Die Schnittstelle Comparable

Aufgabenblatt: Arrays

Praktikum Algorithmische Anwendungen WS 2006/07 Sortieren in linearer Laufzeit

Übungsblatt 7. Thema: Sortieren, Objektorientierung

Aufgabenblatt 5. Kompetenzstufe 1. Allgemeine Informationen zum Aufgabenblatt:

Programmieren in Java

Grundlagen der Programmierung

JAVA - Suchen - Sortieren

Übung: Algorithmen und Datenstrukturen SS 2007

Informatik II Übung 2

Aufgabenblatt 4 Entwurf von Algorithmen

EPROG 2.Teilprüfung. Aufgabe 1:

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

Objektorientierte Programmierung. Kapitel 22: Aufzählungstypen (Enumeration Types)

Übung Datenstrukturen. Sortieren

Fachgebiet Informationssysteme Prof. Dr.-Ing. N. Fuhr. Programmierung Prof. Dr.-Ing. Nobert Fuhr. Übungsblatt Nr. 10

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

Aufgabe 1 ZUFÄLLIGES ENGLISCH. »Programmieren«, WS 2006/2007. Nino Simunic M.A.

Klausur "C#" WS 2012/2013

Sommersemester Jewgeni Rose. Technische Universität Braunschweig

Institut für Programmierung und Reaktive Systeme 5. Dezember Programmieren I. 5. Übungsblatt

Klausur Algorithmen und Datenstrukturen SS August Arbeitszeit 90 min

Einführung in die Programmierung und Programmiersprachen (OOP)

Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung

Übung Algorithmen I

Institut für Informatik

Aufgabenblatt Nr. 5 Generizität und TicTacToe

Programmieren, Wintersemester 13/14 Übungsleiter: Sebastian Ebers Aufgabenblatt 3

Parallele und funktionale Programmierung Wintersemester 2016/ Übung Abgabe bis , 16:00 Uhr

Polymorphie/Späte Bindung Abstrakte Klassen Interfaces. Polymorphie/Späte Bindung Abstrakte Klassen Interfaces

Institut für Informatik

Einführung in die Informatik 1

Sortierverfahren 1. Bubble Sort Selection Sort Insertion Sort

Aufgabe 3: Erste Versuche im Indexieren des Templates. Ulf Leser Wissensmanagement in der Bioinformatik

Institut für Programmierung und Reaktive Systeme 31. Mai Programmieren II. 12. Übungsblatt

Übung Algorithmen und Datenstrukturen

Einführung in die Programmierung I. 6. Sortieren. Stefan Zimmer

Einführung in die Informatik 1

Name: Matrikelnr : Aufgabe 1: (ca. 8 Punkte )

Kapitel 2. Weitere Beispiele Effizienter Algorithmen

Allgemeine Hinweise. Einführung von Checkstyle

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

Grundlagen der Programmierung 2. Sortierverfahren

Praktikum Information Retrieval Wochen 12: Suchmaschine

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

Einführung in die Programmierung WS 2009/10. Übungsblatt 7: Imperative Programmierung, Parameterübergabe

Android will doch nur spielen. Java Übung

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

Probeklausur: Einführung in die objektorientierte Programmierung mit Java 15WS

Arrays. Theorieteil. Inhaltsverzeichnis. Begriffe. Programmieren mit Java Modul 3. 1 Modulübersicht 3

Institut für Programmierung und Reaktive Systeme 24. Juni Programmieren II. 14. Übungsblatt

TU München, Fakultät für Informatik Lehrstuhl III: Datenbanksysteme Prof. Alfons Kemper, Ph.D.

Teil III: Evaluationstest

Übung Algorithmen und Datenstrukturen

Übungen zur Vorlesung EidP (WS 2015/16) Blatt 6

OCP Java SE 8. Collections

Programmiertechnik II

8.6 Visualisierung der Sortieralgorithmen

NAME, VORNAME: Studiennummer: Matrikel:

Algorithmen & Datenstrukturen Midterm Test 2

Aufgabenblatt 9. Die Abgabe muss bis Sonntag, 21. Juni 2009, 24 Uhr, erfolgen. Verspätet eingereichte Lösungen werden nicht berücksichtigt.

Wiederholungsklausur "ADP" WS 2016/2017

Programmierkurs Java

Tutoraufgabe 1 (Pilze):

Nachholklausur zur Vorlesung: Einführung in die objektorientierte Programmierung mit Java WS1415

Tutoraufgabe 1 (Fibonacci-Zahlen):

Institut für Programmierung und Reaktive Systeme 9. Januar Programmieren I. 6. Übungsblatt

Universität Augsburg, Institut für Informatik Sommersemester 2005 Prof. Dr. Werner Kießling 15. Oktober 2005 Dr. Alfons Huhn, Timotheus Preisinger

Lösungshinweise/-vorschläge zum Übungsblatt 13: Software-Entwicklung 1 (WS 2017/18)

Programmiermethodik 1. Klausur

Tutoraufgabe 1 (Sortieralgorithmus):

Zusatzübung. Abgabetermin: Gruppe: G1 (Löberbauer) G2 (Prähofer) G3 (Prähofer)

Übung Informatik I - Programmierung - Blatt 8

Programmierkurs Java

Programmieren in Java -Eingangstest-

Informatik I EProg HS13

Institut für Programmierung und Reaktive Systeme 27. Juni Programmieren II. 14. Übungsblatt

Tutoraufgabe 1 (Überladen von Methoden):

Informatik IV SS 2006 Institut für Informatik, Abt. I

2. Hausübung Algorithmen und Datenstrukturen

Wie kann man es verhindern das Rad immer wieder erneut erfinden zu müssen?

Eingabe: Array A mit n Elementen im Bereich [0,1) Annahme: die Elemente sind in [0,1) gleichverteilt

1 Organisatorisches. 2 Compilezeit- und Laufzeitfehler. 3 Exceptions. 4 Try-Catch-Finally

Transkript:

Aufgabenblatt 2 Suchen und Sortieren Abgabetermin: Samstag, 21.05.2016 23:55 Uhr Zur Prüfungszulassung müssen in einem Aufgabenblatt mind. 25% der Punkte erreicht werden und alle weiteren Aufgabenblätter mit mindestens 50% der Punkte bestanden werden. Die Aufgaben müssen in Zweiergruppen bearbeitet werden. Jede Hausaufgabe enthält eine optionale Zusatzaufgabe, die bei erfolgreicher Bearbeitungen 1 Klausurpunkt zählt. Abgabe: Die Abgabe erfolgt über CodeOcean 1. CodeOcean ermöglicht die Bearbeitung und Ausführung der Quelldateien im Browser. Bei Bedarf können die Sources (Quelltexte) und Unit Tests von der Übungs-Webseite 2 heruntergeladen werden, um lokal zu entwickeln. CodeOcean benutzt Java Version 8. Alle Aufgaben sind über das CodeOcean einzureichen. CodeOcean ermöglicht das Anfügen von Kommentaren bei der Abgabe, darüber hinaus können auch Kommentare in den Source-Code geschrieben werden. Geben Sie bei jeder Aufgabe beide Namen Ihrer Gruppe an. Achten Sie darauf, dass Ihr Quelltext hinreichend kommentiert ist. Aufgabe 1: Vergleiche und Sortieren in Java Betrachten Sie die Klassen assignment2.student und assignment2.studentmanager. Die Student-Klasse hält Daten über je einen Studenten, während die StudentManager-Klasse Informationen über eine Menge von Studenten-Objekten liefern. Bearbeiten Sie folgende Aufgaben: a) In der Methode nameexists((string firstname, String lastname, ArrayList<Student> students)) wird überprüft, ob in einer gegebenen Liste von Studenten-Objekten schon ein Student existiert, der den gegebenen Vor- und Nachnamen hat. Leider wurde diese Methode fehlerhaft implementiert. Finden und korrigieren Sie den Fehler. b) Um eine Liste von Studenten nach deren Namen sortieren zu können implementiert Student das Interface Comparable. Hierzu benötigt es die Methode public int compareto(student o). Implementieren Sie diese Methode so, dass Studenten lexikographisch sortiert werden zuerst nach Nachnamen, dann nach Vornamen. Die Methode ArrayList<Student> sortbyname(arraylist<student> students) im StudentManager nutzt die compareto-methode, um Studenten miteinander zu vergleichen. c) Durch die Implementierung von compareto können Studenten nach ihrem Namen geordnet werden. Das Studienreferat möchte jedoch die Studenten nach ihrer Matrikelnummer sortieren lassen, während die Übungsleiter daran Studenten nach der Verbesserung der Punkte sortieren möchten. Dies ist möglich mit Hilfe von Komparatoren, welche das Interface Comparator implementieren. 1 https://open.hpi.de/courses/pt2-2016 2 https://hpi.de/naumann/teaching/current-courses/ss-16/uebung-programmierechnik-ii. html 5 P 1

Implementieren Sie den Komparator assignmen2.studentmatrnumbercomparator, der Studenten aufsteigend gemäÿ ihrer Matrikelnummer sortieren kann (dies heiÿt, dass eine kleine Matrikelnummer an vorderer Stelle kommt). Implementieren Sie den Komparator assignmen2.studentgradeimprovementcomparator, der Studenten gemäÿ ihrer Verbesserung von Übung zur Klausur sortiert. Studenten mit der gröÿten Punkteverbesserung sollen an vorderster Stelle einsortiert werden. Implementieren Sie die Methode ArrayList<Student> sortbymatrnumber(arraylist<student> students) im StudentManager, der mittels des assignmen2.studentmatrnumbercomparator eine Liste von Studenten sortiert. Implementieren Sie die Methode ArrayList<Student> sortbygradeimprovement(arraylist<student> students) im StudentManager, der mittels des assignmen2.studentgradeimprovementcomparator eine Liste von Studenten sortiert. d) Beantworten Sie in einem Quelltext-Kommentar folgende Frage für die Resultate von sortbyname, sortbymatrnumber und sortbygradeimprovement: Kann die resultierende sortierte Reihenfolge von Daten von der Sortierung der Eingabedaten abhängen oder ist sie für jede mögliche Permutation der Studenten-Objekte gleich? Treen Sie geeignete Annahmen zur Verteilung der Attribute der Studenten-Objekte. 2

Aufgabe 2: Suchen Die nachstehenden Aufgaben widmen sich dem Suchen spezieller Elemente ganzzahliger Arrays. a) Implementieren Sie die Methode findunsorted(int x, int[] a) der Klasse assignment2.search, welche die Indizes sämtlicher Vorkommen von x innerhalb des unsortierten Arrays a in aufsteigender Sortierung zurückgibt. Das erwartete Resultat des Aufrufs findunsorted ([5, 2, 4, 1, 4], 4) ist zum Beispiel [2, 4]. Achten Sie auf eine eziente Implementierung! b) Implementieren Sie die Methode findsorted(int x, int[] a) der Klasse assignment2.search, welche die Indizes sämtlicher Vorkommen von x innerhalb des sortierten Arrays a in aufsteigender Sortierung zurückgibt. Das erwartete Resultat des Aufrufs findsorted ([1, 2, 4, 4, 5], 4) ist zum Beispiel [2, 3]. Achten Sie auf eine eziente Implementierung! c) Beobachten Sie die unterschiedlichen Laufzeiten der beiden Methoden für a 10 6 und diskutieren Sie ihre Beobachtungen anhand eines Quelltextkommentars. Eine Datei mit vielen Daten steht beispielsweise hier bereit: https://hpi.de/fileadmin/user_upload/ fachgebiete/naumann/lehre/ss2016/ptii_uebung/large_array.zip 6 P 3

Aufgabe 3: Sortieren Die nachstehenden Aufgaben widmen sich dem Sortieren ganzzahliger Arrays. a) Implementieren Sie die Methode bubblesort(int[] a) der Klasse assignment2.sort, welche das Array a mittels Bubblesort aufsteigend sortiert. Der erwartete Inhalt des Arrays a = [5, 2, 4, 1, 4] nach dem Aufruf bubblesort (a) ist zum Beispiel [1, 2, 4, 4, 5]. b) Implementieren Sie die Methode quicksort(int[] a) der Klasse assignment2.sort, welche das Array a mittels Quicksort aufsteigend sortiert. Der erwartete Inhalt des Arrays a = [2, 3, 7, 2, 3] nach dem Aufruf quicksort (a) ist zum Beispiel [2, 2, 3, 3, 7]. c) Implementieren Sie die Methode countingsort(int[] a) der Klasse assignment2.sort, welche das Array a mittels Countingsort aufsteigend sortiert. Nehmen Sie an, dass i N 0 i < a : a [i] N 0 gilt. d) Beobachten Sie die unterschiedlichen Laufzeiten der drei Methoden für a 10 6 und diskutieren Sie ihre Beobachtungen anhand eines Quelltextkommentars. Eine Datei mit vielen Daten steht beispielsweise hier bereit: https://hpi.de/fileadmin/user_upload/ fachgebiete/naumann/lehre/ss2016/ptii_uebung/large_array.zip Die statische Methode sort(object[] a) der Klasse java.util.arrays arbeitet abhängig von der spezischen Eingabe gemäÿ Mergesort beziehungsweise Quicksort. Weshalb setzt jene Methode nicht auf Countingsort? 8 P 4

Zusatzaufgabe: Wortsuche Gegeben sei ein Raster (zweidimensionales Array char[][]), in dem verschiedene Begrie (HashSet<String>) versteckt sind. Begrie können dabei horizontal und vertikal, sowie vor- und rückwärts auftauchen (also von links nach rechts, rechts nach links, oben nach unten und unten nach oben). Felder, die zu keinem Begri gehören, sind mit anderen Buchstaben ausgefüllt. Ihre Aufgabe ist es, algorithmisch die versteckten Begrie zu nden, indem Sie die Methode search der Klasse WordSearch implementieren. Als Eingabe nimmt die Methode das ausgefüllte Raster und die Menge an Suchbegrien. Zurückgegeben werden soll das Raster ohne die Füllzeichen (siehe Abbildung); ersetzen Sie diese durch den Bindestrich-Character (45). Achten Sie auf einige Eigenarten des Rasters: Die Höhe und Breite des Rasters sind identisch; es ist also ein Quadrat. Das Raster arbeitet nur auf Groÿbuchstaben. Weiterhin enthält das Raster keine Sonderzeichen, Umlaute etc. (z. B. ist 'Bär' nicht erlaubt). Alle Suchbegrie enthalten mindestens einen Vokal; die Füllzeichen sind ausschlieÿlich Konsonanten. In jeder Zeile und jeder Spalte steht höchstens ein vollständiger Suchbegri. Suchbegrie überschneiden einander nicht. Sie kreuzen einander nicht. Kein Suchbegri enthält einen anderen (z. B. sind 'Pferd' und 'Seepferdchen' zusammen nicht erlaubt). Jeder Suchbegri ist genau einmal im Raster enthalten. Die Gröÿe des Rasters und die Anzahl der Suchbegrie können variieren (werden aber überschaubar groÿ bleiben). Nutzen Sie bei Ihrer Implementierung die vorgenannten Hinweise um die Suche ezienter zu gestalten. Bewertet wird neben der Funktionsfähigkeit Ihrer Lösung auch, wie Sie zur Optimierung vorgegangen sind. Kommentieren Sie daher im Quellcode alle Annahmen die Sie treen und alle Ansätze die Sie umsetzen. 5