Modul: Programmierung B-PRG Grundlagen der Programmierung ... · 1 Hier wird Wissen Wirklichkeit...

20
1 Hier wird Wissen Wirklichkeit 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) Prof. Dr. Detlef Krömker 2 Hier wird Wissen Wirklichkeit Programmieren 1 – Teil 1 V10 WS 2006/2007 geordnete Strukturen Liste list Abbildung dictionary Schlange queue Menge set Feld array Stapel stack tupel string frozenset Vorrangschlange priority queue Verbund Graph Baum tree · · · gerichtet azyklisch · · · nicht geordnete Strukturen Record Union lineare Strukturen nichtlineare Strukturen Übersicht: Wichtige Datenstrukturen

Transcript of Modul: Programmierung B-PRG Grundlagen der Programmierung ... · 1 Hier wird Wissen Wirklichkeit...

Page 1: Modul: Programmierung B-PRG Grundlagen der Programmierung ... · 1 Hier wird Wissen Wirklichkeit Modul: Programmierung B-PRG Grundlagen der Programmierung 1 –Teil 1 –V10 Graphen,

1

Hier wird Wissen Wirklichkeit

Modul: Programmierung B-PRGGrundlagen der Programmierung 1 – Teil 1 – V10

Graphen, Bäume, Halden

Prof. Dr. Detlef KrömkerProfessur für Graphische DatenverarbeitungInstitut für InformatikFachbereich Informatik und Mathematik (12)

Prof. Dr. Detlef Krömker2 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V10WS 2006/2007

geordnete

Strukturen

Listelist

Abbildungdictionary

Schlangequeue

Mengeset

Feldarray

Stapelstack

tupel

string

frozenset

Vorrangschlangepriority queue

VerbundGraph

Baumtree

· · ·gerichtet

azyklisch

· · ·

nicht geordnete

Strukturen

Record Union

lineare

Strukturen

nichtlineare

Strukturen

Übersicht: Wichtige Datenstrukturen

Page 2: Modul: Programmierung B-PRG Grundlagen der Programmierung ... · 1 Hier wird Wissen Wirklichkeit Modul: Programmierung B-PRG Grundlagen der Programmierung 1 –Teil 1 –V10 Graphen,

2

Prof. Dr. Detlef Krömker3 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V10WS 2006/2007

Unser heutiges Lernziel

Die „Brot und Butter“ Datenstruktur

Baum kennen lernen.

Eine spezielle Klasse „Baum“

realisieren.

Einordnung und Spezialisierung des

Datentyps Baum kennenlernen.

Graph

Baumtree

M-Way

binary tree

Haldeheap

quadtree octtree

· · ·

· · ·

Suchbaumsearch tree

gerichtet

azyklisch

B-Tree

Prof. Dr. Detlef Krömker4 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V10WS 2006/2007

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'Alembertund Denis Diderot

Page 3: Modul: Programmierung B-PRG Grundlagen der Programmierung ... · 1 Hier wird Wissen Wirklichkeit Modul: Programmierung B-PRG Grundlagen der Programmierung 1 –Teil 1 –V10 Graphen,

3

Prof. Dr. Detlef Krömker5 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V10WS 2006/2007

Wo sind wir in Teil1?

V 0 Begrüßung und Einführung----V 1 Daten – Information – WissenV 2 Computer – Algorithmus – ProgrammV 3 Variablen – Datentypen – Objekte ----V 4 Elementare numerische DatentypenV 5 Zeichenketten----V 6 Verzweigungen und SchleifenV 7 Prozeduren----V 8 Aggregierte DatentypenV 9 KlassenV10 Graphen und BäumeV11 Bibliotheken

Prof. Dr. Detlef Krömker6 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V10WS 2006/2007

Übersicht

GraphKategorisierung von GraphenGraphen als Datenstruktur

AdjazenzmatrixInzidenzmatrixAdjazenzliste

BaumHeap

Implementierung von Bäumen

