3. Entwurf von Algorithmen 3a - 1

Ähnliche Dokumente
Einführung in die Informatik I (autip)

Programmierkurs II. C und Assembler

Praktische Informatik I

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

Coma I. Einleitung. Computer und Algorithmen. Programmiersprachen. Algorithmen versus Programmiersprachen. Literaturhinweise

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

Einführung in die Informatik 1

3.4 Ablaufsteuerung (Kontrollstrukturen)

Funktionale Programmiersprachen

Algorithmen und Datenstrukturen

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

1 Vom Problem zum Programm

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

Programmieren Formulierung eines Algorithmus in einer Programmiersprache

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

Algorithmus: Kochrezept

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

2. Algorithmenbegriff

Grundlagen der Informatik I Einführung

Theoretische Informatik: Berechenbarkeit und Formale Sprachen

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

Vom Problem über den Algorithmus zum Programm

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

VBA-Programmierung: Zusammenfassung

Entwurf von Algorithmen - Kontrollstrukturen

1 Karol stellt sich vor

4.Grundsätzliche Programmentwicklungsmethoden

Grundlagen der Programmierung

UE Algorithmen und Datenstrukturen 1 UE Praktische Informatik 1. Übung 2. Spezifikation Schrittweise Verfeinerung

Grundlagen der Informatik I (Studiengang Medieninformatik)

CS1005 Objektorientierte Programmierung Bachelor of Science (Informatik)

Theoretische Informatik: Berechenbarkeit und Formale Sprachen

Was Computer nicht berechnen können

Algorithmen und Berechnungskomplexität I

Variablen und Datentypen

Praktische Informatik I

Programmiersprachen und Übersetzer

Babeș-Bolyai Universität Cluj Napoca Fakultät für Mathematik und Informatik Grundlagen der Programmierung MLG5005. Rekursion

Abgabe: (vor der Vorlesung) Aufgabe 2.1 (P) O-Notation Beweisen Sie die folgenden Aussagen für positive Funktionen f und g:

Einführung in die Programmierung

Algorithmen in Java. 1. Was sind Algorithmen? 2. Wie beschreibt man Algorithmen? 3. Wie erstellt man Algorithmen? 4. Wie untersucht man Algorithmen?

Abstrakte Algorithmen und Sprachkonzepte

Einführung in die Programmierung mit VBA

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

Theoretische Informatik

Ideen und Konzepte der Informatik. Programme und Algorithmen Kurt Mehlhorn

11. Rekursion, Komplexität von Algorithmen

Problemreduktion durch Transformation am Beispiel des. Erweiterten Euklidschen Algorithmus

Assembler - Einleitung

Von Labyrinthen zu. Algorithmen

Inhaltsverzeichnis. Was ist Informatik? 5. Programmierung 13. Einleitung. 1 Informatik Was ist Informatik? Teilgebiete der Informatik 8

Modellierung und Programmierung 1

Informatik I - Programmierung Globalübung Hoare-Kalkül. Thomas Weiler. Fachgruppe Informatik RWTH Aachen. T. Weiler, RWTH Aachen - 1 -

Einführung in die Informatik I

Lösungsvorschlag zu 1. Übung

Sprachen und Programmiersprachen

Infovorkurs, Teil II: Theoretische Informatik. Motivation. Turing-Maschine. Programmiersprachen

Programmierung WS12/13 Lösung - Übung 1 M. Brockschmidt, F. Emmes, C. Otto, T. Ströder

2 Grundlagen der Programmierung

Einführung in die Programmierung

Wie entsteht ein Computerprogramm?

Einführung in die Informatik Turing Machines

Wertebereich und Genauigkeit der Zahlendarstellung

Die Käfer lernen dazu...

Schulcurriculum Informationstechnische Grundkenntnisse und Informatik Stand:

Programmiertechnik II

Telecooperation/RBG. Grundlagen der Informatik I Thema 0: Einführung. Dr. Guido Rößling. Copyrighted material; for TUD student use only

Grundlagen der Künstlichen Intelligenz

Formale Sprachen und Automaten

Interdisziplinäre fachdidaktische Übung: Modelle für Sprachen in der Informatik. SS 2016: Grossmann, Jenko

Berechenbarkeitsmodelle

Algorithmen & Komplexität

2 Der Schnelleinstieg *

