Informatik Vorkurs Sommersemester 2015

Ähnliche Dokumente
Das Studium der Informatik in Braunschweig

Überblick. 1 Vorbemerkungen. 2 Algorithmen. 3 Eigenschaften von Algorithmen. 4 Historischer Überblick. Einführung

Algorithmen und Datenstrukturen

Angewandte Mathematik am Rechner 1

Das Studium der Informatik in Braunschweig. Werner Struckmann

Wie rechnet ein Rechner? Werner Struckmann Vorkurs Wintersemester 2014/2015

1. Grundkonzepte der logischen Programmierung 2. Syntax von Prolog 3. Rechnen in Prolog. IV.1 Grundkonzepte der logischen Programmierung - 1 -

Inhalt. 1. Einführung in die Informatik. 2. Algorithmen Definition, Eigenschaften, Entwurf Darstellung von Algorithmen Beispiele.

Einführung in die Informatik Turing Machines

Sprachen und Programmiersprachen

1. Der Begriff Informatik 2. Syntax und Semantik von Programmiersprachen. I.2. I.2. Grundlagen von von Programmiersprachen.

Informatik. Teil 1 Wintersemester 2011/2012. Prof. Dr.-Ing. habil. Peter Sobe Fachkultät Informatik / Mathematik

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

Algorithmus. Was ist ein Algorithmus? Ibn Musa Al-Chwarismi persischer Mathematikers 9. Jahrhundert Buch: Regeln der Wiedereinsetzung und Reduktion.

Modellierung und Programmierung 1

Einführung in die Informatik Turing Machines

Grundzüge der Wirtschaftsinformatik WS 2002/03. Wiederholung Java. Programmierzyklus. Heiko Rossnagel Problem

Unentscheidbarkeitssätze der Logik

Allgemeines Halteproblem Hilberts 10. Problem

Grundlagen der Informatik I (Studiengang Medieninformatik)

2. Grundlagen. Beschreibung von Algorithmen durch Pseudocode. Korrektheit von Algorithmen durch Invarianten.

Wir suchen Antworten auf die folgenden Fragen: Was ist Berechenbarkeit? Wie kann man das intuitiv Berechenbare formal fassen?

Erste Schritte in Java

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

Komplexität von Algorithmen

ALP I Turing-Maschine

Vorkurs Informatik WiSe 17/18

Algorithmus und Programm: Vom Algorithmus zum Programm

Einführung in die Informatik Algorithms II

Intensivübung zu Algorithmen und Datenstrukturen

Algorithmen und Datenstrukturen I Grundlagen

1 Einführung: Algorithmen. Algorithmen und Datenstrukturen WS 2012/13. Pro f. Dr. Sán do r Fe k e te

Reduktion / Hilberts 10. Problem

Programmieren I. Methoden-Spezial Heusch --- Ratz 6.1, Institut für Angewandte Informatik

Student: Alexander Carls Matrikelnummer: Aufgabe: Beschreibung des euklidischen Algorithmus Datum:

Die Reduktion Hilberts 10. Problem

Algorithmen und Datenstrukturen 1. EINLEITUNG. Algorithmen und Datenstrukturen - Ma5hias Thimm 1

Vorkurs Informatik WiSe 17/18

Informatik 1. Teil 1 - Wintersemester 2012/2013. Prof. Dr.-Ing. habil. Peter Sobe Fachkultät Informatik / Mathematik

2. Algorithmen und Algorithmisierung Algorithmen und Algorithmisierung von Aufgaben

Semantik von Programmiersprachen

Berechenbarkeit und Komplexität

{P} S {Q} {P} S {Q} {P} S {Q} Inhalt. Hoare-Kalkül. Hoare-Kalkül. Hoare-Tripel. Hoare-Tripel. Hoare-Tripel

2. Algorithmenbegriff

Übung zur Vorlesung Berechenbarkeit und Komplexität

6.4 Entscheidbarkeit. nein sein müssen, ist klar. THEO 6.4 Entscheidbarkeit 205/307 c Ernst W. Mayr

Programmieren Formulierung eines Algorithmus in einer Programmiersprache

1. Einführung Einführung in die Programmierung (fbw) Sommersemester 2008 Prof. Dr. Bernhard Humm Hochschule Darmstadt, fbi

VBA-Programmierung: Zusammenfassung

