Einführung in die Informatik 1



Ähnliche Dokumente
Abstrakte Algorithmen und Sprachkonzepte

Abstrakte Algorithmen und Sprachkonzepte

Kapitel 5: Abstrakte Algorithmen und Sprachkonzepte. Elementare Schritte

Programm heute. Algorithmen und Datenstrukturen (für ET/IT) Definition Algorithmus. Wie beschreibt man Algorithmen?

Algorithmen und Datenstrukturen (für ET/IT)

Algorithmen und algorithmische Sprachkonzepte

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

Algorithmenkonstruktion

Übung zu Algorithmen und Datenstrukturen (für ET/IT)

Organisatorisches. Algorithmen und Datenstrukturen (für ET/IT) Programm heute. Tutorübungen

Übung zu Algorithmen und Datenstrukturen (für ET/IT)

Einführung in die Informatik 2

Einführung in die Objektorientierte Programmierung Vorlesung 2: Mikroskopisches und Makroskopisches Computational Thinking.

Kapitel 1: Informationsverarbeitung durch Programme

2.4 Schleifen. Schleifen unterscheiden sich hinsichtlich des Zeitpunktes der Prüfung der Abbruchbedingung:

2. Algorithmenbegriff

Einführung in die Informatik I (autip)

5.3 Korrektheit und Verifikation

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

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

5.3 Korrektheit und Verifikation

Kapitel 1: Informationsverarbeitung durch Programme

Programmiertechnik Übungen zu Klassen & -methoden

Übersicht. 3.1 Datendarstellung durch Zeichenreihen. 3.2 Syntaxdefinitionen. 3.3 Algorithmen

Einführung in die Informatik 2

Algorithmen und Datenstrukturen SS Übungsblatt 1: Grundlagen

Prof. Dr. Oliver Haase Karl Martin Kern Achim Bitzer. Programmiertechnik Übungen zu Klassen und -methoden

n 1. Der Begriff Informatik n 2. Syntax und Semantik von Programmiersprachen - 1 -

Learning Object-Oriented Programming. Algorithmen. Algorithmusbegriff. Klärung der Herkunft des Begriffs Formale Definition von Algorithmus

Algorithmen und Datenstrukturen

5. Algorithmen. K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16

1 Algorithmische Grundlagen

1 Vom Problem zum Program

1 Vom Problem zum Programm

Algorithmen und Datenstrukturen

Definition: (Kette, noethersche Ordnung) Definition: (Kette, noethersche Ordnung) (2) Lemma: Terminierungskriterium:

Definition: (Kette, noethersche Ordnung)

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

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

Stack. Seniorenseminar Michael Pohlig

Einführung in die Informatik 2

Abschnitt 11: Korrektheit von imperativen Programmen

Inhalt Kapitel 2: Rekursion

1. Der Begriff Informatik 2. Syntax und Semantik von Programmiersprachen - 1 -

1. Der Begriff Informatik 2. Syntax und Semantik von Programmiersprachen - 1 -

Stabilitätsabschätzungen Vorlesung vom

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

1 Bedingte Anweisungen. 2 Vergleiche und logische Operatoren. 3 Fallunterscheidungen. 4 Zeichen und Zeichenketten. 5 Schleifen.

Korrektheit und Hoare-Kalkül für Imperative Programme

Kapitel 1: Informationsverarbeitung durch Programme

Komplexität von Algorithmen

Einführung in die Programmierung für NF. Übung

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

Einführung in die Programmierung für NF. Algorithmen, Datentypen und Syntax

9. Rekursion. 1 falls n 1 n (n 1)!, andernfalls. Experiment: Die Türme von Hanoi. Links Mitte Rechts. Mathematische Rekursion

Algorithmen als systematische Vorgehensweisen zur Lösung eines formal definierten Problems

Einführung in die Informatik 2

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

2. Algorithmische Methoden 2.1 Rekursion. 18. April 2017

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

Algorithmen als systematische Vorgehensweisen zur Lösung eines formal definierten Problems

Programmieren lernen mit Groovy Rekursion Rekursion und Iteration

Einführung in die Programmierung

Kapitel 1: Einleitung. Gliederung. Zum Begriff Informatik Zum Begriff Algorithmus Zum Begriff Programmieren

Informatik 1. Sommersemester Helmut Seidl. Institut für Informatik TU München

Einführung in die Programmierung

EINI LW. Einführung in die Informatik für Naturwissenschaftler und Ingenieure. Vorlesung 2 SWS WS 11/12

Programmieren 1 C Überblick

1. Einführung. Was ist ein Algorithmus (eine Datenstruktur)? Welche Probleme kann man damit lösen? Warum betrachten wir (effiziente) Algorithmen?

