VOM PROBLEM ZUM P ROGRAMM Info1, Einführung ❑ Was ist ein “Problem” ? Ein “Problem” im Sinne der Programmierung ist “durch Computer lösbar”. ❑ Aspekte ❑ Dieser erste INFORMELLE ALGORITHMUS (-> ABSTRAKTE ALGORITHMUS) kann dann durch SCHRITTWEISE VERFEINERUNG zur IMPLEMENTIERUNG führen! “Lösung” Entwurf/ Implementierung [email protected] ❑ Man kann leichter sehen, ob das Problem - oder Teile davon bereits in einem anderen Zusammenhang gelöst wurde. ❑ Als erster Lösungsansatz läßt sich ein INFORMELLER ALGORITHMUS in der Sprache und Begriffswelt des Modells formulieren. -> das spezifizierte Verhalten läßt sich durch einen Algorithmus “implementieren”. Spezifikation Info1, Einführung ❑ Man kann bekannte Eigenschaften des Modells ausnutzen, um eine gute Lösung zu finden. -> es läßt sich hinreichend genau “spezifizieren” (z. B. als Funktion Eingabewerte -> Ausgabewerte) “Problem” NUTZEN EINES FORMALEN MODELLS (U. A.) Programm WS 2005 VOM PROBLEM - ÜBER MODEL - ZUM PROGRAMM 1.1 - 1 / 20 [email protected] WS 2005 Info1, Einführung 1.1 - 3 / 20 Info1, Einführung Relevante Aspekte eines solchen Problems können häufig durch ein formales Modell ausgedrückt werden, z. B. ❑ numerische Probleme Lineare Gleichungssysteme, Differentialgleichungen, KÖNIGSBERGER BRÜCKENPROBLEM ... ❑ Symbol-/Textverarbeitung Zeichenketten, formale Grammatiken, ... ❑ ... Graphen [email protected] WS 2005 1.1 - 2 / 20 [email protected] WS 2005 1.1 - 4 / 20 (A) PROBLEM Info1, Einführung (C) MATHEMATISCHES MODELL Info1, Einführung ❑ ungerichteter Graph ❑ Gibt es eine Weg über alle sieben Brücken -> von einem beliebigen Ausgangspunkt Knoten -> zurück zum Ausgangspunkt ? Kanten Kantenbewertung → → → Insel, Landgebiete Brücken Brückennamen bzw. Anzahl der Brücken ❑ Wobei jede Brücke nur einmal benutzt werden darf ! N N Norden 6 3 3 Pregel 4 4 5 I 6 Insel 1 Neuer Pregel 5 1 Es interessiert nur die Anzahl der Kanten zwischen Knoten Osten 2 2 2 I O O 2 7 S S 7 Grapheigenschaften: symmetrisch & irreflexiv Alter Pregel Süden [email protected] WS 2005 (B) PROGRAMM 1.1 - 5 / 20 Info1, Einführung ❑ Eingabe: (D) PROBLEM IN DER SPRACHE DES MODELLS 1.1 - 7 / 20 Info1, Einführung -> der alle Kanten genau einmal enthält (Knoten beliebig oft) und -> möglichst geschlossen ist (d. h. Anfangsknoten = Endknoten)? ❑ Ausgabe: Nein WS 2005 ❑ Gibt es einen Weg (zusammenhängende Folge von Kanten), Welche Brücke führt von wo nach wo? Ja [email protected] (es gibt einen geeigneten geschlossenen/offenen Weg) oder (es gibt keine Lösung) 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! [email protected] WS 2005 1.1 - 6 / 20 [email protected] WS 2005 1.1 - 8 / 20 (E) PROBLEMERÖRTERUNG AUF MODELLNIVEAU Info1, Einführung (G) PSEUDOKODE-ALGORITHMUS (AUF ADT GRAPH) procedure EULER (in out ❑ Beim Passieren eines Knotens (hin- und wieder wegkommen) werden zwei anliegende Kanten abgearbeitet. G : antwort : Info1, Einführung GraphT, (nein,geschlossen,offen)) var U: Integer; ❑ Ein Knoten u mit einer ungeraden Anzahl von anliegenden Kanten kann also nur ein Randknoten des gesuchten Weges sein. 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; ❑ Die Anzahl U solcher Knoten u (mit ungerader Anzahl von anliegenden Kanten) kann nur 0 oder geradzahlig sein. ❑ Wenn U = 0: exisiert Eulerkreis (mit beliebigem Anfang) U = 2: existiert Eulerweg mit u1 und u2 als Anfangs- bzw. Endknoten U > 2: existiert keine Lösung /* 2. Auswerten der ermittelten Anzahl U */ switch U : case 0: /* geschlossen, d.h. ex Eulerkreis */ case 2: /* offen, d.h. es ex Eulerweg */ default /* nein, d.h. es ex keine Lösung */ endswitch end EULER. [email protected] WS 2005 (F ) INFORMELLER ALGORITHMUS AUF MATHEMATISCHEN MODELL 1.1 - 9 / 20 Info1, Einführung [email protected] WS 2005 (H) INFORMELLE SPEZIFIKATION VON ADT GRAPH 1.1 - 11 / 20 Info1, Einführung → GraphT, NodeT, benutzte Operationen ❑ Bestimme die Anzahl U der Knoten u mit ungerader Anzahl von anliegenden Kanten ! ❑ ∀ 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) ❑ Bestimme die Antwort in Abhängigkeit von U ! -> 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] WS 2005 1.1 - 10 / 20 [email protected] WS 2005 1.1 - 12 / 20 ENTWICKLUNG VON PROGRAMMEN, ZUSAMMENFASSUNG Info1, Einführung ADT ALS BRÜCKENPFEILER VOM “PROBLEM ZUM PROGRAMM” Info1, Einführung Problem “Lösung” “Problem” (Math.) Modell Informeller Algorithmus Spezifikation Abstrakte Datentypen (ADT) Pseudokode-Algorithmus Verfahren zur prinzipiellen Lösung des Problems Datenstrukturen (DS) Programm C / Java / Ada / Modula Oberon / Pascal Implementierung des allg. Vorgehens in einer best. PS [email protected] WS 2005 VORLESUNGSTHEMEN 1.1 - 13 / 20 Info1, Einführung Entwurf/ Implementierung [email protected] Programm WS 2005 1.1 - 15 / 20 ADT (KLASSEN) IM ENTWURFSPROZESS Info1, Einführung ❑ grundlegende ADT -> Listen (lists) -> Stapel (Keller, stacks) -> Warteschlangen (queues) -> Mengen (sets) (math.) Modell -> Abbildungen (maps) -> Graphen (graphs) DS schrittweise Verfeinerung, i. allg. so lange, bis Schritt zur DS überschaubar ❑ weitere spezielle ADT -> Bäume (trees) -> Verzeichnisse (dictionaries) [email protected] ADT WS 2005 1.1 - 14 / 20 [email protected] WS 2005 1.1 - 16 / 20 IMPLEMENTIERUNG VON ADT für Benutzer eines ADT Info1, Einführung Algebra ADT Interface Signatur ADT-Interface (export) (Definition) - Sorten - (opake) Typen -> Typnamen Vertrag - Operation - Prozedurköpfe Träger mengen ADT-Implementierung ❑ Die Implementierungs-/Validierungsmühen, die man bei der Realisierung der Module investiert hat, können auch von anderen Algorithmen (derselben Problemklasse) nachgenutzt werden. sichtbar - Implementierung der Typen (Angabe einer Datenstruktur) Implementation und verborgen Funktionen - Implementierung der Prozeduren (Angabe der Prozedurkörper) [email protected] WS 2005 1.1 - 17 / 20 ZUSAMMENFASSUNG DES VORGEHENS Info1, Einführung ❑ Die Implementierung des ADT (Implementation-Module) kann ausgewechselt werden, ohne daß die darauf aufbauenden Algorithmen (Applikations-Module) angepaßt werden müssen. PS für Benutzer VORTEILE Info1, Einführung ❑ Nach Festlegen der Schnittstelle können die ADT-Implementierungen und Applikations-Algorithmen unabhängig voneinander, z.B. -> parallel, -> räumlich verteilt, bearbeitet werden. [email protected] WS 2005 NACHTEILE 1.1 - 19 / 20 Info1, Einführung ❑ Ein solcher Programmierstil ist zunächst aufwendiger! Algorithmus 1 Algorithmus 2 Algorithmus 3 2. ApplikationsModule ❑ Er lohnt sich dann, wenn -> größere Projekte (mit einer erwarteten längeren Lebensdauer) -> arbeitsteilig -> über einen längeren Zeitraum 1. InterfaceModule ADT.DEF entwickelt werden. ❑ Compileroptimierung ↔ Programmlaufzeit Impl.1 Impl.2 Impl.3 3. ImplementationModule (# GEBEN REIHENFOLGE AN) [email protected] WS 2005 1.1 - 18 / 20 [email protected] WS 2005 1.1 - 20 / 20