! 1. Erste Schritte! 2. Einfache Datentypen! 3. Anweisungen und Kontrollstrukturen! 4. Verifikation! 5. Reihungen (Arrays) II.1.4. Verifikation - 1 -

Einführung in die Programmierung

Algorithmen und Datenstrukturen Effizienz und Funktionenklassen

Algorithmen und Datenstrukturen

Grundlagen der Modellierung und Programmierung, Übung

Einführung in die Programmierung WS 2014/ Algorithmus, Berechenbarkeit und Programmiersprachen 2-1

Vorkurs Informatik WiSe 16/17

2.5 Halteproblem und Unentscheidbarkeit

Gliederung. Algorithmen und Datenstrukturen I. Eine wichtige Frage. Algorithmus. Materialien zur Vorlesung. Begriffsbestimmung EUKLID Primzahltest

Zeitkomplexität (1) Proseminar Theoretische Informatik. Proseminar Theoretische Informatik: Lisa Dohrmann 1

Kapitel 5: Abstrakte Algorithmen und Sprachkonzepte. Elementare Schritte

Algorithmen & Komplexität

Klausur Grundlagen der Programmierung

Informatik I. Informatik I Was haben wir gelernt? 28.2 Algorithmusbegriff Was geht nicht? 28.1 Was haben wir gelernt?

Vorlesung Programmieren

LOOP-Programme: Syntaktische Komponenten

Programmieren I. Methoden-Special Heusch --- Ratz 6.1, Institut für Angewandte Informatik

Kapitel 1 Einleitung. Definition: Algorithmus nach M. Broy: aus: Informatik: Eine grundlegende Einführung, Band 1, Springer-Verlag, Berlin

Funktionale Programmiersprachen

Programmiersprachen. Organisation und Einführung. Berthold Hoffmann. Studiengang Informatik Universität Bremen

Einführung in die Informatik 1

4.Grundsätzliche Programmentwicklungsmethoden

Semantik von Programmiersprachen

Ideen und Konzepte der Informatik. Programme und Algorithmen Kurt Mehlhorn

Einführung in die Programmierung

Die Church-Turing-These

Programmierkurs II. Prof. Dr. Wolfgang Effelsberg. Universität Mannheim. Sommersemester Wolfgang Effelsberg Programmiersprachen

Programmierkurs II. Prof. Dr. Wolfgang Effelsberg. Universität Mannheim. Sommersemester Wolfgang Effelsberg Programmiersprachen

Inhaltsverzeichnis. I Grundlegende Konzepte 1. xiii

C. A. R. Hoare. An Axiomatic Basis for Computer Programming. Nicolas Schelp. Proseminar Assertions SS 2007

Definition: (Kette, noethersche Ordnung)

Informatik I: Einführung in die Programmierung

Vorkurs Informatik WiSe 15/16

Dank. Theoretische Informatik II. Teil II. Registermaschinen. Vorlesung

Willkommen zur Vorlesung. Algorithmen und Datenstrukturen

Nachklausur Bitte in Druckschrift leserlich ausfüllen!

EIDI 1 Einführung in die Informatik 1. PGdP Praktikum Grundlagen der Programmierung. Harald Räcke 2/217

Gliederung. Tutorium zur Vorlesung. Gliederung. Gliederung. 1. Gliederung der Informatik. 1. Gliederung der Informatik. 1. Gliederung der Informatik

Theoretische Informatik 1

Klassenvariablen, Klassenmethoden

Etwas Mathematik. Vorkurs Wintersemester 2016/17 Werner Struckmann Oktober 2016

Einführung in die Informatik I (autip)

Einführung in die Informatik Algorithms

DUDEN. Basiswissen Schule. Informatik Abitur. PAETEC Verlag für Bildungsmedien Berlin : Dudenverlag Mannheim Leipzig Wien Zürich

1 Zahlentheorie. 1.1 Kongruenzen

Berechenbarkeit und Komplexität Vorlesung 11

Von der Chomsky-Hierarchie

Semantik von Programmiersprachen

Programmieren für Fortgeschrittene

Theoretische Informatik SS 03 Übung 3

GTI. Hannes Diener. 18. Juni. ENC B-0123,

Transkript:

Informatik Vorkurs Sommersemester 2015 Vom Algorithmus zum Programm Werner Struckmann / Marvin Priedigkeit, Stephan Mielke 31. März 10. April 2015