Folgen und Funktionen in der Mathematik

Einführung in die Programmierung Wintersemester 2016/17

1.2 LOOP-, WHILE- und GOTO-Berechenbarkeit

Relationen und DAGs, starker Zusammenhang

Grundlagen der Informatik I (Studiengang Medieninformatik)

Algorithmen und Datenstrukturen (für ET/IT)

3 KONTROLLSTRUKTUREN ALLGEMEINES

Mathematische Rekursion

Einführung in die Informatik 2

Martin Unold INFORMATIK. Geoinformatik und Vermessung

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

Theoretische Informatik

Algorithmentheorie Randomisierung

n 1. Erste Schritte n 2. Einfache Datentypen n 3. Anweisungen und Kontrollstrukturen n 4. Verifikation n 5. Reihungen (Arrays)

Einführung in die Informatik 1

Berechenbarkeit und Komplexität Vorlesung 11

Grundlagen der Programmierung (Vorlesung 24)

Theoretische Informatik SS 03 Übung 3

Elementare Konzepte von

Transkript:

Einführung in die Informatik 1 Algorithmen und algorithmische Sprachkonzepte Sven Kosub AG Algorithmik/Theorie komplexer Systeme Universität Konstanz E 202 Sven.Kosub@uni-konstanz.de Sprechstunde: Freitag, 12:30-14:00 Uhr, o.n.v. Wintersemester 2008/2009 Sven Kosub (Algorithmik/TKS) EI1: Algorithmen 1 / 25

Informatik Informatik = Wissenschaft von der systematischen Verarbeitung von Informationen, insbesondere...... der automatischen Verarbeitung mit Hilfe von Rechenanlagen = Computerwissenschaft zentrale Gegenstände der Informatik: Information Algorithmen ( Systematik der Verarbeitung) Computer ( Rechenanlagen) heute Sven Kosub (Algorithmik/TKS) EI1: Algorithmen 2 / 25

Algorithmus: Begriffsdefinition Algorithmus: präzise festgelegtes Verfahren zur Lösung von Problemen (bzw. einer Klasse von Problemen), das aus endlich vielen, effektiv ausführbaren elementaren Lösungsschritten besteht Problemklasse ist Menge von Eingabe-Ausgabe-Paaren Algorithmen müssen folgenden Bedingungen genügen: Spezifikation Durchführbarkeit Korrektheit Sven Kosub (Algorithmik/TKS) EI1: Algorithmen 3 / 25

Algorithmus: Spezifikation Eingabespezifikation: Es muss genau spezifiziert sein, welche Eingabegrößen erforderlich sind und welchen Anforderungen diese Größen genügen müssen, damit das Verfahren funktioniert Ausgabespezifikation: Es muss genau spezifiziert sein, welche Ausgabegrößen (Resultate) mit welchen Eigenschaften berechnet werden Sven Kosub (Algorithmik/TKS) EI1: Algorithmen 4 / 25

Algorithmus: Durchführbarkeit endliche Beschreibung: Verfahren muss in einem endlichen Text vollständig beschrieben sein Effektivität: Jeder Schritt des Verfahrens muss effektiv (d.h. tatsächlich) mechanisch ausführbar sein Beachte: Effektivität Effizienz Determiniertheit: Verfahrensablauf ist zu jedem Zeitpunkt fest vorgeschrieben Sven Kosub (Algorithmik/TKS) EI1: Algorithmen 5 / 25

Algorithmus: Korrektheit partielle Korrektheit: jedes berechnete Ergebnis genügt der Ausgabespezifikation, sofern die Eingaben der Eingabespezifikation genügen Terminierung: Algorithmus hält nach endlich vielen Schritten mit einem Ergebnis an, sofern die Eingabe der Eingabespezifikation genügt Sven Kosub (Algorithmik/TKS) EI1: Algorithmen 6 / 25

Programme und Programmiersprachen Computer führen nur in einer formalen Sprache beschriebene Algorithmen aus Programmiersprache = formale Sprache für einen Computer Programm = Beschreibung des Algorithmus in Programmiersprache Programm repräsentiert nur einen Algorithmus Algorithmus wird durch viele verschiedene (i.a. unendlich viele) Programme repräsentiert Programmierung setzt Algorithmenentwurf voraus: Kein Programm ohne Algorithmus! Sven Kosub (Algorithmik/TKS) EI1: Algorithmen 7 / 25

Problem-Algorithmus-Programm Sven Kosub (Algorithmik/TKS) EI1: Algorithmen 8 / 25

