Informatik 1, Vom Problem zum Programm, Beispiel Euler WS 2004 VOM PROBLEM ZUM PROGRAMM Was ist ein “Problem” ? Ein “Problem” im Sinne der Programmierung ist “durch Computer lösbar”. Aspekte: • es läßt sich hinreichend genau “spezifizieren” (z. B. als Funktion Eingabewerte -> Ausgabewerte) • das spezifizierte Verhalten läßt sich durch einen Algorithmus “implementieren”. Spezifikation (“Problem”) Entwurf/ Implementierung Programm (“Lösung”) Relevante Aspekte eines solchen Problems können häufig durch ein formales Modell ausgedrückt werden, z. B. • numerische Probleme: Lineare Gleichungssysteme, Differentialgleichungen, ... • Symbol-/Textverarbeitung Zeichenketten, formale Grammatiken, ... • Graphen [email protected] 1.1 - 1 / 11 Informatik 1, Vom Problem zum Programm, Beispiel Euler WS 2004 NUTZEN EINES FORMALEN MODELLS (U. A.): • Man kann leichter sehen, ob das Problem - oder Teile davon bereits in anderem Zusammenhang gelöst wurde. • Man kann bekannte Eigenschaften des Modells ausnutzen, um eine gute Lösung zu finden. • Als erster Lösungsansatz läßt sich ein INFORMELLER ALGORITHMUS in der Sprache und Begriffswelt des Modells formulieren. Dieser erste ABSTRAKTE ALGORITHMUS kann dann durch SCHRITTWEISE VERFEINERUNG zur IMPLEMENTIERUNG führen! [email protected] 1.1 - 2 / 11 Informatik 1, Vom Problem zum Programm, Beispiel Euler WS 2004 KÖNIGSBERGER BRÜCKENPROBLEM (a) Problem Gibt es eine Weg über alle sieben Brücken von einem beliebigen Ausgangspunkt zurück zum Ausgangspunkt ? (Wobei jede Brücke nur einmal benutzt werden darf !) 3 Norden 6 Pregel Süden 4 Insel 1 Neuer Pregel 5 Osten 2 7 Alter Pregel (b) Programm Eingabe: Welche Brücke führt von wo nach wo? Ausgabe: Ja (es gibt einen geeigneten geschlossenen/offenen Weg) oder Nein (es gibt keine Lösung) [email protected] 1.1 - 3 / 11 Informatik 1, Vom Problem zum Programm, Beispiel Euler WS 2004 (c) math. Modell (ungerichteter Graph) Insel, Landgebiete → Knoten Brücken → Kanten Brückennamen → Kantenbewertung N 6 3 4 5 I 1 2 O 7 S Es interessiert nur die Anzahl der Kanten zwischen Knoten N 2 I O 2 S Grapheigenschaften: symmetrisch & irreflexiv [email protected] 1.1 - 4 / 11 Informatik 1, Vom Problem zum Programm, Beispiel Euler WS 2004 (d) Problem in der Sprache des Modells: Gibt es einen Weg (zusammenhängende Folge von Kanten), der alle Kanten genau einmal enthält (Knoten beliebig oft) und möglichst geschlossen ist (d.h. Anfangsknoten = Endknoten)? kurz: besitzt der Graph einen Eulerweg bzw. Eulerkreis ? Anmerkung: • Wir beschränken uns hier (zunächst) auf die Frage nach der Existenz eines solchen Weges und verzichten auf den Weg als solches (falls es diesen gibt). • Aufweichung: zur Not akzeptieren wir auch einen offenen Weg! Problemerörterung auf Modellniveau • Beim Passieren eines Knotens (hin- und wieder wegkommen) werden zwei anliegende Kanten abgearbeitet. • Ein Knoten u mit einer ungeraden Anzahl von anliegenden Kanten kann also nur ein Randknoten des gesuchten Weges sein. • Die Anzahl U solcher Knoten u (mit ungerader Anzahl von anliegenden Kanten) kann nur 0 oder geradzahlig sein. • Wenn U= 0: U= 2: U> 2: exisiert Eulerkreis (mit beliebigem Anfang) existiert Eulerweg mit u1 und u2 als Anfangs- bzw. Endknoten existiert keine Lösung [email protected] 1.1 - 5 / 11 Informatik 1, Vom Problem zum Programm, Beispiel Euler WS 2004 (e) informeller Algorithmus (auf math. Modell) 1. Bestimme die Anzahl U der Knoten u mit ungerader Anzahl von anliegenden Kanten. 2. Bestimme die Antwort in Abhängigkeit von U! (f) Pseudokode-Algorithmus (auf ADT Graph) procedure EULER ( in G: GraphT, out antwort: (nein,geschlossen,offen)) var U: Integer; begin /* 1. Bestimme die Anzahl U*/ U := 0; loop ∀ Knoten von G do if Anzahl der anliegenden Kanten ungerade then U := U + 1 endif endloop; /* 2. Auswerten der ermittelten Anzahl U */ case U of 0: /* geschlossen, d.h. ex Eulerkreis */ | 2: /* offen, d.h. es ex Eulerweg */ else /* nein, d.h. es ex keine Lösung */ endcase end EULER. [email protected] 1.1 - 6 / 11 Informatik 1, Vom Problem zum Programm, Beispiel Euler WS 2004 (g) informelle Spezifikation einer EulerADT → GraphT, NodeT → benutzte Operationen • ∀ Knoten von G abhängig von verfügbaren Steuerstrukturen der anvisierten PS; i. allg. wird Verfeinerung notwendig sein zum schrittweisen sequentiellen Durchmustern, z. B. FirstNode (in GraphT, out NodeT) NextNode (in GraphT, inout NodeT, out Boolean) LastNode (in GraphT, in NodeT, out Boolean) • Anzahl anliegender Kanten für einen geg. Knoten Neighbours (in GraphT, in NodeT, out Integer) • Einlesen des konkreten Graphen InitGraph (inout GraphT) AddNode (inout GraphT, in NodeT) AddArc (inout GraphT, in NodeT, in NodeT, in integer) [email protected] 1.1 - 7 / 11 Informatik 1, Vom Problem zum Programm, Beispiel Euler WS 2004 Entwicklung von Programmen (Zusammenfassung) Problem (Math) Modell Informeller Algorithmus Abstrakte Datentypen (ADT) Datenstrukturen (DS) Pseudokode-Algorithmus (A) Ada / Modula Programm C / Java Oberon / Pascal (B) (A) Verfahren zur prinzipiellen Lösung des Problems (B) Implementierung des allg. Vorgehens in einer best. PS grundlegende ADT: Listen, Stapel, WS, Mengen, Abbildungen, Graphen weitere spezielle ADT: Bäume, Verzeichnisse, ... [email protected] 1.1 - 8 / 11 Informatik 1, Vom Problem zum Programm, Beispiel Euler WS 2004 IMPLEMENTIERUNG VON ADT’S PS für Benutzer eines ADT Definition / Interface Module sichtbar (export) Algebra ADT Signatur ADT-Interface - Sorten - (opake) Typen -> Typnamen - Operation - Prozedurköpfe für Benutzer ADT-Implementierung Implementation Module Trägermengen verborgen - Implementierung der Typen (durch Angabe einer DS) und - Implementierung der Funktionen Prozeduren (durch Angabe der Prozedurkörper) ADT’s (Klassen) im Entwurfsprozeß: (math) Modell ADT DS schrittweise Verfeinerung, i. allg. so lange, bis Schritt zur DS übeschaubar; [email protected] 1.1 - 9 / 11 Informatik 1, Vom Problem zum Programm, Beispiel Euler WS 2004 ADT’s als Brückenpfeiler vom “Problem zum Programm”: Spezifikation Entwurf/ Implementierung (“Problem”) Programm (“Lösung”) Zusammenfassung des Vorgehens (# geben Reihenfolge an) 2. Application Module Algorithmus 1 1. Interface Module ADT.DEF 3. Implementation Module Impl.1 [email protected] Algorithmus 2 Impl.2 Algorithmus 3 Impl.3 1.1 - 10 / 11 Informatik 1, Vom Problem zum Programm, Beispiel Euler WS 2004 Vorteile • Die Implementierung des ADT (Implementation Module) kann ausgewechselt werden, ohne daß die darauf aufbauenden Algorithmen (Module) angepaßt werden müssen. • Die Implementierungs-/Validierungsmühen, die man bei der Realisierung der Module investiert hat, können auch von anderen Algorithmen (derselben Problemklasse) nachgenutzt werden. • Nach Festlegen der Schnittstelle können die ADT-Implementierungen und Applikations-Algorithmen unabhängig voneinander, z.B. parallel bearbeitet werden. Nachteile • Ein solcher Programmierstil ist zunächst aufwendiger! Er lohnt sich dann, wenn - größere Projekte (mit einer erwarteten längeren Lebensdauer) - arbeitsteilig - über einen längeren Zeitraum entwickelt werden. • Compileroptimierung ↔ Programmlaufzeit [email protected] 1.1 - 11 / 11