Kann ein Computer rechnen? Ist das Programm korrekt? Wiederholung: Algorithmusbegriff Vom Algorithmus zum Programm 1. Was ist ein Algorithmus? 2. Was ist ein Programm? 3. Wie wird ein Algorithmus aufgeschrieben? 4. Mit welchem Aufwand löst der Algorithmus das Problem? 5. Löst der Algorithmus das Problem? 6. Gibt es einen Algorithmus für das Problem? 7. Vom kleinen zum großen Programm 8. Weitere Aspekte

Kann ein Computer rechnen? Ein Java-Beispiel public static void main(string[] args) { System.out.println(1*1); System.out.println(12*12); System.out.println(123*123); System.out.println(1234*1234); System.out.println(12345*12345); System.out.println(123456*123456); } Ausgabe: 1 144 15129 1522756 152399025 31. März 10. April 2015 Werner Struckmann Seite 3 / 35

Kann ein Computer rechnen? Ein Java-Beispiel public static void main(string[] args) { System.out.println(1*1); System.out.println(12*12); System.out.println(123*123); System.out.println(1234*1234); System.out.println(12345*12345); System.out.println(123456*123456); } Ausgabe: 1 144 15129 1522756 152399025-1938485248 Diese Ausgabe ist offensichtlich falsch! 31. März 10. April 2015 Werner Struckmann Seite 3 / 35

Kann ein Computer rechnen? Ein zweites Java-Beispiel public static void main(string[] args) { int z = 256*256*256*128+2147483647; System.out.println(z*z); } 31. März 10. April 2015 Werner Struckmann Seite 4 / 35

Kann ein Computer rechnen? Ein zweites Java-Beispiel public static void main(string[] args) { int z = 256*256*256*128+2147483647; System.out.println(z*z); } Ausgabe: 1 Hat er sich schon wieder verrechnet? 31. März 10. April 2015 Werner Struckmann Seite 4 / 35

Kann ein Computer rechnen? Ein drittes Java-Beispiel double a = 1.0/3.0; double b = 10.0 + a - 10.0, c; if (a == b) c = 0; else c = 1/(a-b); System.out.printf("%20.5f%n",c); 31. März 10. April 2015 Werner Struckmann Seite 5 / 35

Kann ein Computer rechnen? Ein drittes Java-Beispiel double a = 1.0/3.0; double b = 10.0 + a - 10.0, c; if (a == b) c = 0; else c = 1/(a-b); System.out.printf("%20.5f%n",c); Ausgabe: -1637672591771089.50000-1 Billiarde 637 Billionen 672 Milliarden 591 Millionen 771 Tausend und 89,5 korrekter Wert: 0 31. März 10. April 2015 Werner Struckmann Seite 5 / 35

Kann ein Computer rechnen? Warum sich der Computer hier dreimal verrechnet hat, werden wir in Programmieren 1 lernen. 31. März 10. April 2015 Werner Struckmann Seite 6 / 35

Kann ein Computer rechnen? Ist das Programm korrekt? Wiederholung: Algorithmusbegriff Vom Algorithmus zum Programm 1. Was ist ein Algorithmus? 2. Was ist ein Programm? 3. Wie wird ein Algorithmus aufgeschrieben? 4. Mit welchem Aufwand löst der Algorithmus das Problem? 5. Löst der Algorithmus das Problem? 6. Gibt es einen Algorithmus für das Problem? 7. Vom kleinen zum großen Programm 8. Weitere Aspekte

Ist das Programm korrekt? In Jahre 1999 wurde durch die Fehlfunktion eines Seitenairbags ein Baby getötet. Die Untersuchungen ergaben einen Softwarefehler: Die Ausführungsreihenfolge zweier Anweisungen war vertauscht worden. Der Fehler trat nur in der Software eines speziellen Fahrzeugmodells auf. Es wurde vergessen, diese spezielle Software zu testen. 31. März 10. April 2015 Werner Struckmann Seite 8 / 35

Ist das Programm korrekt? Richtige Reihenfolge: airbag = ein; if (kindersitz == belegt) { airbag = aus; } Falsche Reihenfolge: if (kindersitz == belegt) { airbag = aus; } airbag = ein; 31. März 10. April 2015 Werner Struckmann Seite 9 / 35

