Grundlagen der Programmierung



Ähnliche Dokumente
Überblick. Lineares Suchen

Programmieren I. Kapitel 7. Sortieren und Suchen

Programmierkurs Java

Java Kurs für Anfänger Einheit 5 Methoden

Lineargleichungssysteme: Additions-/ Subtraktionsverfahren

Numerische Verfahren und Grundlagen der Analysis

Algorithmen & Datenstrukturen 1. Klausur

Einführung in die Java- Programmierung

Würfelt man dabei je genau 10 - mal eine 1, 2, 3, 4, 5 und 6, so beträgt die Anzahl. der verschiedenen Reihenfolgen, in denen man dies tun kann, 60!.

Algorithmen und Datenstrukturen

Sortierverfahren für Felder (Listen)

Einführung in die Programmierung

1 Vom Problem zum Programm

BEISPIELKLAUSUR Softwareentwicklung:

1 topologisches Sortieren

Professionelle Seminare im Bereich MS-Office

Java Kurs für Anfänger Einheit 4 Klassen und Objekte

Konzepte der Informatik

Abschnitt: Algorithmendesign und Laufzeitanalyse

Java-Programmierung mit NetBeans

Kapitel 6. Komplexität von Algorithmen. Xiaoyi Jiang Informatik I Grundlagen der Programmierung

Glaube an die Existenz von Regeln für Vergleiche und Kenntnis der Regeln

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen

Mächtigkeit von WHILE-Programmen

Programmiervorkurs SS 2011 Technische Universität Darmstadt Jan Hendrik Burdinski, Felix Kerger

Handbuch ECDL 2003 Modul 2: Computermanagement und Dateiverwaltung Der Task-Manager

Bedienungsanleitung: Onlineverifizierung von qualifiziert signierten PDF-Dateien

Kosten-Leistungsrechnung Rechenweg Optimales Produktionsprogramm

Datenexport aus JS - Software

Objektorientierte Programmierung

Schnellanleitung: Verbuchung von Studien- und Prüfungsleistungen

Programmieren für Ingenieure Sommer Ein Rechner. Rechner sind überall. Gerät, das mittels programmierbarer Rechenvorschriften Daten verarbeitet.

Mathematischer Vorbereitungskurs für Ökonomen

Die Gleichung A x = a hat für A 0 die eindeutig bestimmte Lösung. Für A=0 und a 0 existiert keine Lösung.

EndTermTest PROGALGO WS1516 A

Grundlagen der höheren Mathematik Einige Hinweise zum Lösen von Gleichungen

Abschlussprüfung Realschule Bayern II / III: 2009 Haupttermin B 1.0 B 1.1

Java: Vererbung. Teil 3: super()

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

Informatik Grundlagen, WS04, Seminar 13

Stand: Adressnummern ändern Modulbeschreibung

Das Mathematik-Abitur im Saarland

Die Komplexitätsklassen P und NP

Große Übung Praktische Informatik 1

Klausur WS 2006/07 Programmiersprache Java Objektorientierte Programmierung II 15. März 2007

Grundlagen der Theoretischen Informatik, SoSe 2008

GEONET Anleitung für Web-Autoren

Statuten in leichter Sprache

Rekursion. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Fragebogen zur Diplomarbeit von Thomas Friedrich

Folge 19 - Bäume Binärbäume - Allgemeines. Grundlagen: Ulrich Helmich: Informatik 2 mit BlueJ - Ein Kurs für die Stufe 12

Erwin Grüner

Handbuch. NAFI Online-Spezial. Kunden- / Datenverwaltung. 1. Auflage. (Stand: )

Übungsaufgaben Tilgungsrechnung

AGROPLUS Buchhaltung. Daten-Server und Sicherheitskopie. Version vom b

Arbeit zur Lebens-Geschichte mit Menschen mit Behinderung Ein Papier des Bundesverbands evangelische Behindertenhilfe e.v.

Bevor lineare Gleichungen gelöst werden, ein paar wichtige Begriffe, die im Zusammenhang von linearen Gleichungen oft auftauchen.

Klausur zur Vorlesung Stochastische Modelle in Produktion und Logistik im SS 2010

Lineare Funktionen. 1 Proportionale Funktionen Definition Eigenschaften Steigungsdreieck 3

Anzeige von eingescannten Rechnungen

Einführung in die Programmierung

1. Kennlinien. 2. Stabilisierung der Emitterschaltung. Schaltungstechnik 2 Übung 4

Algorithmen und Datenstrukturen. Große Übung vom Nils Schweer

