Graphen, Bäume, Halden

Werbung
Modul: Programmierung B-PRG
Grundlagen der Programmierung 1 – Teil 1 – V10
Graphen, Bäume, Halden
Prof. Dr. Detlef Krömker
Professur für Graphische Datenverarbeitung
Institut für Informatik
Fachbereich Informatik und Mathematik (12)
Hier wird Wissen Wirklichkeit
Übersicht: Wichtige Datenstrukturen
lineare
Strukturen
nichtlineare
Strukturen
nicht geordnete
Strukturen
geordnete
Strukturen
string
tupel
frozenset
Liste
Stapel
Schlange
list
stack
queue
Graph
gerichtet
Menge
Abbildung
set
dictionary
Verbund
···
azyklisch
Feld
array
2
Vorrangschlange
priority queue
Programmieren 1 – Teil 1 – V10
WS 2006/2007
Baum
Record
tree
Union
···
Prof. Dr. Detlef Krömker
Hier wird Wissen Wirklichkeit
1
Unser heutiges Lernziel
Die „Brot und Butter“ Datenstruktur
Baum kennen lernen.
···
tree
Einordnung und Spezialisierung des
Datentyps Baum kennenlernen.
binary tree
Programmieren 1 – Teil 1 – V10
WS 2006/2007
gerichtet
azyklisch
Baum
Eine spezielle Klasse „Baum“
realisieren.
3
Graph
Prof. Dr. Detlef Krömker
M-Way
quadtree
Suchbaum
Halde
search tree
heap
···
octtree
B-Tree
Hier wird Wissen Wirklichkeit
Nicht nur eine „Erfindung“
der Informatik
Stammbaum des Wissens
Band 1 der Encyclopédie ou
Dictionnaire raisonné des sciences,
des arts et des métiers
(28 Bände, vollendet im Jahr 1772)
Jean Baptiste le Rond d'Alembert
und Denis Diderot
4
Programmieren 1 – Teil 1 – V10
WS 2006/2007
Prof. Dr. Detlef Krömker
Hier wird Wissen Wirklichkeit
2
Wo sind wir in Teil1?
V 0
---V 1
V 2
V 3
---V 4
V 5
---V 6
V 7
---V 8
V 9
V10
V11
5
Begrüßung und Einführung
Daten – Information – Wissen
Computer – Algorithmus – Programm
Variablen – Datentypen – Objekte
Elementare numerische Datentypen
Zeichenketten
Verzweigungen und Schleifen
Prozeduren
Aggregierte Datentypen
Klassen
Graphen und Bäume
Bibliotheken
Programmieren 1 – Teil 1 – V10
WS 2006/2007
Prof. Dr. Detlef Krömker
Hier wird Wissen Wirklichkeit
Übersicht
Graph
Kategorisierung von Graphen
Graphen als Datenstruktur
Adjazenzmatrix
Inzidenzmatrix
Adjazenzliste
Baum
Heap
Implementierung von Bäumen
6
Programmieren 1 – Teil 1 – V10
WS 2006/2007
Prof. Dr. Detlef Krömker
Hier wird Wissen Wirklichkeit
3
Graph – Definition (Graphentheorie)
Ein Graph G ist ein geordnetes Paar zweier Mengen: G = (V, E)
Dabei bezeichnet V die Menge der im Graph enthaltenen Knoten (Vertex)
und E die Menge der Kanten (Edge) des Graphen.
Knoten
Anschaulich ist ein Graph ein Gebilde aus
Knoten (auch Ecken oder Punkte),
die durch Kanten verbunden sein können.
Kante
Achtung: verschiedene Bilder
können denselben Graphen darstellen.
7
Programmieren 1 – Teil 1 – V10
WS 2006/2007
Prof. Dr. Detlef Krömker
Hier wird Wissen Wirklichkeit
Kategorisierung von Graphen
ungerichtete Graphen ohne
Mehrfachkanten:
E ist eine Teilmenge aller
2-elementigen Teilmengen von V
schlicht oder
einfach
e
gerichtete Graphen ohne
Mehrfachkanten:
E ist eine Teilmenge des
kartesischen Produktes V x V
8
Programmieren 1 – Teil 1 – V10
WS 2006/2007
Prof. Dr. Detlef Krömker
Startknoten von e
Digraph
(Directed Graph).
Endknoten von e
Hier wird Wissen Wirklichkeit
4
Kategorisierung von Graphen (Eigenschaften von E)
ungerichteten Graphen mit
Mehrfachkanten: E ist eine
Multimenge [Elemente können
mehrfach vorkommen] über der
Menge aller 2-elementigen
Teilmengen von V
(Multigraph)
gerichteten Graphen mit
Mehrfachkanten: E ist eine
Multimenge über dem
kartesischen Produkt V x V
(Multigraph)
Hypergraphen eine Teilmenge der
Potenzmenge von V.
9
Programmieren 1 – Teil 1 – V10
WS 2006/2007
Prof. Dr. Detlef Krömker
Hier wird Wissen Wirklichkeit
Eigenschaften von Graphen
Hat eine Kante e in gerichteten
Graphen die Form (v, v), so
spricht man von einer Schleife
(Zyklus).
Ist jede Kante eines gerichteten
Graphen G Element einer
ungerichteten Kante von G,
so nennt man G auch symmetrisch.
10
Programmieren 1 – Teil 1 – V10
WS 2006/2007
Prof. Dr. Detlef Krömker
=
Hier wird Wissen Wirklichkeit
5
Graphen als Datenstruktur
Ein Graph als Datentyp sollte mindestens die folgenden Operationen
haben
‣ Einfügen (Kante, Knoten)
‣ Löschen (Kante, Knoten)
‣ Finden eines Objekts (Kante, Knoten).
Die bekanntesten Repräsentation von Graphen im Computer sind
‣ die Adjazenzmatrix (Nachbarschaftsmatrix)
‣ die Adjazenzliste (Nachbarschaftsliste)
‣ die Inzidenzmatrix (Knoten-Kanten-Matrix, seltener genutzt)
11
Programmieren 1 – Teil 1 – V10
WS 2006/2007
Prof. Dr. Detlef Krömker
Hier wird Wissen Wirklichkeit
Adjazenzmatrix
Ein Graph mit n Knoten kann durch eine n×n-Matrix repräsentiert werden.
Dazu nummeriert man die Knoten von 1 bis n durch und trägt in die Matrix
die Beziehungen der Knoten zueinander ein.
1
1
2
1
1
2
4
1
2
1
3
4
3
3
1
1
4
Hypergraphen lassen sich nicht durch eine Adjazenzmatrix darstellen.
12
Programmieren 1 – Teil 1 – V10
WS 2006/2007
Prof. Dr. Detlef Krömker
Hier wird Wissen Wirklichkeit
6
Adjazenzliste
Die Adjazenzliste wird in ihrer einfachsten Form durch eine einfach
verkettete Liste aller Knoten des Graphen dargestellt, wobei
‣ jeder Knoten eine Liste aller seiner Nachbarn (in ungerichteten
Graphen) bzw.
‣ Nachfolger in gerichteten Graphen besitzt.
Vielfachheiten der Kanten Knotengewichte, und Kantengewichte werden
meist in Attributen der einzelnen Elemente gespeichert.
13
Programmieren 1 – Teil 1 – V10
WS 2006/2007
Prof. Dr. Detlef Krömker
Hier wird Wissen Wirklichkeit
Adjazenzliste (2)
‣
In der Praxis verwendet man daher meist diese Form der
Repräsentation.
‣
aufwändiger zu implementieren und zu verwalten, bieten aber eine
Reihe von Vorteilen gegenüber Adjazenzmatrizen.
‣
verbrauchen nur linear viel Speicherplatz, was insbesondere bei
dünnen Graphen (also Graphen mit wenig Kanten) von Vorteil ist,
während die Adjazenzmatrix quadratischen Platzbedarf bezüglich der
Anzahl Knoten besitzt (dafür aber kompakter bei dichten Graphen, also
Graphen mit vielen Kanten ist).
‣
Zum anderen lassen sich viele graphentheoretische Probleme nur mit
Adjazenzlisten in linearer Zeit lösen.
14
Programmieren 1 – Teil 1 – V10
WS 2006/2007
Prof. Dr. Detlef Krömker
Hier wird Wissen Wirklichkeit
7
Inzidenzmatrix (seltener genutzt)
‣
Ein Graph mit n Knoten und m Kanten kann auch durch eine n×mMatrix repräsentiert werden. Dazu nummeriert man die Knoten von 1
bis n und die Kanten von 1 bis m durch und trägt in die Matrix die
Beziehungen der Knoten zu den Kanten ein.
‣
Jede Spalte der Inzidenzmatrix enthält genau zwei von Null
verschiedene Einträge.
‣
In ungerichteten Graphen zweimal die 1 und
‣
in gerichteten Graphen einmal die 1 (Endknoten) und einmal die -1
(Startknoten).
15
Programmieren 1 – Teil 1 – V10
WS 2006/2007
Prof. Dr. Detlef Krömker
Hier wird Wissen Wirklichkeit
Baum
Als Wald bezeichnet man in der Graphentheorie einen ungerichteten
Graphen ohne Kreis Zyhlus). Ist dieser zusammenhängend, so spricht
man von einem (ungerichteten) Baum.
Die Zusammenhangskomponenten eines Waldes stellen in diesem Sinne
für sich einen Baum dar, so dass ein Wald aus einem oder mehreren
Bäumen besteht.
Jeder ungerichtete Baum ist also auch ein Wald. Betrachtungen über
Wälder lassen sich damit auch auf ungerichtete Bäume übertragen.
Umgekehrt sind aber auch Betrachtungen über ungerichtete Bäume häufig
leicht auf Wälder übertragbar.
16
Programmieren 1 – Teil 1 – V10
WS 2006/2007
Prof. Dr. Detlef Krömker
Hier wird Wissen Wirklichkeit
8
Gewurzelte Bäume
Neben ungerichteten Bäumen betrachtetet man auch gerichtete Bäume,
die häufig auch als gewurzelte Bäume bezeichnet werden und sich
weiter in In-Trees und Out-Trees unterscheiden lassen.
Es gibt einen ausgezeichneten Knoten, den man Wurzel nennt und für
den die Eigenschaft gilt,
‣ dass alle Kanten von diesem wegzeigen (Out-Tree) oder
‣ zu diesem hinzeigen (In-Tree).
17
Programmieren 1 – Teil 1 – V10
WS 2006/2007
Prof. Dr. Detlef Krömker
Hier wird Wissen Wirklichkeit
Eigenschaften
die lineare Struktur der Liste wird aufgebrochen.
Der maximale Ausgangsgrad wird als Ordnung eines Out-Trees
bezeichnet
alle Knoten mit Ausgangsgrad 0 bezeichnet man als Blätter.
alle Knoten, die kein Blatt sind, als innere Knoten. (Manchmal schließt
man die Wurzel dabei aber aus.)
Als Tiefe einen Knotens bezeichnet man die Länge des Pfades von der
Wurzel zu ihm und
als Höhe des Out-Trees die Länge eines längsten Pfades.
18
Programmieren 1 – Teil 1 – V10
WS 2006/2007
Prof. Dr. Detlef Krömker
Hier wird Wissen Wirklichkeit
9
Eigenschaften
Für einen von der Wurzel verschiedenen Knoten v
bezeichnet man den Knoten, durch den er mit
einer eingehenden Kante verbunden ist als
Vater, Vaterknoten, Elternknoten oder Vorgänger von v.
Als Vorfahren von v bezeichnet man alle Knoten, die entweder Vater von
v oder Vorgänger des Vaters sind.
Umgekehrt bezeichnet man alle Knoten, die von einem beliebigen Knoten
v aus durch eine ausgehende Kante verbunden sind als Kinder,
Kinderknoten, Sohn oder Nachfolger von v. Als Nachfahren von v
bezeichnet man Kinder von v oder deren Nachfahren.
Als Geschwister oder Geschwisterknoten werden in einem Out-Tree
Knoten bezeichnet, die den gleichen Vater besitzen.
19
Programmieren 1 – Teil 1 – V10
WS 2006/2007
Prof. Dr. Detlef Krömker
Hier wird Wissen Wirklichkeit
Spezielle Bäume
‣
Bei Binärbäumen ist die Anzahl der Kinder höchstens zwei.
‣
In balancierten Bäumen gilt zusätzlich, dass sich die Höhen des
linken und rechten Teilbaums an jedem Knoten höchstens um eins
unterscheiden.
‣
Bei Suchbäumen sind die Elemente in der Baumstruktur geordnet
abgelegt, so dass man schnell Elemente im Baum finden kann.
20
Programmieren 1 – Teil 1 – V10
WS 2006/2007
Prof. Dr. Detlef Krömker
Hier wird Wissen Wirklichkeit
10
Partiell geordneter Baum
Ein partiell geordneter Baum T ist ein Baum,
‣
dessen Knoten markiert sind
‣
dessen Markierungen aus einem geordneten Wertebereich stammen
‣
in dem für jeden Teilbaum T' mit der Wurzel x gilt: Alle Knoten aus T'
sind größer markiert als x oder gleich x.
Intuitiv bedeutet dies: Die Wurzel jedes Teilbaumes stellt ein Minimum für
diesen Teilbaum dar. Die Werte des Teilbaumes nehmen in Richtung
der Blätter zu oder bleiben gleich.
21
Programmieren 1 – Teil 1 – V10
WS 2006/2007
Prof. Dr. Detlef Krömker
Hier wird Wissen Wirklichkeit
Geordnete, strikte und vollständige Binärbäume
‣
Ein Binärbaum heißt geordnet, wenn jeder
innere Knoten ein linkes und eventuell
zusätzlich ein rechtes Kind besitzt
(und nicht etwa nur ein rechtes Kind).
‣
Man bezeichnet ihn als voll oder strikt,
wenn jeder Knoten entweder Blatt ist
(also kein Kind besitzt), oder aber zwei
(also sowohl ein linkes wie ein rechtes)
Kinder besitzt.
‣
Man bezeichnet ihn als vollständig, wenn alle Blätter die gleiche Tiefe besitzen.
Ein vollständiger Binärbaum der Höhe n, n man häufig auch als Bn bezeichnet, hat
genau
‣ 2n+1-1 Knoten,
2i Knoten in Tiefe i, insbesondere also
‣ 2n-1 innere Knoten,
2n Blätter
mit Höhe n die Länge des Pfades zu einem tiefsten Knoten bezeichnet wird.
22
Programmieren 1 – Teil 1 – V10
WS 2006/2007
Prof. Dr. Detlef Krömker
Hier wird Wissen Wirklichkeit
11
Eine wichtige Operation auf Bäumen:
Linearisierung oder Traversierung
Es gibt verschiedene Möglichkeiten, die Knoten von Binärbäumen zu
durchlaufen. Diesen Prozess bezeichnet man auch als Linearisierung
oder Traversierung. Man unterscheidet hier in:
‣
‣
23
pre-order (W–L–R): wobei zuerst die
Wurzel (W) betrachtet wird und
anschließend zuerst der linke (L),
dann der rechte (R) Teilbaum
durchlaufen wird,
in-order (L–W–R): wobei zuerst der
linke (L) Teilbaum durchlaufen wird,
dann die Wurzel (W) betrachtet wird
und anschließend der rechte (R)
Teilbaum durchlaufen wird und
Programmieren 1 – Teil 1 – V10
WS 2006/2007
Prof. Dr. Detlef Krömker
Hier wird Wissen Wirklichkeit
Eine wichtige Operation auf Bäumen: Linearisierung oder
Traversierung
‣
post-order (L–R–W): wobei
zuerst der linke (L), dann der
rechte (R) Teilbaum durchlaufen
wird und anschließend die
Wurzel (W) betrachtet wird.
‣
level-order Beginnend bei der
Wurzel, werden die Ebenen von
links nach rechts durchlaufen.
24
Programmieren 1 – Teil 1 – V10
WS 2006/2007
Prof. Dr. Detlef Krömker
Hier wird Wissen Wirklichkeit
12
Rekursive Implementierungen
Funktion Preorder (Baum)
W <- Baum.Wurzel
If Baum.Links <> NULL
L <- Preorder(Baum.Links)
If Baum.Rechts <> NULL
R <- Preorder(Baum.Rechts)
Return W°L°R
Funktion Inorder (Baum)
W <- Baum.Wurzel
If Baum.Links <> NULL
L <- Inorder(Baum.Links)
If Baum.Rechts <> NULL
R <- Inorder(Baum.Rechts)
Return L°W°R
//W:= Wurzel des übergebenen Baumes
//Existiert ein linker Unterbaum?
// dann: L:= Preorder von linkem Unterbaum
//Existiert ein rechter Unterbaum?
// dann: R:= Preorder von rechtem Unterbaum
//Rückgabe: Verkettung aus W, L und R
/W:= Wurzel des übergebenen Baumes
//Existiert ein linker Unterbaum?
// dann: L:= Inorder von linkem Unterbaum
//Existiert ein rechter Unterbaum?
// dann: R:= Inorder von rechtem Unterbaum
//Rückgabe: Verkettung aus L, W und R
Funktion Postorder (Baum)
W <- Baum.Wurzel
//W:= Wurzel des übergebenen Baumes
If Baum.Links <> NULL
//Existiert ein linker Unterbaum?
L <- Postorder(Baum.Links) // dann: L:= Postorder von linkem Unterbaum
If Baum.Rechts <> NULL
//Existiert ein rechter Unterbaum?
R <- Postorder(Baum.Rechts) // dann: R:= Postorder von rechtem Unterbaum
Return L°R°W
//Rückgabe: Verkettung aus L, R und W
25
Programmieren 1 – Teil 1 – V10
WS 2006/2007
Prof. Dr. Detlef Krömker
Hier wird Wissen Wirklichkeit
Man unterscheidet hier weiter
‣
in binäre Suchbäume mit AVL-Bäumen als balancierte Version und
‣
B-Bäumen sowie diversen Varianten, den B*-Bäumen (die Blattknoten
in einer Liste miteinander verkettet). (Spezielle Suchbäume in
Datenbanksystemen Achtung: B steht nicht für binär!)
‣
In B*-Bäumen wird neben der effizienten Suche einzelner
Datenelemente auch das schnelle sequenzielle Durchlaufen aller
Datenelemente unterstützt).
Eine detaillierte Diskussion würde hier zu weit führen, aber Sie werden in
Ihrem Studium noch viel davon hören, versprochen ;-)
26
Programmieren 1 – Teil 1 – V10
WS 2006/2007
Prof. Dr. Detlef Krömker
Hier wird Wissen Wirklichkeit
13
Bäume als Datenstruktur
Gewurzelte Bäume, insbesondere Out-Trees,
Bei beschränkter Ordnung können diese so implementiert werden, dass
jeder Knoten einen festen Satz an Variablen oder ein Array für die
Referenzen auf seine Kinder enthält.
Ein Baum unbeschränkter Ordnung kann implementiert werden, indem
man statt Arrays dynamische Listen verwendet (z. B. in Python).
Häufig besitzen die Knoten auch eine Referenz auf ihren Elternknoten
(back pointer).
27
Programmieren 1 – Teil 1 – V10
WS 2006/2007
Prof. Dr. Detlef Krömker
Hier wird Wissen Wirklichkeit
Bäume als Datenstruktur (2)
In Programmiersprachen ohne
dynamische Listen hat sich auch
ein Verfahren bewährt, bei dem
ein allgemeiner Baum durch
einen Binärbaum implementiert wird
rote Linie zeigt dabei den realisierten
allgemeinen Baum
Pfeile zeigen die tatsächlich implementierte
Zeigerstrukturen repräsentieren.
Prinzip: linke Zeiger zeigt auf den am weitesten links stehenden Sohn
rechte Zeiger auf den rechten Bruder verweist.
28
Programmieren 1 – Teil 1 – V10
WS 2006/2007
Prof. Dr. Detlef Krömker
Hier wird Wissen Wirklichkeit
14
Heap
‣
‣
Der Heap (Haufen, Halde) vereint die Datenstruktur eines Baums mit
den Operationen einer Vorrangwarteschlange.
Je nach Reihenfolge in der Vorrangwarteschlange spricht man von
Min-Heap oder einem Max-Heap.
‣
Häufig hat der Heap neben den minimal nötigen Operationen wie
insert, remove und extractMin (-Max)auch noch weitere Operationen
wie merge oder changeKey.
‣
In einem Heap können Objekte oder Elemente abgelegt und aus
diesem wieder entnommen werden. Sie dienen damit der Speicherung
von Mengen. Den Elementen ist dabei ein Schlüssel zugeordnet, der
die Priorität der Elemente festlegt. Häufig werden auch die Elemente
selbst als Schlüssel verwendet.
29
Programmieren 1 – Teil 1 – V10
WS 2006/2007
Prof. Dr. Detlef Krömker
Hier wird Wissen Wirklichkeit
Übersicht ... zur Implementierung
Implementierung mit einer
dynamischen Liste in Python
„einfach“ und effizient möglich
Übung
Graph
gerichtet
azyklisch
···
Baum
tree
M-Way
binary tree
30
quadtree
Suchbaum
Halde
search tree
heap
···
octtree
Programmieren 1 – Teil 1 – V10
WS 2006/2007
··
B-Tree
Wir betrachten eine Variante zur
Übung ... Programmierung
einer Klasse!
·
Prof. Dr. Detlef Krömker
Hier wird Wissen Wirklichkeit
15
Vorab:
Zusammenfassung der Namenskonventionen (1)
(1) Namen, die mit zwei Unterstrichen beginnen und enden (zum Beispiel
_ _init_ _), haben eine besondere Bedeutung für den Interpreter:
Klassen fangen eingebaute Operationen ab und implementieren
dieses auf ihre Art (Überladen die Methode), indem sie Methoden mit
zwei Unterstrichen beginnen und enden lassen, die sie von ihrer
Oberklasse geerbt haben.
(2) Namen, die mit einem Unterstrich beginnen, (z.B. _A) und denen auf
oberster Ebene eines Moduls zugewiesen wird, werden bei from
module import * nicht sichtbar. (Pseudo private Attribute)
(3) Namen in einer class-Anweisung, die mit zwei Unterstrichen beginnen,
aber nicht damit enden, z.B. _ _A, wird der Name der Klasse
vorangestellt (Pseudo private Attribute)
31
Programmieren 1 – Teil 1 – V10
WS 2006/2007
Prof. Dr. Detlef Krömker
Hier wird Wissen Wirklichkeit
Zusammenfassung der Namenskonventionen (2)
(4) Klassennamen beginnen normalerweise mit einem großen
Buchstaben, z.B. MeineKlasse (Camel Casing)
(5) Der erste (am weitesten links stehende) Parameter der
Methodendefinition innerhalb von Klassen wird normalerweise self
genannt.
(6) Qualifizierte Namen werden als Attribute bezeichnet und unterliegen
den Regeln für Objekt-Namensräumen. Zuweisungen in bestimmten
lexikalischen Geltungsbereichen (beziehen sich auf die Schachtelung
im Quellcode eines Programmes) initialisieren Objekt-Namensräume
(Module, Klassen).
32
Programmieren 1 – Teil 1 – V10
WS 2006/2007
Prof. Dr. Detlef Krömker
Hier wird Wissen Wirklichkeit
16
Ein Beispiel für die (unvollständige)
Implementierung eines binären Suchbaums
class Node:
def __init__(self, data=None):
self.data = data
self.left = None
self.right = None
def __str__(self):
return "[%s, %i, %i]" % (str(self.data),
id(self.left), id(self.right))
33
Programmieren 1 – Teil 1 – V10
WS 2006/2007
Prof. Dr. Detlef Krömker
Hier wird Wissen Wirklichkeit
Implementierung eines binären Suchbaums (2)
class BTree:
def __init__(self):
self.root = None
def _prchilds(self, node):
if node != None:
return "(%s; %s; %s)" (self._prchilds(node.left),
node, self._prchilds(node.right))
else:
return "nil"
34
Programmieren 1 – Teil 1 – V10
WS 2006/2007
Prof. Dr. Detlef Krömker
Hier wird Wissen Wirklichkeit
17
Implementierung eines binären Suchbaums (3)
def add(self, data):
if self.root == None:
self.root = Node(data)
else:
curnode = self.root
lastnode = self.root
while curnode != None:
lastnode = curnode
if data < curnode.data:
curnode = curnode.left
direction = -1
# links einfügen
else:
curnode = curnode.right
direction = +1
# rechts einfügen
if direction == -1:
lastnode.left = Node(data)
else:
lastnode.right = Node(data)
35
Programmieren 1 – Teil 1 – V10
WS 2006/2007
Prof. Dr. Detlef Krömker
Hier wird Wissen Wirklichkeit
Testen unserer Implementierung in der Python Shell
>>> a=BTree()
>>> a.add(4)
>>> a.add(2)
>>> a.add(7)
>>> a
<__main__.BTree instance at 0x00C26828>
>>> a.__str__()
'((nil; [2, 505028048, 505028048]; nil); [4, 13095440,
13095880]; (nil; [7, 505028048, 505028048]; nil))'
36
Programmieren 1 – Teil 1 – V10
WS 2006/2007
Prof. Dr. Detlef Krömker
Hier wird Wissen Wirklichkeit
18
Zusammenfassung
‣
Graphen, Bäume, Heaps
‣
ganz wichtige Datenstrukturen
‣
Sie wissen, was das ist und wissen, wie es zu implementieren ist
‣
es fehlen aber noch viele weitergehende Aspekte, ... Datenstrukturen
im 2. Semester, ...
Programmieren erfordert Disziplin, Ausdauer, abstraktes
Denkvermögen, Kreativität und hohe Lernbereitschaft!
37
Programmieren 1 – Teil 1 – V10
WS 2006/2007
Prof. Dr. Detlef Krömker
Hier wird Wissen Wirklichkeit
Was haben wir (noch) nicht gemacht?
Algorithmenkonstruktion ... macht Prof. Drobnik
Interaktive Programme mit graphischer Oberfläche ... das tut mir etwas
weh!
ein Teil des Skripts fehlt noch V2 ... wird bald nachgeliefert
und auch eine Überarbeitung (insbesondere Fehlerkorrektur)
Sie erkennen das an einer Versionsnummer (-X) auf dem Server
Möglichkeiten sich Selbsttest (Multiple-Choice Fragen, demnächst!)
38
Programmieren 1 – Teil 1 – V10
WS 2006/2007
Prof. Dr. Detlef Krömker
Hier wird Wissen Wirklichkeit
19
Fragen und (hoffentlich) Antworten
39
Programmieren 1 – Teil 1 – V10
WS 2006/2007
Prof. Dr. Detlef Krömker
Hier wird Wissen Wirklichkeit
Ausblick
Der Abschluss des Teils 1 (für die Klausur immerhin schon 45%):
jeweils nur ausgewählte Elemente:
‣
Module, Pakete
‣
Ein- / Ausgabe
‣
exceptions
‣
event-based programming
‣
und eine 1. Evaluierung
Danke für Ihre Aufmerksamkeit!
40
Programmieren 1 – Teil 1 – V10
WS 2006/2007
Prof. Dr. Detlef Krömker
Hier wird Wissen Wirklichkeit
20
Herunterladen