Kann ein Computer rechnen? Ist das Programm korrekt? Wiederholung: Algorithmusbegriff Vom Algorithmus zum Programm 1. Was ist ein Algorithmus? 2. Was ist ein Programm? 3. Wie wird ein Algorithmus aufgeschrieben? 4. Mit welchem Aufwand löst der Algorithmus das Problem? 5. Löst der Algorithmus das Problem? 6. Gibt es einen Algorithmus für das Problem? 7. Vom kleinen zum großen Programm 8. Weitere Aspekte

Der intuitive Algorithmusbegriff Gegeben sei ein Problem. Eine Handlungsvorschrift, deren mechanisches Befolgen ohne Verständnis des Problems zur Lösung des Problems führt, wird Algorithmus genannt.

Der intuitive Algorithmusbegriff Gegeben sei ein Problem. Eine Handlungsvorschrift, deren mechanisches Befolgen ohne Verständnis des Problems zur Lösung des Problems führt, wird Algorithmus genannt. Etwas präziser: Ein Algorithmus ist eine wohldefinierte Rechenvorschrift, die eine (evtl. leere) Menge von Größen als Eingabe verwendet und eine Menge von Größen als Ausgabe erzeugt. Ein Algorithmus ist also eine Abfolge von Schritten, die die (evtl. leere) Eingabe in eine Ausgabe umwandelt.

Der intuitive Algorithmusbegriff Gegeben sei ein Problem. Eine Handlungsvorschrift, deren mechanisches Befolgen ohne Verständnis des Problems zur Lösung des Problems führt, wird Algorithmus genannt. Etwas präziser: Ein Algorithmus ist eine wohldefinierte Rechenvorschrift, die eine (evtl. leere) Menge von Größen als Eingabe verwendet und eine Menge von Größen als Ausgabe erzeugt. Ein Algorithmus ist also eine Abfolge von Schritten, die die (evtl. leere) Eingabe in eine Ausgabe umwandelt. Der Algorithmus muss durch einen endlichen Text in einer wohldefinierten Sprache beschrieben sein. Die Objekte der Aktionen müssen klar sein. Die Operationen müssen mechanisch ausführbar sein. Die Reihenfolge der Operationen muss evtl. feststehen.

Der intuitive Algorithmusbegriff Gegeben sei ein Problem. Eine Handlungsvorschrift, deren mechanisches Befolgen ohne Verständnis des Problems zur Lösung des Problems führt, wird Algorithmus genannt. Etwas präziser: Ein Algorithmus ist eine wohldefinierte Rechenvorschrift, die eine (evtl. leere) Menge von Größen als Eingabe verwendet und eine Menge von Größen als Ausgabe erzeugt. Ein Algorithmus ist also eine Abfolge von Schritten, die die (evtl. leere) Eingabe in eine Ausgabe umwandelt. Der Algorithmus muss durch einen endlichen Text in einer wohldefinierten Sprache beschrieben sein. Die Objekte der Aktionen müssen klar sein. Die Operationen müssen mechanisch ausführbar sein. Die Reihenfolge der Operationen muss evtl. feststehen. Ein Problem, für dessen Lösung ein Algorithmus existiert, heißt berechenbar. In der Definition wird nicht gefordert, dass die Abfolge der Rechenschritte stets terminiert (Halteproblem).

Beispiele Zerlegung handwerklicher Arbeiten in einzelne Schritte, Kochrezepte, Verfahren zur schriftlichen Multiplikation, Algorithmus zur Bestimmung des größten gemeinsamen Teilers zweier natürlicher Zahlen. Zwei dieser Beispiele sehen wir uns jetzt an. 31. März 10. April 2015 Werner Struckmann Seite 12 / 35

Beispiel: Multiplikation zweier Zahlen 12 23 =?

Beispiel: Multiplikation zweier Zahlen 12 23 =? 2 7 6

Beispiel: Multiplikation zweier Zahlen 12 23 =? 7 2 12 23 6 46 3 92 * 1 184 * 276 6

Beispiel: Multiplikation zweier Zahlen 12 23 =? 7 2 12 23 6 46 3 92 * 1 184 * 276 6 1 2 2 3 2 4 3 6 2 7 6

Beispiel: Multiplikation zweier Zahlen 12 23 =? 7 2 12 23 6 46 3 92 * 1 184 * 276 6 1 2 2 3 2 4 3 6 2 7 6 12 23 = (1 10+2) (2 10+3) = 1 2 100+(1 3+2 2) 10+2 3 = 2 100+7 10+6 = 276