Programmieren in C. Rekursive Funktionen. Prof. Dr. Nikolaus Wulff

AutoTexte und AutoKorrektur unter Outlook verwenden

Meinungen zur Altersvorsorge

Zahlenwinkel: Forscherkarte 1. alleine. Zahlenwinkel: Forschertipp 1

1.3. Installation und Konfiguration von Filr Desktop

Übung: Verwendung von Java-Threads

Daten sammeln, darstellen, auswerten

Wie halte ich Ordnung auf meiner Festplatte?

WinVetpro im Betriebsmodus Laptop

MASTER-BERATUNG. im Fach Kunstgeschichte

Definition und Begriffe

1 Einleitung. Lernziele. automatische Antworten bei Abwesenheit senden. Einstellungen für automatische Antworten Lerndauer. 4 Minuten.

Einfache Arrays. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Lineare Gleichungssysteme

Wie kann ich mein Profil pflegen und/oder ihm ein PDF hinzufügen? Sie vermissen die Antwort auf IHRE Frage? Bitte lassen Sie uns Ihnen weiterhelfen:

Kapitel 5: Dynamisches Programmieren Gliederung

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

3.2 Binäre Suche. Usr/local/www/ifi/fk/menschen/schmid/folien/infovk.ppt 1

Approximation durch Taylorpolynome

Scala kann auch faul sein

Korrelation (II) Korrelation und Kausalität

OECD Programme for International Student Assessment PISA Lösungen der Beispielaufgaben aus dem Mathematiktest. Deutschland

Güte von Tests. die Wahrscheinlichkeit für den Fehler 2. Art bei der Testentscheidung, nämlich. falsch ist. Darauf haben wir bereits im Kapitel über

Tutorium zur Mikroökonomie II WS 02/03 Universität Mannheim Tri Vi Dang. Aufgabenblatt 3 (KW 44) ( )

Einführung in die Programmierung

Repräsentative Umfrage zur Beratungsqualität im deutschen Einzelhandel (Auszug)

Die perfekte Bewerbung richtig schreiben online & klassisch

Gleichungen Lösen. Ein graphischer Blick auf Gleichungen

FAQ Spielvorbereitung Startspieler: Wer ist Startspieler?

Arbeitsblätter. Sinnvolle Finanzberichte. Seite 19

Der Gabelstapler: Wie? Was? Wer? Wo?

50. Mathematik-Olympiade 2. Stufe (Regionalrunde) Klasse Lösung 10 Punkte

GEVITAS Farben-Reaktionstest

