Algorithmen und Datenstrukturen CS1017 Th. Letschert TH Mittelhessen Gießen University of Applied Sciences Organisatorisches und Einführung Administratives Lehrpersonal Dozent Dr. Letschert Tutoren Alissia Sauer Jonas Dickel Nina Isensee Seite 2 Administratives Unterlagen Folien, Aufgaben, siehe Moodle-Kurs Literatur Unser Stoff ist elementarer als der in der üblichen Literatur zum Thema. Levitin: Introduction to the Design and Analysis of Algorithms (3te Auflage, 2012) Cormen, Leiserson, Rivest, Stein: Algorithmen - Eine Einführung Saake, Sattler: Algorithmen und Datenstrukturen: Eine Einführung mit Java Sedgewick: Algorithmen in Java Veranstaltungsform 6 SWS: 4V + 2Ü Bitte bringen Sie Ihr Notebook mit einer funktionieren Java-Installation (Eclipse, o.a.) zu jeder Veranstaltung mit! Bitte kommen Sie pünktlich und nur wenn Sie sich an der Veranstaltung aktiv oder passiv beteiligen wollen! Seite 3 Administratives Bewertung Für Teilnehmer die bereits jetzt Klausurzulassung haben: Eine Klausur Bitte melden Sie sich bis spätestens zu 1. 6. wenn Sie bereits über eine Zulassung verfügen! Alle Teilnehmer, die eine Klausurzulassung noch erreichen müssen, benötigen zwei Hausübungen als Klausurzulassung. Die Bewertung der Hausübungen kann in die Endnote einfließen. Seite 4 Administratives Hausübungen Die Klausurzulassung wird mit zwei bestandenen Hausübungen erreicht. Hausübung 1 Hausübung 1 gilt als erledigt wenn 5 sogenannte HÜ-1–Übungen (auch SternchenAufgaben) erfolgreich präsentiert wurden. Diese Übungen werden auf den Übungsblättern besonders gekennzeichnet. Jede weitere erfolgreich präsentierte HÜ-1-Übung wird mit einem Bonuspunkt honoriert. Die Präsentation erfolgt individuell bei und in Absprache mit den Tutoren. Dabei muss auch demonstriert werden, dass die Lösung selbständig erarbeitet wurde. Bei der Präsentation der ersten HÜ-1–Übung muss der Nachweis erbracht werden, dass die Veranstaltung OOP erfolgreich absolviert wurde. (Bitte einen Notenauszug mitbringen.) Seite 5 Administratives Hausübungen Hausübung 2 In dieser Hausübung wird ein Programmierprojekt bearbeitet. Hausübung 2 wird in Gruppen von 1 – 4 Mitgliedern bearbeitet. Die Anmeldung zu Hausübung 2 muss bis zum 1. 6. 2016 erfolgen. Alle Gruppenmitglieder müssen dazu 4 der notwendigen 5 HÜ-1–Übungen erreicht haben. Hausübung 2 wird in einem seminaristischen Vortrag präsentiert und verteidigt. Die gelöste Aufgabe (als Jar-Datei) sowie die Folien der Präsentation (als PDF-Datei) müssen vor der Präsentation eingereicht und akzeptiert werden. Bei der Präsentation müssen alle Gruppenmitglieder anwesend sein und ihren Beitrag zur Lösung der Aufgabenstellung überzeugend darstellen. Seite 6 Administratives Übungsbetrieb Von den Teilnehmern wird eine aktive Beteiligung am Übungsbetrieb erwartet. – Mehrere Übungstermine stehen dabei am Freitag zur Auswahl: 1-ter, 2-ter und 3-ter Block – Zur Präsentation der Hausübungen können andere oder zusätzliche Termine vergeben werden. Seite 7 Administratives Vorausgesetzte Kenntnisse Kenntnisse und Fertigkeiten, die nach einem erfolgreichen Abschluss folgender Veranstaltungen erwartet werden: – Grundlagen der Informatik – OOP – Diskrete Strukturen Vorausgesetzte Leistungen Die Teilnahme an der Veranstaltung setzt laut Modulhandbuch voraus: – Grundlagen der Informatik – OOP Formal geprüft wird davon nur OOP: Ohne eine vorliegende Leistung in OOP ist eine Teilnahme an der Veranstaltung nicht möglich! Seite 8 Inhalt Inhalt – – – – – bekannte Algorithmen und Datenstrukturen anwenden Entwicklung von Algorithmen Bewertung von Algorithmen Datentypen und Datenstrukturen Vertiefung und Erweiterung der Programmierfertigkeiten (in Java) Seite 9 Inhalt Algorithmen – Wohl-definiertes schrittweise Verfahren zum Lösen von Problemen – Programm implementierter (realisierter) Algorithmus An einen Computer gerichteter Vortrag über ein Verfahren zur Problemlösung Algorithmisches Problemlösen – – – – – – – – Problem verstehen (Beispiele betrachten!) Welche Mittel werden eingesetzt (Prozeduren, Prozesse, …) ? Exakte oder ungefähre Lösung gesucht ? Ist das Problem bereits gelöst (auf einer anderen Abstraktionsstufe) ? Welche algorithmische Technik kann eingesetzt werden ? Welche Datenstrukturen werden eingesetzt ? Spezifikation der Lösung Analyse des Algorithmus : Korrektheit Effizienz – Implementierung / Codierung – Analyse der Implementierung : Test Seite 10 Inhalt Allgemein bekannte und eigene Algorithmen – Sehr viele algorithmische Probleme sind gelöst – Die Problemlösungen sind bekannt und i.d.R. besser gelöst als durch eigene Anstrengungen – Bekannte Algorithmen stehen in sprachspezifischer Form zur Verfügung (Bibliotheken, Frameworks) muss jeder Entwickler kennen und verwenden! stehen in abstrakter Form zur Verfügung (Bücher, Skripte, Wikipedia) sollte jeder Informatiker (muss jeder Bachelor) kennen und verwenden können – Problemlösung in der Praxis 1. Ist das Problem in einer sprachspezifischen Form bereits gelöst? (API) Wenn ja: Verwende diese Lösung! 2. Ist das Problem generell gelöst? Wenn ja: Passe die (i.A. abstrakte) Lösung an dein Problem an! 3. Werde kreativ! Welche algorithmische Strategie ist angemessen? Wende sie an! Seite 11 Inhalt Lernziel – Algorithmen in Form einer Java-Implementierung verwenden können die in abstrakter Form gegeben sind, umsetzen können in konkrete Form Algorithmen neu entwickeln und bewerten können – Datenstrukturen in Form von Kolletionstypen in Java verwenden können gängige Datenstrukturen kennen Datenstrukturen in (Java-) API-konformer Art implementieren können Man kann nie sicher sein, dass man bestimmte Dinge nicht gefragt wird. http://www.youtube.com/watch?v=k4RRi_ntQc8&feature=related Seite 12 Inhalt Unterrichtssprachen – Deutsch – Java 8 In diesem Kurs wird Java 8 verwendet. Mit Java-8 neu eingeführte Sprachkonstrukte werden in beschränkten Umfang genutzt. Seite 13