Beispiel: Größter gemeinsamer Teiler Es sollen zwei Brüche addiert werden: Bestimme den Hauptnenner. Erweitere die Brüche. Addiere die Zähler. 1 4 + 23 52 = 13 52 + 23 52 = 36 52 = 4 9 4 13 = 9 13 Bestimme den ggt von Zähler und Nenner. Kürze den Bruch. Wie berechnet man den ggt? 31. März 10. April 2015 Werner Struckmann Seite 14 / 35

1. Algorithmus: Teilermengen a = 52, b = 36: T a = T 52 = {1, 2, 4, 13, 26, 52} T b = T 36 = {1, 2, 3, 4, 6, 12, 18, 36} T a T b = T 52 T 36 = {1, 2, 4} ggt(52, 36) = max(t a T b ) = max{1, 2, 4} = 4 Bestimme die Teilermengen T a und T b. Bestimme die Durchschnittsmenge T a T b. Bestimme das Maximum von T a T b. 31. März 10. April 2015 Werner Struckmann Seite 15 / 35

2. Algorithmus: Primfaktorzerlegung a = 52, b = 36: 52 = 2 2 3 0 5 0 7 0 11 0 13 1 36 = 2 2 3 2 5 0 7 0 11 0 13 0 ggt(52, 36) = 2 2 3 0 5 0 7 0 11 0 13 0 = 4 Bestimme die Primfaktorzerlegungen von a und b. Bestimme die Primfaktorzerlegung des ggts: Bilde dazu das jeweilige Minimum der Exponenten von a und b. 31. März 10. April 2015 Werner Struckmann Seite 16 / 35

3. Algorithmus: Verfahren von Euklid (ca. 300 v. Chr.) a = 52, b = 36: Berechne r = a mod b. Setze a = b und b = r. Wiederhole diese Schritte bis b = 0 ist. a ist das Ergebnis. r a b 52 36 16 36 16 4 16 4 0 4 0 31. März 10. April 2015 Werner Struckmann Seite 17 / 35

Fragestellungen für Algorithmen: Korrektheit und Komplexität Partielle Korrektheit: Falls der Algorithmus terminiert wird die Spezifikation erfüllt. Totale Korrektheit: Der Algorithmus terminiert und erfüllt die Spezifikation. Komplexität: Speicherplatz des Algorithmus Laufzeit des Algorithmus 31. März 10. April 2015 Werner Struckmann Seite 18 / 35

Programm und Programmiersprache Ein Programm ist die Formulierung eines Algorithmus und seiner Datenbereiche in einer Programmiersprache. Eine Programmiersprache erlaubt es, Algorithmen präzise zu beschreiben. Insbesondere legt eine Programmiersprache die elementaren Operationen, die Möglichkeiten zu ihrer Kombination und die zulässigen Datenbereiche eindeutig fest. Unter programmieren versteht man den Vorgang des Erstellens eines Programms. Die Programmierausbildung der ersten Semester erfolgt in der Sprache Java. Später werden weitere Sprachen gelehrt. 31. März 10. April 2015 Werner Struckmann Seite 19 / 35

Beispiel: Der euklidische Algorithmus in fünf Programmiersprachen Java (objektorientierte Sprache) s t a t i c i n t ggt ( i n t a, i n t b ) { i n t r ; while ( b!= 0) { r = a % b ; a = b ; b = r ; } return a ; }

Beispiel: Der euklidische Algorithmus in fünf Programmiersprachen Java (objektorientierte Sprache) s t a t i c i n t ggt ( i n t a, i n t b ) { i n t r ; while ( b!= 0) { r = a % b ; a = b ; b = r ; } return a ; } Prolog (logische Sprache) ggt (A, 0,A ). ggt (A, B, Z ) : U is A mod B, ggt (B,U, Z ).

Beispiel: Der euklidische Algorithmus in fünf Programmiersprachen Java (objektorientierte Sprache) s t a t i c i n t ggt ( i n t a, i n t b ) { i n t r ; while ( b!= 0) { r = a % b ; a = b ; b = r ; } return a ; } Prolog (logische Sprache) ggt (A, 0,A ). ggt (A, B, Z ) : U is A mod B, ggt (B,U, Z ). Haskell (funktionale Sprache) ggt : : Integer > Integer > Integer ggt a b b == 0 = a otherwise = ggt b ( a mod b )