Page 4: Modul: Programmierung B-PRG Grundlagen der Programmierung ... · 1 Hier wird Wissen Wirklichkeit Modul: Programmierung B-PRG Grundlagen der Programmierung 1 –Teil 1 –V10 Graphen,

4

Prof. Dr. Detlef Krömker7 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V10WS 2006/2007

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.

Anschaulich ist ein Graph ein Gebilde aus Knoten (auch Ecken oder Punkte), die durch Kanten verbunden sein können.

Achtung: verschiedene Bilder können denselben Graphen darstellen.

Knoten

Kante

Prof. Dr. Detlef Krömker8 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V10WS 2006/2007

Kategorisierung von Graphen

ungerichtete Graphen ohne Mehrfachkanten:E ist eine Teilmenge aller 2-elementigen Teilmengen von V

gerichtete Graphen ohne Mehrfachkanten:E ist eine Teilmenge des kartesischen Produktes V x V

Digraph(Directed Graph).

schlicht oder einfach

Startknoten von e

Endknoten von e

e

Page 5: Modul: Programmierung B-PRG Grundlagen der Programmierung ... · 1 Hier wird Wissen Wirklichkeit Modul: Programmierung B-PRG Grundlagen der Programmierung 1 –Teil 1 –V10 Graphen,

5

Prof. Dr. Detlef Krömker9 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V10WS 2006/2007

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

gerichteten Graphen mit Mehrfachkanten: E ist eine Multimenge über dem kartesischen Produkt V x V

Hypergraphen eine Teilmenge der Potenzmenge von V.

(Multigraph)

(Multigraph)

Prof. Dr. Detlef Krömker10 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V10WS 2006/2007

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.

Page 6: Modul: Programmierung B-PRG Grundlagen der Programmierung ... · 1 Hier wird Wissen Wirklichkeit Modul: Programmierung B-PRG Grundlagen der Programmierung 1 –Teil 1 –V10 Graphen,

6

Prof. Dr. Detlef Krömker11 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V10WS 2006/2007

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)

Prof. Dr. Detlef Krömker12 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V10WS 2006/2007

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.

Hypergraphen lassen sich nicht durch eine Adjazenzmatrix darstellen.

14

13

12

111

4321

2

3

4

1

Page 7: Modul: Programmierung B-PRG Grundlagen der Programmierung ... · 1 Hier wird Wissen Wirklichkeit Modul: Programmierung B-PRG Grundlagen der Programmierung 1 –Teil 1 –V10 Graphen,

7

Prof. Dr. Detlef Krömker13 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V10WS 2006/2007

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.

Prof. Dr. Detlef Krömker14 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V10WS 2006/2007

Adjazenzliste (2)

‣ In der Praxis verwendet man daher meist diese Form der Repräsentation.

‣ aufwändiger zu implementieren und zu verwalten, bieten aber eineReihe 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.

Page 8: Modul: Programmierung B-PRG Grundlagen der Programmierung ... · 1 Hier wird Wissen Wirklichkeit Modul: Programmierung B-PRG Grundlagen der Programmierung 1 –Teil 1 –V10 Graphen,

8

Prof. Dr. Detlef Krömker15 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V10WS 2006/2007

Inzidenzmatrix (seltener genutzt)

‣ Ein Graph mit n Knoten und m Kanten kann auch durch eine n×m-Matrix 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).

Prof. Dr. Detlef Krömker16 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V10WS 2006/2007

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.

Page 9: Modul: Programmierung B-PRG Grundlagen der Programmierung ... · 1 Hier wird Wissen Wirklichkeit Modul: Programmierung B-PRG Grundlagen der Programmierung 1 –Teil 1 –V10 Graphen,

9

Prof. Dr. Detlef Krömker17 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V10WS 2006/2007

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).

Prof. Dr. Detlef Krömker18 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V10WS 2006/2007

Eigenschaften

die lineare Struktur der Liste wird aufgebrochen.

Der maximale Ausgangsgrad wird als Ordnung eines Out-Treesbezeichnet

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.

