VOM PROBLEM ZUM PROGRAMM

Werbung
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
Herunterladen