Beispiel: Der euklidische Algorithmus in fünf Programmiersprachen Java (objektorientierte Sprache) s t a t i c i n t ggt ( i n t a, i n t b ) { i n t r ; while ( b!= 0) { r = a % b ; a = b ; b = r ; } return a ; } C-Shell (Skriptsprache) set a =... ; set b =... while ( $b!= 0) @ r = $a % $b set a = $b set b = $r end echo $a Prolog (logische Sprache) ggt (A, 0,A ). ggt (A, B, Z ) : U is A mod B, ggt (B,U, Z ). Haskell (funktionale Sprache) ggt : : Integer > Integer > Integer ggt a b b == 0 = a otherwise = ggt b ( a mod b )

Beispiel: Der euklidische Algorithmus in fünf Programmiersprachen Java (objektorientierte Sprache) s t a t i c i n t ggt ( i n t a, i n t b ) { i n t r ; while ( b!= 0) { r = a % b ; a = b ; b = r ; } return a ; } Prolog (logische Sprache) ggt (A, 0,A ). ggt (A, B, Z ) : U is A mod B, ggt (B,U, Z ). Haskell (funktionale Sprache) ggt : : Integer > Integer > Integer ggt a b b == 0 = a otherwise = ggt b ( a mod b ) C-Shell (Skriptsprache) set a =... ; set b =... while ( $b!= 0) @ r = $a % $b set a = $b set b = $r end echo $a C (imperative Sprache) i n t ggt ( i n t a, i n t b ) { i n t r ; while ( b!= 0) { r = a % b ; a = b ; b = r ; } return a ; }

Beispiel: Lineare diophantische Gleichungen Definition Eine lineare diophantische Gleichung mit zwei Unbekannten x und y ist eine Gleichung der Form ax + by = c (*) für gegebene ganze Zahlen a, b, c. Gesucht werden ganze Zahlen x und y, die die Gleichung erfüllen.

Beispiel: Lineare diophantische Gleichungen Definition Eine lineare diophantische Gleichung mit zwei Unbekannten x und y ist eine Gleichung der Form ax + by = c (*) für gegebene ganze Zahlen a, b, c. Gesucht werden ganze Zahlen x und y, die die Gleichung erfüllen. Satz Die Gleichung (*) besitzt genau dann eine Lösung, wenn ggt(a, b) c gilt.

Beispiel: Lineare diophantische Gleichungen Definition Eine lineare diophantische Gleichung mit zwei Unbekannten x und y ist eine Gleichung der Form ax + by = c (*) für gegebene ganze Zahlen a, b, c. Gesucht werden ganze Zahlen x und y, die die Gleichung erfüllen. Satz Die Gleichung (*) besitzt genau dann eine Lösung, wenn ggt(a, b) c gilt. Beispiel Zum Beispiel besitzt die Gleichung 36x + 52y = 24 eine ganzzahlige Lösung, weil ggt(36, 52) = 4 ein Teiler von 24 ist: 36 18 52 12 = 24. Mithilfe eines erweiterten euklidischen Algorithmus können Lösungen von linearen diophantischen Gleichungen bestimmt werden, falls sie existieren.

Beispiel: Allgemeine diophantische Gleichungen Definition Eine allgemeine diophantische Gleichung mit den Unbekannten x 1, x 2,..., x n ist eine Gleichung der Form p(x 1, x 2,..., x n ) = 0, wobei p ein ganzzahliges Polynom mit n Variablen ist.

Beispiel: Allgemeine diophantische Gleichungen Definition Eine allgemeine diophantische Gleichung mit den Unbekannten x 1, x 2,..., x n ist eine Gleichung der Form p(x 1, x 2,..., x n ) = 0, wobei p ein ganzzahliges Polynom mit n Variablen ist. Problem Gibt es einen Algorithmus, der entscheiden kann, ob eine allgemeine diophantische Gleichung ganzzahlige Lösungen besitzt? Dies ist das berühmte zehnte Hilbertsche Problem aus dem Jahr 1900.

Beispiel: Allgemeine diophantische Gleichungen Definition Eine allgemeine diophantische Gleichung mit den Unbekannten x 1, x 2,..., x n ist eine Gleichung der Form p(x 1, x 2,..., x n ) = 0, wobei p ein ganzzahliges Polynom mit n Variablen ist. Problem Gibt es einen Algorithmus, der entscheiden kann, ob eine allgemeine diophantische Gleichung ganzzahlige Lösungen besitzt? Dies ist das berühmte zehnte Hilbertsche Problem aus dem Jahr 1900. Fakt Solch einen Algorithmus gibt es nicht. Dies wurde von Yuri Matijasevič im Jahre 1970 bewiesen.