Page 10: Modul: Programmierung B-PRG Grundlagen der Programmierung ... · 1 Hier wird Wissen Wirklichkeit Modul: Programmierung B-PRG Grundlagen der Programmierung 1 –Teil 1 –V10 Graphen,

10

Prof. Dr. Detlef Krömker19 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V10WS 2006/2007

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-TreeKnoten bezeichnet, die den gleichen Vater besitzen.

Prof. Dr. Detlef Krömker20 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V10WS 2006/2007

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.

Page 11: Modul: Programmierung B-PRG Grundlagen der Programmierung ... · 1 Hier wird Wissen Wirklichkeit Modul: Programmierung B-PRG Grundlagen der Programmierung 1 –Teil 1 –V10 Graphen,

11

Prof. Dr. Detlef Krömker21 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V10WS 2006/2007

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 Richtungder Blätter zu oder bleiben gleich.

Prof. Dr. Detlef Krömker22 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V10WS 2006/2007

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ättermit Höhe n die Länge des Pfades zu einem tiefsten Knoten bezeichnet wird.

Page 12: Modul: Programmierung B-PRG Grundlagen der Programmierung ... · 1 Hier wird Wissen Wirklichkeit Modul: Programmierung B-PRG Grundlagen der Programmierung 1 –Teil 1 –V10 Graphen,

12

Prof. Dr. Detlef Krömker23 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V10WS 2006/2007

Eine wichtige Operation auf Bäumen: Linearisierung oder Traversierung

‣ 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

Es gibt verschiedene Möglichkeiten, die Knoten von Binärbäumen zu durchlaufen. Diesen Prozess bezeichnet man auch als Linearisierungoder Traversierung. Man unterscheidet hier in:

Prof. Dr. Detlef Krömker24 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V10WS 2006/2007

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.

Page 13: Modul: Programmierung B-PRG Grundlagen der Programmierung ... · 1 Hier wird Wissen Wirklichkeit Modul: Programmierung B-PRG Grundlagen der Programmierung 1 –Teil 1 –V10 Graphen,

13

Prof. Dr. Detlef Krömker25 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V10WS 2006/2007

Rekursive Implementierungen

Funktion Preorder (Baum)W <- Baum.Wurzel //W:= Wurzel des übergebenen BaumesIf Baum.Links <> NULL //Existiert ein linker Unterbaum?

L <- Preorder(Baum.Links) // dann: L:= Preorder von linkem UnterbaumIf Baum.Rechts <> NULL //Existiert ein rechter Unterbaum?

R <- Preorder(Baum.Rechts) // dann: R:= Preorder von rechtem UnterbaumReturn W°L°R //Rückgabe: Verkettung aus W, L und R

Funktion Inorder (Baum)W <- Baum.Wurzel /W:= Wurzel des übergebenen BaumesIf Baum.Links <> NULL //Existiert ein linker Unterbaum?

L <- Inorder(Baum.Links) // dann: L:= Inorder von linkem UnterbaumIf Baum.Rechts <> NULL //Existiert ein rechter Unterbaum?

R <- Inorder(Baum.Rechts) // dann: R:= Inorder von rechtem UnterbaumReturn L°W°R //Rückgabe: Verkettung aus L, W und R

Funktion Postorder (Baum)W <- Baum.Wurzel //W:= Wurzel des übergebenen BaumesIf Baum.Links <> NULL //Existiert ein linker Unterbaum?

L <- Postorder(Baum.Links) // dann: L:= Postorder von linkem UnterbaumIf Baum.Rechts <> NULL //Existiert ein rechter Unterbaum?

R <- Postorder(Baum.Rechts) // dann: R:= Postorder von rechtem UnterbaumReturn L°R°W //Rückgabe: Verkettung aus L, R und W

Prof. Dr. Detlef Krömker26 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V10WS 2006/2007

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 ;-)