Algorithmus: Aufbau Form der Algorithmenbeschreibung: Alltagssprache konkrete Programmiersprache Pseudocode Elemente der Algorithmenbeschreibung: Folgen einzelner Bearbeitungsschritte Schrittwiederholung durch Iteration: Rückverweise in der Folge wie z.b. Weiter mit Schritt (2) Schrittwiederholung durch Rekursion: Wiederaufruf des Algorithmus mit einfacherer Problemstellung Sprünge (bedingt/unbedingt) Sven Kosub (Algorithmik/TKS) EI1: Algorithmen 9 / 25

Algorithmus: Aufbau Grundschema des Algorithmenaufbaus: Name des Algorithmus und Liste von Parametern Spezifikation der Eingaben Spezifikation der Ausgaben 1 Vorbereitung: Einführung von Hilfsgrößen etc. 2 Trivialfallbehandlung: Prüfe, ob ein einfacher Fall vorliegt; falls ja, dann Beendigung mit Ergebnis 3 Arbeit (Problemreduktion, Ergebnisaufbau): Reduziere Problemstellung X auf eine einfachere Form X mit X > X bzgl. einer (wohlfundierten) Ordnung > und baue entsprechend der Reduktion einen Teil des Ergebnis auf 4 Rekursion bzw. Iteration: Rufe zur Weiterverarbeitung den Algorithmus mit dem reduzierten X erneut auf (Rekursion) bzw. fahre mit X statt X bei Schritt 2 fort (Iteration) Sven Kosub (Algorithmik/TKS) EI1: Algorithmen 10 / 25

Algorithmus: Beschreibungsformen Form der Algorithmenbeschreibung (verfeinert): elementar-iterativ Flussdiagramme strukturiert-iterativ rekursiv Pseudocode Beschreibe ein Verfahren zur Berechnung des Divisionrestes r bei Division von a durch b, d.h. finde 0 r < b mit a = t b + r für geeignetes t Sven Kosub (Algorithmik/TKS) EI1: Algorithmen 11 / 25

Algorithmus: Beschreibungsformen elementar-iterative Beschreibungsform: Iterationen werden durch Sprünge realisiert Algorithmus zur Berechnung von mod(a, b): mod(a, b) // Anforderungen (Eingabe): a, b Z, a 0, b > 0 // Zusicherung (Ausgabe): Resultat ist Divisionsrest von a b 1 Kopiere a nach r 2 Prüfe, ob r < b gilt; falls ja, dann gib Resultat r aus 3 Subtrahiere b von r und speichere Resultat wieder in r 4 Weiter mit Schritt 2 Sven Kosub (Algorithmik/TKS) EI1: Algorithmen 12 / 25

Flussdiagramme: graphische Darstellung des Steuerungsverlaufs Komponenten von Flussdiagrammen: Sven Kosub (Algorithmik/TKS) EI1: Algorithmen 13 / 25

algorithmisches Grundschema als Flussdiagramm Sven Kosub (Algorithmik/TKS) EI1: Algorithmen 14 / 25

Flussdiagramm für den Algorithmus mod(a, b) Kontrollfluss für mod(7,3) START a = 7, b = 3 r = 7 7 3? TRUE r = 7 3 4 3? TRUE r = 4 3 1 3? FALSE RETURN(1) HALT Sven Kosub (Algorithmik/TKS) EI1: Algorithmen 15 / 25

strukturiert-iterative Beschreibungsform: Sprünge dürfen nur ineinander geschachtelt sein, d.h. Schleifen überkreuzen sich nicht strukturiert-iterativ elementar-iterativ Spaghetti-Code Sven Kosub (Algorithmik/TKS) EI1: Algorithmen 16 / 25

Sprungbehandlung bei strukturiert-iterativer Beschreibungsform: keine unbedingten Sprünge (kein goto...) Sprünge werden nur implizit angegeben Sprünge Teil höhere Iterationsstrukturen Fallunterscheidung (if... then... else...) Schleifen (while... do...) Java erlaubt strukturiert-iterative Beschreibung (kein goto in Java!) Sven Kosub (Algorithmik/TKS) EI1: Algorithmen 17 / 25

Fallunterscheidung in Java: syntaktisch: semantisch: if (Bedingung) { Anweisungssequenz 1 } else { Anweisungssequenz 2 } Ist Bedingung erfüllt (true), dann führe Anweisungssequenz 1 aus, sonst führe Anweisungssequenz 2 aus Sven Kosub (Algorithmik/TKS) EI1: Algorithmen 18 / 25