EIGENSCHAFTEN VON SPRACHEN

Automaten, Formale Sprachen und Berechenbarkeit I Wichtige Begriffe

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

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

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

Was ist ein Computer?

Werkzeuge zur Programmentwicklung

Das Praktikum mit Seminar vertieft die in der Vorlesung erworbenen Fähigkeiten in theoretischer und praktischer Hinsicht:

Praktikum 3 Algorithmik SS Aufgabe 10: Aufgabe 9 ( Skyline-Problem ) weitere Aufgaben folgen. Name:... Matr-Nr:...

1. Formulieren Sie den Algorithmus <Bedienung eines Getränkeautomaten> nach den oben genannten Kriterien.

Kostenmaße. F3 03/04 p.188/395

Dialekte der Klimaforschung

Software-Praktikum. Überblick und Zeitplan

Definition Ein Heap (priority queue) ist eine abstrakte Datenstruktur mit folgenden Kennzeichen:

Vorlesung Programmieren

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

Teil III. Komplexitätstheorie

Java 8. Elmar Fuchs Grundlagen Programmierung. 1. Ausgabe, Oktober 2014 JAV8

Grundlagen der Programmierung! Kapitel 1: Einführung! Ziel der Vorlesung Grundlagen der Programmierung! Überblick über das Einführungs-Kapitel!

Algorithmen und Datenstrukturen CS1017

Gierhardt. Einführung:

Transkript:

3. Entwurf von Algorithmen 3.1 Algorithmen, Programmiersprachen und Programme 3.2 Systematischer Entwurf von Algorithmen 3.3 Schrittweise Verfeinerung 3.4 Ablaufsteuerung (Kontrollstrukturen) 3.5 Modularität 3.6 Rekursion 3.7 Daten und Datenstrukturen 3.8 Bäume 3.9 Endliche Automaten 3. Entwurf von Algorithmen 3a - 1

3.1 Algorithmen, Programmiersprachen & Programme Algorithmus: ein Verfahren zur systematischen, schrittweisen Lösung eines Problems Beschrieben in: Umgangssprache Programmiersprache mathematischem Formalismus (z. B. Turing-Maschine) Church-Turing-These "All reasonable definitions of 'algorithm' are equivalent." 3. Entwurf von Algorithmen 3a - 2

Algorithmus vs. Programm Algorithmus Programmierung Programm in höherer Programmiersprache Übersetzung Programm in Maschinensprache Interpretation durch CPU (Gewünschter Ablauf wird ausgeführt) 3. Entwurf von Algorithmen 3a - 3

Beispiele für Algorithmen Prozess Pullover stricken Modellflugzeug bauen Kleider nähen spiele Musik Algorithmus Strickmuster Montageanleitung Schnittmuster Notenblatt Typische Schritte im Algorithmus Linke Masche, rechte Masche stricken Leime Rippe A an den Holm B Nähe Saum kochen Rezept Zutaten (4 Personen) 400 g Tomatensoße, 1/2 l Wasser, 3 Teelöffel Chilipulver, 1 1/2 l Minutenreis, 1/2 kg zerstoßene Tortilla-Chips, 1/2 kg klein geschnittener Cheddarkäse Anleitung: vermenge Tomatensoße, Wasser, Chilipulver in einem mittelgroßen Topf und bringe es zum Kochen. Rühre den Reis ein, decke den Topf ab, nehme ihn vom Feuer und lasse ihn 10 Minuten stehen. Streue Tortilla-Chips und Käse darüber. Serviere das Essen, wenn gewünscht, mit Salat-blättern und saurer Sahne. Aus: Syd's Kochbuch. 3. Entwurf von Algorithmen 3a - 4

Algorithmen als fundamentales Konzept unabhängig von der Programmiersprache unabhängig von der Rechner-Hardware Der Entwurf von Algorithmen ist ein kreativer Prozeß, der nicht automatisiert werden kann. Beispiel Summiere alle Zahlen zwischen 1 und 100: Lösung 1 1+2+3+4 +99+100 = 5050 Lösung 2 (1+100)+(2+99)+ (50+51) = 50*101 = 5050 Wir sehen: Die Effizienz eines Algorithmus ist ein wichtiges Entwurfskriterium. 3. Entwurf von Algorithmen 3a - 5

