Programmierung und Programmiersprachen Sommersemester 2006

Werbung
Programmierung und Programmiersprachen
Sommersemester 2006
Lehrstuhl für Angewandte Telematik / e-Business
Institut für Informatik
Universität Leipzig
Stiftungslehrstuhl der Deutschen Telekom AG
[email protected]
www.lpz-ebusiness.de
+49 (341) 97 323 30
PuPS
22.05.2006
Übungsgruppen - Update
• # Tag Woche Uhrzeit
Raum Betreuer
• 1 Mo, gerade 09:15-10:45 SG 3-07 Vincent Wolff-Marting
• 2 Mo, ungerade 09:15-10:45 SG 3-07 Vincent Wolff-Marting
• 3 Mi, gerade 13:15-14:45 SG 3-03 Tobias Brückmann
• 4 Mi, ungerade 13:15-14:45 SG 3-03* Tobias Brückmann
* war zuvor SG 3-97 und davor schon einmal SG 3-03
• 5 Do, gerade 11:15-12:45 SG 3-01 Ralf Laue
• 6 Do, ungerade 11:15-12:45 SG 3-01 Ralf Laue
• 7 Fr, gerade 07:30-09:00 SG 3-11 Matthias Book
• 8 Fr, ungerade 07:30-09:00 Klostergasse 3 Matthias Book
PuPS
2
AVL-Bäume
• AVL-Bäume sind per Definition binäre Suchbäume. Das
Suchen funktioniert also mit den diskutierten Algorithmen.
Auf Grund der besseren Balancierung sind die für AVLBäume sehr schnell.
• Dafür werden die Algorithmen zum Einfügen und Löschen
aufwändiger, denn es gilt ja, die AVL-Eigenschaft
beizubehalten.
• Das Vorgehen ist dabei, dass traditionell (also wie bei
beliebigen binären Suchbäumen) eingefügt/gelöscht wird
und dass dann die AVL-Eigenschaft mit so genannten
Baumtransformationen (namens Rotation und
Doppelrotation) wieder hergestellt werden kann.
• Vorgehen dazu im Schema
PuPS
3
2-3-4-Bäume
• Ein binärer Suchbaum enthält Knoten mit einem Schlüssel
(und den dazugehörenden Daten) sowie Verweise auf 2
Teilbäume. Ein solcher Knoten wird auch 2-Knoten genannt.
• Def.: Binäre Suchbäume werden 2-Bäume genannt, wenn
sie nur 2-Knoten enthalten und alle Blätter auf einer Ebene
sind (optimale Balancierung!)
• Analog:
• 3-Knoten enthalten 2 Schlüssel und 3 Verweise auf Teilbäume
• 4-Knoten enthalten 3 Schlüssel und 4 Verweise auf Teilbäume
• n-Knoten enthalten n-1 Schlüssel und n Verweise auf Teilbäume
Def: 2-3-Bäume und 2-3-4-Bäume
Beispiel
PuPS
4
B-Bäume
• B-Bäume wurden 1972 von Bayer und McCreight
eingeführt.
• B-Bäume sind eine Verallgemeinerung von 2-3- und 2-3-4Bäumen.
• Effiziente Anwendbarkeit für große Datenbestände, die
überwiegend auf externen Datenträgern zur Verfügung
stehen, war von besonderem Interesse.
• Im Folgenden: etwas mehr zu B+-Bäumen.
PuPS
5
B+-Bäume
• B+-Bäume zeichnen sich dadurch aus, dass Datensätze nur
in den Blättern stecken (nicht in den inneren Knoten!).
Innere Knoten enthalten nur Schlüssel.
• In einer typischen Anwendung können die inneren Knoten
im Hauptspeicher gehalten werden, während sich die
Datensätze auf externen Speichermedien befinden.
• Def.:
• Anwendungsbeispiel:
PuPS
6
Vollständige Bäume
• Definition: Ein binärer Baum B heißt vollständiger Baum,
wenn er die folgende Form hat:
• Für jedes k mit k < Tiefe (B) gilt:
• Die k-te Schicht ist voll besetzt (d.h. B besitzt 2 k-1 Knoten der
Tiefe k)
• Die letzte Schicht ist, von links nach rechts gelesen, bis zu einem
Punkt P besetzt und darüber hinaus leer.
PuPS
7
Graphen
PuPS
8
Allgemeines zu Graphen
• Eine der originären Anwendungen von Graphen ist die
Darstellung räumlicher Beziehungen. Bäume reichen hier
nicht aus, weil es Beziehungen zwischen allen Knoten
geben kann.
• Oft ist es so, dass den Kanten zwischen zwei Knoten
auch noch Attribute zugeordnet werden (Kosten,
Entfernungen, etc.).
• Wenn die Beziehung zwischen zwei Knoten unabhängig
von der Richtung ist (Erreichbarkeit zwischen Orten),
dann reichen ungerichtete Kanten.
• Wenn die Beziehung von der Richtung abhängt (eine
Stellung im Schach lässt sich per Zug aus einer anderen
erreichen), dann braucht man gerichtete Kanten.
PuPS
9
Allgemeines zu Graphen
• Listen stellen eindimensionale Verkettungen von
Informationen dar: Jeder Knoten einer Liste hat einen oder
keinen Nachfolger.
• Binäre Bäume stellen eine zweidimdensionale Informationsverkettung dar: Jeder Knoten ist mit höchstens zwei Söhnen
verbunden.
• Graphen stellen für jeden Knoten dar, in welcher Weise
dieser mit anderen Knoten gerichtet (oder ungerichtet)
verbunden ist.
PuPS
10
Definition Graph
G = (V, E) heißt gerichteter Graph mit
Knotenmenge V und Kantenmenge E, falls
gilt:
V (englisch: vertex, vertices) ist eine
endliche Menge und
E (englisch: edges) ⊆ V × V
PuPS
11
Beispiel eines gerichteten Graphen
1
2
6
4
5
3
7
8
9
PuPS
12
Beispiel eines gerichteten Graphen
PuPS
13
Definition Pfad/Weg, Zyklus
• Def.: Sei G = (V, E) ein gerichteter Graph, so besteht ein
Pfad / Weg aus Knoten (p0, p1,…, pk) von p0 nach pk für
k > 0 aus Knoten p0, … , pk ∈ V, so dass jedes Paar
aufeinanderfolgender Knoten (pi, pi+1) eine Kante bildet.
Dies gilt für 0 ≤ i ≤ k-1.
• Def.: Ein Weg ist ein einfacher Weg, wenn kein Knoten
öfter als einmal vorkommt,
• Def.: Ein Semiweg ist ein Weg, wobei von der Richtung
der Kanten abgesehen wird.
• Def.: Ein Zyklus ist ein Pfad von einem Knoten zu sich
selbst.
PuPS
14
Beispiele Weg / Zyklus
PuPS
15
Definition Zusammenhang
• Def.: Ein gerichteter Graph heißt stark
zusammenhängend, wenn es zwischen je zwei Knoten
des Graphen einen Pfad gibt.
• Ein gerichteter Graph heißt schwach zusammenhängend,
wenn es zwischen zwei Knoten immer einen Semiweg
gibt.
PuPS
16
Definition Zusammenhang
• Def.: Ein Teilgraph heißt Zusammenhangskomponente,
wenn er bzgl. der Zusammenhangseigenschaft (stark
oder schwach) maximal ist, d.h. der Teilgraph kann nicht
durch einen oder mehrere Knoten und/oder eine oder
mehrere Kanten des Graphen erweitert werden, ohne
diese Eigenschaft zu verlieren.
PuPS
17
Attributierte Graphen
• Graphen heißen attributiert, wenn die Kanten über
Attribute verfügen (Kosten, Entfernungen etc.).
PuPS
18
Formal: attributierte Graphen
• Def.: (V, E, c) heißt Kostengraph, falls (V,E) ein
zusammenhängender ungerichteter Graph und c: E ->
Nat eine Abbildung ist. Für eine Teilmenge F ⊆ E von
Kanten können wir die Kosten cF für diese Kantenmenge
angeben als die Summe aller Kosten, die von den
einzelnen Kanten verursacht wird:
cF = Σf∈F c(f)
PuPS
19
Adjazenz von Knoten
•
Graphen werden rechnerintern durch Adjazenzlisten oder
Adjazenzmatrizen dargestellt werden.
•
Ist n ∈ V ein Knoten im gerichteten Graphen (V, E), so heißt
{p ∈ V; (n, p) ∈ E}
die Adjazenzliste zum Knoten n.
•
Eine Alternative zu dieser Darstellung ist die Darstellung
über Boolesche Matrizen:
Man definiere eine Matrix (ak,l)k,l ∈ V und setze:
ak,l :=((k,l) ∈ E)
PuPS
20
Beispiel Adjazenzliste
Knoten Adjazenzliste
1
2
6
4
5
3
1
5
2
1, 3
3
(leer)
4
2, 8
5
2, 3, 7, 8
6
7
8
9
PuPS
7
(leer)
8
7
9
6
21
Beispiel Adjazenzmatrix
PuPS
22
Adjazenz von Knoten in attributierten
Graphen
• In attributierten Graphen werden die Darstellungen als
Adjazenzmatrix und –liste angepasst.
• In der der Liste stehen die Kantenattribute in jedem
Element der Adjazenzliste.
• In der Matrix werden die Attribute als Eintrag
untergebracht.
PuPS
23
Beispiel attributierter Graph / Adjazenzmatrix
PuPS
24
Beispiel attributierter Graph / Adjazenzliste
PuPS
25
Adjazenz von Knoten
•
Der Platzverbrauch von Adjazenzmatrizen ist unabhängig von der
Zahl der Kanten pro Knoten. Bei n Knoten werden n2 Speicherplätze
gebraucht.
•
In Adjazenzmaztrizen lässt sich schnell prüfen, ob eine Kante
vorhanden ist (indizierter Zugriff auf zweidimensionales Array).
•
Adjazenzlisten brauchen Speicherplatz pro Kante. Wenn wenig
Kanten vorkommen, dann wird auch wenig Platz gebraucht. Bei
vielen Kanten muss man beim Suchen nach einer Kante erst eine
ggf. lange Kantenliste durchlaufen.
PuPS
26
Adjazenz von Knoten
• Deshalb folgende Daumenregel:
• Adjazenzlisten sind für Graphen mit wenig Kanten pro
Knoten geeignet.
• Adjazenzmatrizen sind für dichte Graphen geeignet.
PuPS
27
Herunterladen