KÖNIGSBERGER BRÜCKENPROBLEM

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