Richtlinien Ist das Problem lösbar? Welche Schritte müssen ausgeführt werden, um einen korrekten Algorithmus zu erhalten? Korrektheit heißt: Der Algorithmus erzeugt ein Resultat (ist endlich). Das Resultat ist korrekt. Ist der Algorithmus effizient? 3. Entwurf von Algorithmen 3a - 6

Beispiele Unlösbares Problem Halteproblem Finde einen Algorithmus, der feststellt, ob ein beliebiger Algorithmus in endlicher Zeit irgendein Ergebnis liefert (=anhält). Sehr komplexes Problem Problem des Handlungsreisenden (traveling salesman) Für eine beliebige Topologie: Finde den kürzesten Weg, der alle Städte verbindet, die der Handlungsreisende aufsuchen soll. 3. Entwurf von Algorithmen 3a - 7

Schwierigkeiten beim Algorithmenentwurf Es existiert keine präzise Definition des Problems. Spezialfälle kommen vor, die nicht betrachtet wurden. Es ist schwer zu zeigen, dass der Algorithmus für alle möglichen Eingabedaten korrekt abläuft. 3. Entwurf von Algorithmen 3a - 8

Beispiele für Schwierigkeiten (1) Beispiel 1: Wegbeschreibung 1. am Laden rechts abbiegen 2. geradeaus bis zur nächsten Kreuzung 3. rechts abbiegen 4. dritte Querstraße links An welchem Laden? (UNPRÄZISE) 3. Entwurf von Algorithmen 3a - 9

Beispiele für Schwierigkeiten (2) Beispiel 2: Finde Süden mit der Uhr 1. Richte kleinen Zeiger auf die Sonne. 2. Berechne die Winkelhalbierende zwischen dem kleinen Zeiger und 12.00 h. 3. Winkelhalbierende zeigt nach Süden. Ausrichten des kleinen Zeigers durch Drehen am Stellknopf oder Drehen der gesamten Uhr? (UNPRÄZISE) Funktioniert nicht auf der Südhalbkugel! (Sonderfall vergessen) 3. Entwurf von Algorithmen 3a - 10

Beispiele für Schwierigkeiten (3) Beispiel 3: Repariere Wasserhahn 1. Wasserhahn aufdrehen 2. warten, bis kein Wasser mehr fließt 3. Hahn abschrauben 4. Dichtung gegen neue Dichtung auswechseln 5. Hahn anschrauben 6. Hahn zudrehen 7. Haupthahn öffnen Endet nicht; Schritt 2 unendlich; es wurde vergessen, zu Anfang den Haupthahn zuzudrehen! 3. Entwurf von Algorithmen 3a - 11

Folgerung Der Entwurf von Algorithmen muss auf systematische Weise diszipliniert durchgeführt werden. Methoden zum systematischen Entwurf und zur Analyse von Algorithmen (Komplexität und Korrektheit) sind hilfreich. In einem zweiten Schritt wird der Algorithmus als Computerprogramm formuliert. Dieser Schritt wird als Programmierung bezeichnet. Durch die Verwendung einer in Syntax und Semantik wohldefinierten Sprache wird sichergestellt, dass die einzelnen Anweisungen unmissverständlich sind auf dem Zielrechner ausführbar sind (Mächtigkeit, Detaillierungsgrad). 3. Entwurf von Algorithmen 3a - 12

Formulierungsfehler Annahme: Es existiert ein Algorithmus, der nicht zu komplex ist. Welche Fehler können in der Formulierung auftauchen? Wir unterscheiden drei Klassen von Fehlern: syntaktische Fehler semantische Fehler logische Fehler 3. Entwurf von Algorithmen 3a - 13

Klassifikation von Fehlern (1) a) Syntaktische Fehler Werden durch den Compiler oder Interpreter gefunden und als solche gekennzeichnet. Die Instruktion wird nicht ausgeführt. Beispiel: a = b * + c; 3. Entwurf von Algorithmen 3a - 14

Klassifikation von Fehlern (2) b) Semantische Fehler Werden entweder während der Ausführung gefunden (Java Exception, segmentation fault im Betriebssystem) oder schlimmstenfalls nie gefunden. Beispiel: Feldgrenzenverletzung. Der Vektor a habe 100 Elemente. i = 101; a[i] = 17; Beispiel: Teilen durch 0 r = 0.0; s = 170/r; 3. Entwurf von Algorithmen 3a - 15

