Datenstrukturen Teil 2 - FB2

Werbung
Definition
●
Bäume sind verallgemeinerte Listen
–
Datenstrukturen Teil 2
●
Bäume
●
Jeder Knoten kann mehrere Nachfolger
haben
Sie sind weiter spezielle Graphen
–
Graphen bestehen aus Knoten und Kanten
–
Kanten können gerichtet und ungerichtet sein
–
Graphen können zyklisch oder azyklisch sein
Ein Baum ist ein azyklischer
zusammenhängender Graph
–
Alle Knoten sind durch Kanten miteinander
ohne „Kreis“ verbunden
Definition
●
Bäume werden als Datenstruktur zur
hierarchischen Gliederung von Daten
genutzt
Definition
●
Bäume (als Graphen) können
–
Ungerichtet sein (keine dedizierte Wurzel)
5
6
4
–
Suchbäume
–
Entscheidungsbäume
–
Codierungsbäume
–
–
●
Grammatikbäume
Etc.
Viele wichtige und elementare Algorithmen
nutzen Bäume -> Sehr wichtige
Datenstruktur
1
3
2
–
Gewurzelt sein (dedizierter Wurzelknoten)
Wurzel
4
5
6
3
1
2
Definition
●
Bäume haben die Eigenschaften:
–
Von jedem Knoten gibt es genau einen Pfad
zurück zur Wurzel
–
Vater (Vorgänger) eines Knotens ist der
direkte Nachbar auf dem Pfad vom Knoten
zur Wurzel
–
Kinder (Nachfolger) sind alle anderen
Nachbarn des Knotens
–
Nachbar bedeutet hier, ein durch eine Kante
mit dem Knoten verbundener anderer Knoten
Definition
●
Die Wurzel eines Baumes ist der einzige
Knoten ohne Vorgänger
●
Knoten ohne Nachfolger nennt man Blätter
●
Alle anderen Knoten eines Baumes
heissen innere Knoten
●
Im allgemeinen bezeichnet „Baum“ einen
Wurzelbaum, meist sogar einen
gerichteten
Definition der Eigenschaften von
Bäumen
Beispiele
Baum
kein Baum
kein Baum
(aber zwei Bäume)
●
Tiefe eines Knotens / Blatts: Anzahl der
Kanten von der Wurzel bis zum Knoten
●
Höhe eines Baumes: Die größte Tiefe
eines Knotens des Baumes
●
Niveau x: Alle Knoten mit der Tiefe x
●
Vollständiger Baum: Alle Blätter haben die
selbe Tiefe
Definition der Eigenschaften von
Bäumen
●
Ordnung eines Baumes
–
Wird durch eine Relation zwischen den
Knoten eines Baumes definiert
–
Beispiel: < - Relation auf Niveauebene
●
Anwendungsbeispiel Suchbaum
●
Basis ist ein binärer Baum
●
Jeder Knoten hat max. 2 Nachfolger
●
Jeder Knoten hat drei Datensätze:
Bedeutet, dass jeder Niveaunachbar auf der
linken Seite eines Knotens einen kleineren
Datenwert enthält, als der Knoten selbst
5
3
<
<
8
9 < 19
●
Der Baum soll die < - Ordnung auf
Niveaunachbarebene besitzen
●
Damit kann ein effizienter
Suchalgorithmus implementiert werden
27
15
14
Ein Verweis (Zeiger) auf den linken
Nachfolger
–
Ein Verweis(Zeiger) auf den rechten
Nachfolger
Anwendungsbeispiel Suchbaum
●
39
1
–
35
Anwendungsbeispiel Suchbaum
3
Das eigentliche Datum (z.B. ein Integer)
17
<
Wurzel
–
Der Suchalgorithmus im Pseudocode:
k = wurzel;
while (k != null) {
if (s == k.key) return true;
if (s < k.key)
k = k.left;
else
k = k.right
}
return false;
Anwendungsbeispiel Suchbaum
●
Ablauf:
–
Wurzel wird als Startknoten angegeben
–
Der Suchwert wird mit dem im Knoten
gespeicherten Wert verglichen
–
Bei Gleichheit bricht der Algorithmus
erfolgreich ab
–
Gespeicherter Wert größer -> Nächster
Knoten der linke Nachfolger
–
Gespeicherter Wert kleiner -> Nächster
Knoten der rechte Nachbar
–
Gibt es keinen Nachfolger mehr, bricht der
Algorithmus ohne Ergebnis ab
Anwendungsbeispiel Suchbaum
●
Codebeispiel für Datenstruktur
class SearchNode {
int content;
SearchNode left;
SearchNode right;
SearchNode (int c){
// Konstruktor
content = c;
// Nachfolger resetten
left = right = null;
}
}
class SearchTree
SearchNode
SearchTree
root =
}
}
{
root;
() { // Konstruktor fuer leeren Baum
null;
Anwendungsbeispiel Suchbaum
●
Codebeispiel für Suche
Operationen im Baum
●
/* Suche nach c im Baum */
boolean search (int c) {
return search (root, c);
}
boolean search (SearchNode n, int c){
while (n != null) {
if (c == n.content) return true;
if (c < n.content) n = n.left;
else n = n.right;
}
return false;
}
●
Alle Operationen (Einfügen, Löschen,
Sortieren) sind abhängig von
–
Der Art des Baums (binär oder höher)
–
Der Ordung
–
Der Zusatzanforderungen (z.B. balanciert)
Einfügen
–
Erklärung am vorangegangenen Beispiel
–
Suche zunächst nach dem neuen Wert um
Doppeleinträge zu vermeiden
–
Wird der neue Wert nicht gefunden, wird er
an das letzte Blatt der Suche angehängt
Operationen im Baum - Einfügen
●
Operationen im Baum - Einfügen
Im Binärbaum mit < - Ordnung wird der
Wert 5 eingefügt
●
Dieses „naive“ Einfügen kann zur
Entartung des Baumes führen
Einfügen 5
●
Reihenfolge des Einfügens definiert die
Struktur des Baumes
9
3
12
9
3
4
12
1
4
3
5
15
14
–
Ablauf: Wurzel->Vergleich mit 5 -> 9 > 5 ->
Linker Knoten->Vergleich mit 5 -> 3 < 5 ->
rechter Knoten->Vergleich mit 5 -> 4 < 5 ->
eigentlich nun rechten Knoten vergleichen ->
existiert nicht -> 5 als rechten Knoten
einfügen
Operationen im Baum - Entfernen
• Entfernen eines Knotens k mit Wert s aus einem Baum
(Beibehaltung der Suchbaum Eigenschaft)
• Suche nach s, falls nicht da: fertig; sonst endet die Suche
mit Knoten k und
• k hat keinen, einen oder zwei Söhne:
• (a) kein Sohn: fertig, Vater bekommt Zeiger auf null
• (b) nur ein Sohn ist da : lasse Vater v von k darauf statt
auf k zeigen
• (c) zwei Söhne: suche kleinsten Wert in rechtem
Teilbaum, d.h. mache einen Schritt nach rechts und beliebig
viele nach links bis zu p (symmetrischer Nachfolger von k);
kopiere Wert s von p nach k, lösche p (max. einen Sohn,
also nach a, b behandeln)
3
39
15
1
14
27
27
15, 39, 3, 27, 1, 14
39
1, 3, 14, 15, 27, 39
Herunterladen