Verhindert, dass eine Methode überschrieben wird. public final int holekontostand() {...} public final class Girokonto extends Konto {...

Financial Engineering....eine Einführung

In vergleichsbasierten Suchbäumen wird nicht in Schlüssel hineingeschaut.

Transkript:

Grundlagen der Programmierung Algorithmen und Datenstrukturen Die Inhalte der Vorlesung wurden primär auf Basis der angegebenen Literatur erstellt. Darüber hinaus sind viele Teile direkt aus der Vorlesung von Prof. Dr.-Ing. Faustmann (ebenfalls FHW Berlin) übernommen worden. Für die Bereitstellung dieses Vorlesungsmaterials möchte ich mich an dieser Stelle noch einmal recht herzlich bedanken. 26.11.2009 Prof. Dr. Andreas Schmietendorf 1

Übersicht zur Vorlesung und Literaturempfehlungen 26.11.2009 Prof. Dr. Andreas Schmietendorf 2

Übersicht zur Vorlesung I Komplexität und Aufwand eines Algorithmus - Analyse von Algorithmen - Die O-Notation - Weiterführende Aspekte Arbeiten mit Dateien (Files) - Verzeichnis- und Dateizugriff - Sequentieller Zugriff auf Dateien - Beliebiger (wahlfreier Zugriff auf Dateien) 26.11.2009 Prof. Dr. Andreas Schmietendorf 3

Übersicht zur Vorlesung II Verkettete Listen und Bäume - Verkettete Listen in Java - Manipulieren verketteter Listen - Verwendung von Bäumen Rekursive Algorithmen - Rekursion vs. Iteration - Rekursive Lösungen (z.b. Türme von Hanoi) 26.11.2009 Prof. Dr. Andreas Schmietendorf 4

Übersicht zur Vorlesung III Such- und Sortieralgorithmen - Sequenzielle Suche - Binäre Suche - Hashfunktion - Vergleich von Sortieralgorithmen Zusammenfassung und Ausblick - Wiederholdung ausgewählter Themenstellungen - Objektorientierte Softwareentwicklung - Die Idee der J2EE Architektur 26.11.2009 Prof. Dr. Andreas Schmietendorf 5

Literatur Sedgewick, R.: Algorithmen in Java: Pearson Studium Addison Wesley, 2003 (ISBN 3-8273-7072-8) Krüger, G.: Handbuch der Java-Programmierung 3. Auflage, Addison Wesley (ISBN 3-8273-2120-4) Dumke, R.: Java-Tutorial, Webauftritt der AG Softwaretechnik am Institut für verteilte Systeme, Universität Magdeburg, (ivs.cs.unimagdeburg.de) 26.11.2009 Prof. Dr. Andreas Schmietendorf 6

Komplexität und Aufwand 26.11.2009 Prof. Dr. Andreas Schmietendorf 7

Die Komplexität eines Algorithmus sei die Abschätzung des Aufwandes seiner Realisierung bzw. Berechnung auf einem Computer. Sie wird daher auch als rechnerische Komplexität bezeichnet. Die Form der Abschätzung beruht zumeist auf dem Zählen, wie häufig bestimmte Operationen des Algorithmus ausgeführt werden. 26.11.2009 Prof. Dr. Andreas Schmietendorf 8

// liefert Summe der Zahlen von 1 bis n */ public static long summe(long n){ long erg = 0; for (int i = 1; i<=n; i++){ erg += i; } return erg; } - Wie gut ist der Algorithmus summe? - Wie viel Zeit braucht summe in Abhängigkeit von n? 26.11.2009 Prof. Dr. Andreas Schmietendorf 9

n 1 10 100 1000 10000 100000 1000000 10000000 100000000 1000000000 Zeit in ms 0 0 0 0 0 0 0 63 609 6172 Summe 1 55 5050 500500 50005000 5000050000 500000500000 50000005000000 5000000050000000 500000000500000000 Vermessung der dargestellten Methode zur Berechnung der Summe auf einem Rechnersystem mit 1,73 GHz, 512 MByte RAM unter WindowsXP. Für die Vermessung wurde die Methode System.currentTimeMillis()verwendet. 26.11.2009 Prof. Dr. Andreas Schmietendorf 10

- Schrittanzahl ist 3+3*n, wobei die Schrittdauer unklar ist. Wir nennen die Angabe der (realen) Schrittanzahl analytische Betrachtung der Komplexität. - Die Größenordnung der Schrittanzahl bei diesem Algorithmus steigt linear mit dem Eingabewert n, d.h. O(n) (=linear). 26.11.2009 Prof. Dr. Andreas Schmietendorf 11

Die Aufwandsschätzung unterscheidet folgende Fälle: - Der günstigste Fall best case - Den schlechtesten Fall worst case - Den durchschnittlichen Fall average case Häufig interessiert man sich für den asymptotischen Aufwand eines Algorithmus (d.h. was passiert wenn n läuft) Ggf. kann ein Algorithmus mit schlechteren asymptotischen Aufwand für kleine n besser sein (sog. break even points berücksichtigen) 26.11.2009 Prof. Dr. Andreas Schmietendorf 12

O-Notation -gebräuchliche Komplexitätsklassen: O(2 n ) > O(n 2 ) > O(n*log n) > O(n) > O(log n) > O(1) - O(1) konstanter Aufwand (z.b. Ausdrucksberechnungen) - O(log n) logarithmischer Aufwand (z.b. allg. Suchverfahren) - O(n) linearer Aufwand (z.b. syntaktische Programmanalyse) - O(n log n) quasilinearer Aufwand (z.b. Sortierung) - O(n 2 ) quadratischer Aufwand (z.b. Vektormultiplikation) - O(2 n ) exponentieller Aufwand (z.b. rekursive Algorithmen) 26.11.2009 Prof. Dr. Andreas Schmietendorf 13

Anweisung Ausführunganzahl (Schritte) x = x +1; for(int i=1; i<n; i++){ x = x +1; } einmal (n-1)-mal d.h. O(1) d.h. O(n) for(int i=1; i<n; i++){ for(int k=1; k<n; k++){ x = x +1; } } for(int i=n; i>0; i/=10){ x = x +1; } (n-1) 2 -mal d.h. O(n 2 ) (1+log n) mal d.h. O(log n) 26.11.2009 Prof. Dr. Andreas Schmietendorf 14

Primitive Operationen gehen nicht in die Aufwandsschätzung ein! Wertzuweisung zu einer Variablen Aufruf einer Klassenmethode Berechnung von arithmetischen Termen Indexberechnung von Feldelementen Auflösung einer Objektreferenz Rückkehr von einer Klassenmethode 26.11.2009 Prof. Dr. Andreas Schmietendorf 15

Übung: Für die folgenden Algorithmen (Aufgabe 1-7) sind: - die analytische Schrittanzahl in Bezug auf die Elementaranweisung s, - und die Größenordnung der Komplexität an (O-Notation) zu bestimmen! - Analysieren Sie die Algorithmen zuerst ohne Verwendung von Eclipse. - Testen Sie die Anzahl der Schritte mit Hilfe eines Java-Programms Bem: Komplexität als Funktion der Eingabe von n 26.11.2009 Prof. Dr. Andreas Schmietendorf 16

1. for(int i=2*n; i>=0; i--){s;} 2. for(int i=1; i<n; i++){s; s; s; s;} 3. for(int i=1; i<=n; i++){s;} for(int j=1; j<=n; j++){s;} 4. for(int i=1; i<=n; i++){ for(int j=1; j<=n; j++){ s;}} 26.11.2009 Prof. Dr. Andreas Schmietendorf 17

5. for(int i=n; i>0; i/=10){s;} 6. for(int i=1; i<=n; i++){ s; for(int j=1; j<=n; j++){ s; } s;} 7. long f10(long n){ s; if (n>1) { f10(n-1); f10(n-1); } } 26.11.2009 Prof. Dr. Andreas Schmietendorf 18

Ein für eine Schrittanzahl analytisch ermitteltes Polynom a m n m + a m-1 n m-1 +... + a 2 n 2 + a 1 n + a 0 hat die Komplexitätsklasse O(n m ). Für Anwendungssysteme ist die Verwendung von Algorithmen mit einem Aufwand größer als n*log n (also quadratisch oder sogar exponentiell) nicht erwünscht. Bestimmte Probleme sind jedoch nicht mit geringerem Aufwand lösbar (bzw. wurde bis heute noch kein Algorithmus einer besseren Aufwandsklasse gefunden). 26.11.2009 Prof. Dr. Andreas Schmietendorf 19

n log n n log n n 2 2 n 2 0.301 0.602 4 4 4 0.602 2.408 16 16 8 0.903 7.224 64 256 16 1.204 19.265 256 65536 32 1.505 48.165 1024 4294967296 26.11.2009 Prof. Dr. Andreas Schmietendorf 20

Übung (optional): Welchen Aufwand hat das Suchen nach einem Eintrag im Telefonbuch? Gehen Sie zur Beantwortung der Frage wie folgt vor: Versuchen Sie, für diese Suche einen Algorithmus in Pseudocode zu formulieren. Ermitteln Sie den Aufwand dieses Algorithmus. Welcher Datenstruktur entspricht ein Telefonbuch? Warum ist eine (sortierte) verkettete Liste gar nicht und ein (sortiertes) Array nur eingeschränkt geeignet zur Speicherung? 26.11.2009 Prof. Dr. Andreas Schmietendorf 21

Übung: Analysieren Sie das Zeitverhalten der Aufgabe 7 (rekursive Funktion) - Messen Sie Dauer der Ausführung - Verwenden Sie für die Messung folgende Java-Methode: long startmesswert = System.currentTimeMillis(); - Nehmen Sie eine entsprechende Kennlinie bis 50000 ms auf - Beobachten Sie die Systemauslastung mit Hilfe des Windows Task-Manager Auflösung orientiert sich meist an der Auflösung des System-Timers Mögliche Auflösung lässt sich bestimmen siehe dazu Krüger, G. S. 366 26.11.2009 Prof. Dr. Andreas Schmietendorf 22

Weitere Komplexitätsformen: Die Raumkomplexität bezieht sich auf die Aufwandsabschätzung für die Speicherung der Daten bzw. Informationen zu einem Algorithmus hinsichtlich seiner Realisierung. Die psychologische Komplexität ist der Aufwand für das Verständnis bzw. die Handhabung eines Algorithmus speziell in einer Realisierungsform als Programm. 26.11.2009 Prof. Dr. Andreas Schmietendorf 23

Übung - Optional: Der Kurs einer Aktie hat an zehn aufeinander folgenden Tagen die folgenden Werte gewonnen bzw. verloren: Frage: Wie viel Gewinn hätte man innerhalb dieser Zeitspanne maximal machen können? Problem: Es ist mühevoll für längere Zeitabschnitte einen günstigsten Kauf- bzw. Verkaufstermin zu finden! 26.11.2009 Prof. Dr. Andreas Schmietendorf 24