Klassifikation von Fehlern (3) c) Logische Fehler Das Programm tut nicht, was der Programmierer eigentlich wollte. Beispiel: // berechne Kreisumfang circumference = PI * radius; // anstatt 2*PI*radius Viele semantischen und alle logischen Fehler können während des Testens und durch formale Verifikation gefunden werden. Wichtig: Tests sind im Gegensatz zur formalen Verifikation keine Korrektheitsbeweise für ein Programm! 3. Entwurf von Algorithmen 3a - 16

3.2 Systematischer Entwurf von Algorithmen a) Problemstellung (a) Ist die Problemstellung verstanden bzw. wie lautet das eigentliche Problem? (b) (c) Wenn die Problemstellung nicht verstanden ist, dann weitere Informationen einholen. Wenn der Kern des Problems klar hervorgehoben ist, dann das eigentliche Problem formulieren. Ist die Problemstellung klar und exakt? Wenn nein, dann weitere Informationen zur Problemstellung beschaffen oder Problemstellung selbst präzisieren. Hat das Problem bereits einen Namen? Wenn nein, dann dem Problem einen kurzen und treffenden Namen geben. 3. Entwurf von Algorithmen 3a - 17

Problemstellung (2) (d) (e) (f) Was ist bekannt und was ist gegeben? Zusammenstellen aller bekannten Eingabegrößen bzw. objekte. Jedem Eingabeobjekt einen Namen geben und seinen Typ bzw. seine Art beschreiben. Was ist unbekannt bzw. was ist gesucht? Zusammenstellen aller bekannten Ausgabegrößen bzw. Ausgabeobjekte. Jedem Ausgabeobjekt einen Namen geben und seinen Typ festlegen. Welche Bedingungen für Ein- und Ausgabeobjekte müssen erfüllt sein bzw. werden gefordert? Zusammenstellen dieser Bedingungen (z. B. formelmäßige Zusammenhänge). 3. Entwurf von Algorithmen 3a - 18

Anmerkung zur Problemstellung In der Praxis ist nur in den seltensten Fällen das zu lösende Problem von vorne herein klar beschrieben (spezifiziert)! Gründe Derjenige, der das Problem hat, und derjenige, der den Algorithmus entwerfen soll, sind oft nicht identisch. Sie haben meist unterschiedliches Vorwissen über die Anwendungsumgebung. Sie machen meist unterschiedliche selbstverständliche Annahmen. Deshalb: Spezifikationen sollten gemeinsam erarbeitet werden. 3. Entwurf von Algorithmen 3a - 19

Beispiel für eine unklare Aufgabenstellung (1) Problemstellung Berechne die Funktion f(x) = log(x) Fragen Was ist die Basis des Logarithmus? Wie ist x gegeben? In welchem Datentyp? Welchen Wertebereich hat x? Wie soll f(x) ausgegeben werden? Mit welcher Genauigkeit soll gerechnet werden? Was soll passieren, wenn ein unzulässiges x eingegeben wird? 3. Entwurf von Algorithmen 3a - 20

Beispiel für eine unklare Aufgabenstellung (2) Spezifikation f(x) = log 10 (x) x, f(x) als IEEE double precision floating point-werte x: Eingabe f(x): Ausgabe Wertebereich: [0.3, 30]; in allen anderen Fällen Fehlermeldung ausgeben. 3. Entwurf von Algorithmen 3a - 21

Systematischer Entwurf von Algorithmen (1) b) Lösungsplan (a) Ist dasselbe Problem oder ein ähnliches bzw. vergleichbares Problem bekannt? (b) Wenn ja, dann versuche man, Kenntnisse über die Lösung zu erhalten. Ist ein allgemeineres Problem bekannt? Wenn ja, dann versuche man, Kenntnisse über die Lösung dieses Problems zu erhalten. Man prüfe, ob das gegebene Problem als Sonderfall des allgemeinen Problems behandelt werden kann. Wenn ja, dann wende man die allgemeine Problemlösung an. Wenn sich das Problem verallgemeinern lässt, ohne dass die Lösung erheblich schwerer wird, dann löse man das allgemeinere Problem. 3. Entwurf von Algorithmen 3a - 22