Beispiel: Allgemeine diophantische Gleichungen Definition Eine allgemeine diophantische Gleichung mit den Unbekannten x 1, x 2,..., x n ist eine Gleichung der Form p(x 1, x 2,..., x n ) = 0, wobei p ein ganzzahliges Polynom mit n Variablen ist. Problem Gibt es einen Algorithmus, der entscheiden kann, ob eine allgemeine diophantische Gleichung ganzzahlige Lösungen besitzt? Dies ist das berühmte zehnte Hilbertsche Problem aus dem Jahr 1900. Fakt Solch einen Algorithmus gibt es nicht. Dies wurde von Yuri Matijasevič im Jahre 1970 bewiesen. Folgerung Es gibt Probleme, die mit keinem Computer gelöst werden können! Zum Beispiel das Halteproblem oder das zehnte Hilbertsche Problem.

Der intuitive Algorithmusbegriff (Wiederholung) Ein Algorithmus ist eine Berechnungsvorschrift. Die Aufgabe, die der Algorithmus lösen soll, wird durch eine Spezifikation festgelegt. Die Berechnungsvorschrift wird durch einen endlichen Text kodiert. Sie beschreibt die auszuführenden Berechnungen hinreichend präzise. Die Berechnungen sind aus elementaren Operationen aufgebaut und besitzen Aus- und evtl. Eingabewerte. Hierbei handelt es ich um eine sog. intuitive Definition. In der Informatik wird auch eine formale Definition benötigt, zum Beispiel zum Nachweis, dass für ein bestimmtes Problem kein Algorithmus existiert.»intuitiv heißt nicht erlernt.«(bruce M. Hood) 31. März 10. April 2015 Werner Struckmann Seite 23 / 35

Kann ein Computer rechnen? Ist das Programm korrekt? Wiederholung: Algorithmusbegriff Vom Algorithmus zum Programm 1. Was ist ein Algorithmus? 2. Was ist ein Programm? 3. Wie wird ein Algorithmus aufgeschrieben? 4. Mit welchem Aufwand löst der Algorithmus das Problem? 5. Löst der Algorithmus das Problem? 6. Gibt es einen Algorithmus für das Problem? 7. Vom kleinen zum großen Programm 8. Weitere Aspekte

Was ist ein Algorithmus? Wichtige Aspekte s. oben: intuitiver Algorithmusbegriff intuitiv heißt nicht erlernt (Bruce M. Hood) Spezifikation Terminierung primitive und komplexe Datentypen, abstrakte Datentypen Varianten des Algorithmusbegriffs: deterministisch, determiniert, nichtdeterministisch, randomisiert, parallel, verteilt,... 31. März 10. April 2015 Werner Struckmann Seite 25 / 35

Was ist ein Programm? Umsetzung eines Algorithmus in eine Sprache, die ein Computer versteht. Sprachen: Maschinensprachen maschinenorientierte Sprachen (Assemblersprachen) problemorientierte Sprachen Verarbeitung von Programmen: Compiler Interpreter Mischverfahren Bestandteile einer Programmiersprache: Lexik Syntax Semantik Pragmatik einer Programmiersprache 31. März 10. April 2015 Werner Struckmann Seite 26 / 35

Java-Mischverfahren Java-Quellprogramm javac Java-Bytecode java java JVM: Windows JVM: Linux 31. März 10. April 2015 Werner Struckmann Seite 27 / 35

Wie wird ein Algorithmus aufgeschrieben? Paradigmen: Imperatives Paradigma: Algol, Pascal, C Objektorientiertes Paradigma: Smalltalk, Eiffel Funktionales Paradigma: ML, Lisp, Haskell Logisches Paradigma: Prolog Hybride Paradigmen: Imperativ und objektorientiert: Java, C++ Java 8 geht in die Richtung weiteres Paradigma: funktional Imperativ und funktional: Scheme Imperativ, objektorientiert und funktional: Scala Deklaratives vs. prozedurales Paradigma 31. März 10. April 2015 Werner Struckmann Seite 28 / 35

