VOM PROBLEM ZUM PROGRAMM NUTZEN EINES FORMALEN MODELLS (U. A.) Was ist ein Problem? Ein Problem im Sinne der ierung ist durch Computer lösbar. Man kann leichter sehen, ob das Problem - oder Teile davon - bereits in einem anderen Zusammenhang gelöst wurde. Aspekte -> es läßt sich hinreichend genau spezifizieren (z. B. als Funktion Eingabewerte -> Ausgabewerte) -> das spezifizierte Verhalten läßt sich durch einen Algorithmus implementieren. 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. Problem Lösung Dieser erste INFORMELLE ALGORITHMUS (-> ABSTRAKTE ALGORITHMUS) kann dann durch SCHRITTWEISE VERFEINERUNG zur IMPLEMENTIERUNG führen! Spezifikation Entwurf/ Implementierung monika.heiner@informatik.tu-cottbus.de WS 005 1.1-1 / 0 monika.heiner@informatik.tu-cottbus.de WS 005 1.1-3 / 0 VOM PROBLEM - ÜBER MODEL - ZUM PROGRAMM 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,... KÖNIGSBERGER BRÜCKENPROBLEM... Graphen monika.heiner@informatik.tu-cottbus.de WS 005 1.1 - / 0 monika.heiner@informatik.tu-cottbus.de WS 005 1.1-4 / 0
(A) PROBLEM (C) MATHEMATISCHES MODELL 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! Norden 3 4 Pregel 6 Insel Neuer Pregel 5 Osten 1 7 Alter Pregel Süden ungerichteter Graph Knoten Insel, Landgebiete Kanten Brücken Kantenbewertung Brückennamen bzw. Anzahl der Brücken N 3 4 I 1 S 5 6 7 O Es interessiert nur die Anzahl der Kanten zwischen Knoten I N S O Grapheigenschaften: symmetrisch & irreflexiv monika.heiner@informatik.tu-cottbus.de WS 005 1.1-5 / 0 monika.heiner@informatik.tu-cottbus.de WS 005 1.1-7 / 0 (B) PROGRAMM (D) PROBLEM IN DER SPRACHE DES MODELLS 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) 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! monika.heiner@informatik.tu-cottbus.de WS 005 1.1-6 / 0 monika.heiner@informatik.tu-cottbus.de WS 005 1.1-8 / 0
(E) 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 : exisiert Eulerkreis (mit beliebigem Anfang) U = : existiert Eulerweg mit u 1 und u als Anfangs- bzw. Endknoten U > : existiert keine Lösung (G) 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; /*. Auswerten der ermittelten Anzahl U */ switch U : case 0: /* geschlossen, d.h. ex Eulerkreis */ case : /* offen, d.h. es ex Eulerweg */ default /* nein, d.h. es ex keine Lösung */ endswitch end EULER. monika.heiner@informatik.tu-cottbus.de WS 005 1.1-9 / 0 monika.heiner@informatik.tu-cottbus.de WS 005 1.1-11 / 0 (F) INFORMELLER ALGORITHMUS AUF MATHEMATISCHEN MODELL (H) INFORMELLE SPEZIFIKATION VON ADT GRAPH GraphT, NodeT, benutzte Operationen Bestimme die Anzahl U der Knoten u mit ungerader Anzahl von anliegenden Kanten! Bestimme die Antwort in Abhängigkeit von U! 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) monika.heiner@informatik.tu-cottbus.de WS 005 1.1-10 / 0 monika.heiner@informatik.tu-cottbus.de WS 005 1.1-1 / 0
ENTWICKLUNG VON PROGRAMMEN, ZUSAMMENFASSUNG ADT ALS BRÜCKENPFEILER VOM PROBLEM ZUM PROGRAMM Problem Problem Lösung (Math.) Modell Informeller Algorithmus Abstrakte Datentypen (ADT) Pseudokode-Algorithmus Verfahren zur prinzipiellen Lösung des Problems Spezifikation Entwurf/ Implementierung Datenstrukturen (DS) C / Java / Ada / Modula Oberon / Pascal Implementierung des allg. Vorgehens in einer best. PS monika.heiner@informatik.tu-cottbus.de WS 005 1.1-13 / 0 monika.heiner@informatik.tu-cottbus.de WS 005 1.1-15 / 0 VORLESUNGSTHEMEN ADT (KLASSEN) IM ENTWURFSPROZESS grundlegende ADT -> Listen (lists) -> Stapel (Keller, stacks) -> Warteschlangen (queues) -> Mengen (sets) -> Abbildungen (maps) -> Graphen (graphs) weitere spezielle ADT -> Bäume (trees) -> Verzeichnisse (dictionaries) (math.) Modell ADT DS schrittweise Verfeinerung, i. allg. so lange, bis Schritt zur DS überschaubar monika.heiner@informatik.tu-cottbus.de WS 005 1.1-14 / 0 monika.heiner@informatik.tu-cottbus.de WS 005 1.1-16 / 0
IMPLEMENTIERUNG VON ADT VORTEILE für Benutzer eines ADT sichtbar PS Algebra ADT Interface (export) (Definition) Vertrag Signatur - Sorten - Operation ADT-Interface - (opake) Typen -> Typnamen - Prozedurköpfe Die Implementierung des ADT (Implementation-) kann ausgewechselt werden, ohne daß die darauf aufbauenden Algorithmen (Applikations-) angepaßt werden müssen. Die Implementierungs-/Validierungsmühen, die man bei der Realisierung der investiert hat, können auch von anderen Algorithmen (derselben Problemklasse) nachgenutzt werden. für Benutzer verborgen Implementation Träger mengen und Funktionen ADT-Implementierung - Implementierung der Typen (Angabe einer Datenstruktur) - Implementierung der Prozeduren (Angabe der Prozedurkörper) Nach Festlegen der Schnittstelle können die ADT-Implementierungen und Applikations-Algorithmen unabhängig voneinander, z.b. -> parallel, -> räumlich verteilt, bearbeitet werden. monika.heiner@informatik.tu-cottbus.de WS 005 1.1-17 / 0 monika.heiner@informatik.tu-cottbus.de WS 005 1.1-19 / 0 ZUSAMMENFASSUNG DES VORGEHENS NACHTEILE Ein solcher ierstil ist zunächst aufwendiger! Algorithmus 1 Algorithmus Algorithmus 3. Applikations- Er lohnt sich dann, wenn -> größere Projekte (mit einer erwarteten längeren Lebensdauer) -> arbeitsteilig ADT.DEF 1. Interface- -> über einen längeren Zeitraum entwickelt werden. Compileroptimierung laufzeit Impl.1 Impl. Impl.3 3. Implementation- (# GEBEN REIHENFOLGE AN) monika.heiner@informatik.tu-cottbus.de WS 005 1.1-18 / 0 monika.heiner@informatik.tu-cottbus.de WS 005 1.1-0 / 0