Page 14: Modul: Programmierung B-PRG Grundlagen der Programmierung ... · 1 Hier wird Wissen Wirklichkeit Modul: Programmierung B-PRG Grundlagen der Programmierung 1 –Teil 1 –V10 Graphen,

14

Prof. Dr. Detlef Krömker27 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V10WS 2006/2007

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, indemman statt Arrays dynamische Listen verwendet (z. B. in Python).

Häufig besitzen die Knoten auch eine Referenz auf ihren Elternknoten (back pointer).

Prof. Dr. Detlef Krömker28 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V10WS 2006/2007

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.

Page 15: Modul: Programmierung B-PRG Grundlagen der Programmierung ... · 1 Hier wird Wissen Wirklichkeit Modul: Programmierung B-PRG Grundlagen der Programmierung 1 –Teil 1 –V10 Graphen,

15

Prof. Dr. Detlef Krömker29 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V10WS 2006/2007

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 Speicherungvon 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.

Prof. Dr. Detlef Krömker30 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V10WS 2006/2007

Übersicht ... zur Implementierung

Implementierung mit einer dynamischen Liste in Python „einfach“ und effizient möglich � Übung

Wir betrachten eine Variante zur Übung ... Programmierung einer Klasse!

Graph

Baumtree

M-Way

binary tree

Haldeheap

quadtree octtree

· · ·

· · ·

Suchbaumsearch tree

gerichtet

azyklisch

B-Tree· · ·

Page 16: Modul: Programmierung B-PRG Grundlagen der Programmierung ... · 1 Hier wird Wissen Wirklichkeit Modul: Programmierung B-PRG Grundlagen der Programmierung 1 –Teil 1 –V10 Graphen,

16

Prof. Dr. Detlef Krömker31 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V10WS 2006/2007

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 frommodule 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)

Prof. Dr. Detlef Krömker32 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V10WS 2006/2007

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 selfgenannt.

(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).

Page 17: Modul: Programmierung B-PRG Grundlagen der Programmierung ... · 1 Hier wird Wissen Wirklichkeit Modul: Programmierung B-PRG Grundlagen der Programmierung 1 –Teil 1 –V10 Graphen,

17

Prof. Dr. Detlef Krömker33 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V10WS 2006/2007

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))

Prof. Dr. Detlef Krömker34 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V10WS 2006/2007

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"

Page 18: Modul: Programmierung B-PRG Grundlagen der Programmierung ... · 1 Hier wird Wissen Wirklichkeit Modul: Programmierung B-PRG Grundlagen der Programmierung 1 –Teil 1 –V10 Graphen,

18

Prof. Dr. Detlef Krömker35 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V10WS 2006/2007

Implementierung eines binären Suchbaums (3)

def add(self, data):if self.root == None:

self.root = Node(data)else:

curnode = self.rootlastnode = self.rootwhile curnode != None:

lastnode = curnodeif data < curnode.data:

curnode = curnode.leftdirection = -1 # links einfügen

else:curnode = curnode.rightdirection = +1 # rechts einfügen

if direction == -1:lastnode.left = Node(data)

else:lastnode.right = Node(data)

Prof. Dr. Detlef Krömker36 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V10WS 2006/2007

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))'

Page 19: Modul: Programmierung B-PRG Grundlagen der Programmierung ... · 1 Hier wird Wissen Wirklichkeit Modul: Programmierung B-PRG Grundlagen der Programmierung 1 –Teil 1 –V10 Graphen,

19

Prof. Dr. Detlef Krömker37 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V10WS 2006/2007

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!

Prof. Dr. Detlef Krömker38 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V10WS 2006/2007

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!)

Page 20: Modul: Programmierung B-PRG Grundlagen der Programmierung ... · 1 Hier wird Wissen Wirklichkeit Modul: Programmierung B-PRG Grundlagen der Programmierung 1 –Teil 1 –V10 Graphen,

20

Prof. Dr. Detlef Krömker39 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V10WS 2006/2007

Fragen und (hoffentlich) Antworten

Prof. Dr. Detlef Krömker40 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V10WS 2006/2007

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!