Systematischer Entwurf von Algorithmen (2) (c) Lässt sich das Problem in ein einfacheres Teilproblem oder in mehrere einfachere, in sich geschlossene Teilprobleme aufteilen? (d) Wenn ja, dann teile man das Problem auf und löse die Teilprobleme. Man stelle einen in Schritte gegliederten Lösungsplan auf. Sind die Teilprobleme zu lösen, dann nehme man für jedes Teilproblem einen Schritt. 3. Entwurf von Algorithmen 3a - 23

Kommentare zum Lösungsplan a.) Problem: Zeichne ein Dreieck auf dem Bildschirm. b.) Allgemeineres Problem: Zeichnen eines Polygons mit n Ecken auf dem Bildschirm. (Dreieck: n = 3, Rechteck: n = 4) Lösung des allgemeineren Problems erheblich schwerer? Dreieck: Polygon: Linie von Ecke 1 nach Ecke 2 Linie von Ecke 2 nach Ecke 3 Linie von Ecke 3 nach Ecke 1 Linie von Ecke 1 zu Ecke 2 Linie von Ecke 2 nach Ecke 3... Linie von Ecke n nach Ecke 1 c.) Teilproblem: Zeichnen einer Linie zwischen zwei Punkten auf dem Bildschirm. 3. Entwurf von Algorithmen 3a - 24

Was ist ein guter Algorithmus? Kriterien Ausführungszeit (Komplexität) Speicherbedarf für Programm und Daten Entwicklungszeit. Wird zunehmend wichtiger! Gut strukturiertes, wartbares Programm: sehr wichtig! 3. Entwurf von Algorithmen 3a - 25

3.3 Schrittweise Verfeinerung Zerlegung eines Algorithmus in Teilalgorithmen, von denen jeder einzelne einfacher und überschaubarer ist als der ursprüngliche Algorithmus. Dadurch verbessern sich die Chancen, einen insgesamt korrekten Algorithmus zu entwerfen. Die Verfeinerung wird so lange fortgesetzt, bis die einzelnen Schritte unmittelbar auf dem Prozessor ausgeführt werden können: vom Menschen bis hin zur Programmiersprache, vom Compiler bis hin zur Maschinensprache. 3. Entwurf von Algorithmen 3a - 26

Beispiel für schrittweise Verfeinerung (1) Algorithmus "Koche Kaffee" 1. Koche Wasser 2. Gib Kaffeepulver in die Tasse 3. Fülle Wasser in die Tasse 3. Entwurf von Algorithmen 3a - 27

Beispiel für schrittweise Verfeinerung (2) Erste Verfeinerung (1.1) Fülle Wasserkessel (1.2) Schalte Herdplatte an (1.3) Warte, bis das Wasser kocht (1.4) Schalte Herdplatte aus (2.1) Öffne Kaffeeglas (2.2) Entnehme einen Löffel Kaffee (2.3) Kippe Löffel in die Tasse (2.4) Schließe Kaffeeglas (3.1) Gieße Wasser aus dem Kessel in die Tasse, bis die Tasse voll ist 3. Entwurf von Algorithmen 3a - 28

Beispiel für schrittweise Verfeinerung (3) Zweite Verfeinerung // Algorithmus zur Zubereitung einer Tasse Kaffee // Zuerst Wasser kochen (1.1.1.) Stelle Kessel unter Wasserhahn (1.1.2.) Drehe Wasserhahn auf (1.1.3.) Warte, bis Kessel voll ist (1.1.4.) Drehe Wasserhahn zu (1.2.) Schalte Herdplatte an (1.3.1.) Warte, bis Kessel pfeift (1.4.) Schalte Herdplatte aus 3. Entwurf von Algorithmen 3a - 29

Beispiel für schrittweise Verfeinerung (4) Zweite Verfeinerung (Fortsetzung) // Gib Kaffeepulver in die Tasse (2.1.1.) Nehme Kaffeeglas aus dem Fach (2.1.2.) Entferne Deckel vom Kaffeeglas (2.2) Entnehme einen Löffel Kaffee (2.3.) Kippe Löffel in die Tasse (2.4.1.) Schraube Deckel auf das Kaffeeglas (2.4.2.) Stelle Kaffeeglas in das Fach zurück // Fülle Wasser in die Tasse (3.1.) Gieße Wasser aus dem Kessel in die Tasse, bis die Tasse voll ist 3. Entwurf von Algorithmen 3a - 30