Schleifen in Java: syntaktisch: semantisch: while (Bedingung) { Anweisungssequenz } Bei Eintritt in die while-schleife wird Bedingung überprüft Ist Bedingung erfüllt (true), führe die Anweisungssequenz aus und gehe zum Test der Bedingung zurück Ist Bedingung nicht erfüllt (false), verlasse die while-schleife ohne Ausführung der Anweisungssequenz Beachte: while-schleife entspricht der Konstruktion (falls goto vorhanden) M: if (Bedingung ) { Anweisungssequenz; goto M; } Sven Kosub (Algorithmik/TKS) EI1: Algorithmen 19 / 25

strukturiert-iterativer Algorithmus für die mod-funktion (in Java): int mod(int a, int b) { /* Anforderungen (Eingabe): a: a>=0; b: b>0 */ /* Zusicherung (Ausgabe): r: a=t*b + r und 0<r<=b */ /* 1. Vereinbarungen */ int r; /* 2. Initialisierungen */ r=a; /* 3. Iterationsbeginn */ while (r>=b) { /* 4. Problemreduktion */ r=r-b; /* 5. Iterationsende */ } /* 6. Ergebnisrückgabe */ return(r); } Sven Kosub (Algorithmik/TKS) EI1: Algorithmen 20 / 25

rekursive Beschreibungsform: 1 Basis: Gib eine direkte Lösung für den Fall an, dass Eingabe X einfach ist 2 Rekursionsschritt: Führe Lösung für Problem P(X ) für eine komplexe Eingabe X durch einen Schritt der Problemreduktion auf die Lösung des gleichen Problems P(X ) für eine einfachere Eingabe X zurück Dabei muss X > X für eine wohlfundierte Ordnung > gelten rekursive Definition der mod-funktion (für natürliche Zahlen a und b > 0): { a mod(a, b) = def mod(a b, b) falls a < b falls a b Sven Kosub (Algorithmik/TKS) EI1: Algorithmen 21 / 25

rekursiver Algorithmus für die mod-funktion (in Java): int mod(int a, int b) { } /* Anforderungen (Eingabe): a: a>=0; b: b>0 */ /* Zusicherung (Ausgabe): r: a=t*b + r und 0<r<=b */ /* 1. Vereinbarungen */ int r; /* 2. Initialisierungen */ r=a; /* 3. Einfacher Fall */ if (r<b) { return(r); } /* 4. Problemreduktion */ r=r-b; /* 5. Rekursionsschritt */ return(mod(r,b)); Sven Kosub (Algorithmik/TKS) EI1: Algorithmen 22 / 25

Pseudocode: Mischform aus Syntax höherer Programmiersprachen und natürlicher Sprache typische Elemente von Programmiersprachen: if..., while... Trade-off zwischen Anschaulichkeit (natürliche Sprache) und Formalisierung (Programmiersprache) if (keine Elemente mehr zu sortieren) { return(fertig) } Sven Kosub (Algorithmik/TKS) EI1: Algorithmen 23 / 25

Euklidischer Algorithmus: Berechnung des ggt zweier natürlicher Zahlen, z.b. ggt(36, 120) = 12, da 36 = 2 2 3 2 und 120 = 2 3 3 5 rekursive (mathematische) Definition a falls b = 0 ggt(a, b) = def ggt(b, a) falls b > a ggt(b, mod(a, b)) sonst ergibt für ggt(36,120): ggt(36, 120) = ggt(120, 36) ( b > a ) = ggt(36, mod(120, 36)) = ggt(36, 12) ( sonst ) = ggt(12, mod(36, 12)) = ggt(12, 0) ( sonst ) = 12 ( b = 0 ) Sven Kosub (Algorithmik/TKS) EI1: Algorithmen 24 / 25

Euklidischer Algorithmus (Forts.): rekursiver Algorithmus in Pseudo-Code: Algorithmus: Eingabe: Ausgabe: ggt(a,b) natürliche Zahlen a und b größter gemeinsamer Teiler von a und b (1) if (b==0) { return (a) }; /* Trivialfall (2) if (b>a) { return (ggt(b,a)}; /* einfacher Fall (3) return (ggt(b,mod(a,b))); /* Reduktion und Rekursion Warum terminiert der Euklidische Algorithmus? Eingaben sind Paare (a, b) mit a, b N (a, b) > (a, b ) def a + b > a + b oder a + b = a + b a < a Rekursionsaufrufe bei (a, b) erfolgen mit (a, b ), sodass (a, b) > (a, b ) (36, 120) > (120, 36) > (36, 12) > (12, 0) für jedes (a, b) gibt es nur endlich viele (a, b ) mit (a, b ) < (a, b) Sven Kosub (Algorithmik/TKS) EI1: Algorithmen 25 / 25