Mit welchem Aufwand löst der Algorithmus das Problem? Komplexität Laufzeitkomplexität, Speicherkomplexität best case, average case, worst case Komplexität Es gibt weitere Komplexitätsfragen! O-Notation, Landau-Symbole Θ(g) = {f : N R c 1 > 0, c 2 > 0, n 0 > 0 n n 0. 0 c 1 g(n) f (n) c 2 g(n)} O(g) = {f : N R c > 0, n 0 > 0 n n 0. 0 f (n) cg(n)} Ω(g) = {f : N R c > 0, n 0 > 0 n n 0. 0 cg(n) f (n)} o(g) = {f : N R c > 0 n 0 > 0 n n 0. 0 f (n) < cg(n)} ω(g) = {f : N R c > 0 n 0 > 0 n n 0. 0 cg(n) < f (n)} 31. März 10. April 2015 Werner Struckmann Seite 29 / 35

Löst der Algorithmus das Problem? Spezifikation Korrektheit: partielle Korrektheit, totale Korrektheit Verifikation: Nachweis der Korrektheit Validation: Als Validierung bezeichnet man den Test eines Softwaresystems unter Bedingungen, wie sie im späteren Einsatz herrschen werden. Auch wenn das zu erstellende Programm verifiziert wurde, kann auf eine Validierung nicht verzichtet werden, da ein mathematischer Nachweis der Korrektheit beispielsweise nichts über das Laufzeitverhalten des Programms oder die Auslastung von Ressourcen aussagt. Gibt es einen Algorithmus, der alle Algorithmen verifizieren kann? Der Satz von RICE gibt viele konkrete Probleme an, die algorithmisch nicht behandelt werden können. 31. März 10. April 2015 Werner Struckmann Seite 30 / 35

Gibt es einen Algorithmus für das Problem? Berechenbarkeit, Entscheidbarkeit Formale Algorithmendefinition Turing-Maschine Markov-Algorithmus λ-kalkül Primitiv rekursive Funktionen... Diese Modelle sind alle äquivalent. Beispiele: Halteproblem, diophantische Gleichungen,... Abzählbar viele Probleme sind berechenbar. Überabzählbar viele Probleme sind nicht berechenbar. D. h., so gut wie kein Problem kann ein Computer lösen. 31. März 10. April 2015 Werner Struckmann Seite 31 / 35

Church sche These ALONZO CHURCH stellte 1936 die folgende These auf, die bis heute nicht widerlegt wurde: Church sche These: Der intuitive Algorithmenbegriff wird durch das Modell der Turing-Maschine adäquat definiert. Die Church sche These kann natürlich nicht bewiesen werden, da sie den intuitiven Algorithmenbegriff verwendet. Über intuitive Dinge können keine formalen Beweise geführt werden. Es wurde gezeigt, dass alle oben erwähnten formalen Algorithmusdefinitionen äquivalent sind. Daher kann in der Church schen These die Turing-Maschine durch andere Definitionen des Algorithmus ersetzt werden. 31. März 10. April 2015 Werner Struckmann Seite 32 / 35

Vom kleinen zum großen Programm Software Engineering Manifest (2006): Das Software Engineering zielt auf die ingenieurmäßige Entwicklung, Wartung, Anpassung und Weiterentwicklung großer Softwaresysteme unter Verwendung bewährter systematischer Vorgehensweisen, Prinzipien, Methoden und Werkzeuge. Analysephase Entwurfsphase Implementierungsphase Testphase Betriebs- und Wartungsphase 31. März 10. April 2015 Werner Struckmann Seite 33 / 35

Weitere Aspekte (Beispiele) Standardalgorithmen Datenstrukturen, Typsysteme, abstrakte Datentypen Prinzipien zum Entwurf von Algorithmen Divide-and-Conquer-Algorithmen Backtracking-Algorithmen Greedy-Algorithmen Dynamische Algorithmen,... Variationen des Algorithmusbegriffs Randomisierte Algorithmen Nichtdeterministische Algorithmen Parallele, verteilte Algorithmen,... Sprachen der Informatik GPL (General purpose languages): Programmiersprachen DSL (Domain specific languages): Datenbanksprachen, HTML, XML,... 31. März 10. April 2015 Werner Struckmann Seite 34 / 35

Herzlichen Dank für Ihre Aufmerksamkeit! Viel Erfolg im Studium. 31. März 10. April 2015 Werner Struckmann Seite 35 / 35