aufg9_loes - oth

Werbung
Fachhochschule Regensburg
Ausgeglichene binäre Suchbäume
Splay-Baum
9. Aufgabenblatt
Algorithmen und Datenstrukturen
Name: ________________________
Aufgabensteller: Prof. Sauer
Vorname: _____________________
1. Aufgabe: Splay-Baum
Welche Gestalt nimmt ein nach der in der 8. Übung angegebenen Regeln aufgebauter Splay-Baum nach Eingabe
der Zahlen „ 1 2 3 4 5 6 7 8 9 10 11 12 0“ an?
2. Aufgabe: Splay-Baum
Gegeben ist die Zahlenfolge 10 20 30 40 50.
1. In dieser Reihenfolge werden die Zahlen in das unter der Übung 8 angegebene Programm zum Erzeugen eines
Splay-Baums angegeben und in einen Splay-Baum eingefügt.
a) Welche Gestalt nimmt der Splay-Baum jeweils nach Eingabe der Zahlen an?
b) Führe einen Schreibtischtest mit dem in Übung 8 angegebenen Programm aus. Gib zu diesem Schreibtischtest
alle Aufrufe von Programmbestandteilen an und zeige anhand von Darstellung der Baumstruktur jegliche
Veränderung der Baumgestalt an.
2. Führe, nachdem der Splay-Baum erstellt wurde, den Zugriff auf dem kleinsten Schlüssel und danach auf den
größten Schlüssel durch.
a) Welche Gestalt nimmt der Splay-Baum jeweils nach den Zugriffen an?
b) Zeige mit einem Schreibtischtest, der alle Aufrufe von Programmbestandteilen aus dem Programm der Übung
8 auflistet, wie die Gestalt des Baums sich entwickelt. Falls dabei der Baum bis zum endgültigen Resultat
unterschiedliche Darstellungen zeigt, gibt alle Darstellungen (Zwischenwerte) des Splay-Baums an.
3. Lösche, nachdem der Splay-Baum erstellt wurde, den kleinsten und den größten Schlüssel
a) Welche Gestalt nimmt der Splay-Baum jeweils nach dem Löschen an?
b) Zeige mit einem Schreibtischtest, der alle Aufrufe von Programmbestandteilen aus dem Programm der Übung
8 auflistet, wie die Gestalt des Baums sich entwickelt. Falls dabei der Baum bis zum endgültigen Resultat
unterschiedliche Darstellungen zeigt, gibt alle die Darstellungen (Zwischenwerte)des Splay-Baums an.
Lösungen
1. Aufgabe
Welche Gestalt nimmt ein nach der in der 8. Übung angegebenen Regeln aufgebauter Splay-Baum nach Eingabe
der Zahlen „ 1 2 3 4 5 6 7 8 9 10 11 12 0“ an?
1
1
2
2
1
3
3
2
1
4
4
3
2
1
1
5
5
4
3
2
1
6
6
5
4
3
2
1
7
7
6
5
4
3
2
1
...
12
12
11
10
9
8
7
6
5
4
3
2
1
0
0
1
11
9
7
5
3
2
12
10
8
6
4
2. Aufgabe: Splay-Baum
Gegeben ist die Zahlenfolge 10 20 30 40 50.
1. In dieser Reihenfolge werden die Zahlen in das unter der Übung 8 angegebene Programm zum Erzeugen eines
Splay-Baums angegeben und in einen Splay-Baum eingefügt.
a) Welche Gestalt nimmt der Splay-Baum jeweils nach Eingabe der Zahlen an?
10
10
20
20
10
30
30
20
10
40
40
30
20
10
50
50
40
30
20
10
b) Führe einen Schreibtischtest mit dem in Übung 8 angegebenen Programm aus. Gib zu diesem Schreibtischtest
alle Aufrufe von Programmbestandteilen an und zeige anhand von Darstellung der Baumstruktur jegliche
Veränderung der Baumgestalt an.
2. Führe, nachdem der Splay-Baum erstellt wurde, den Zugriff auf dem kleinsten Schlüssel und danach auf den
größten Schlüssel durch.
a) Welche Gestalt nimmt der Splay-Baum jeweils nach den Zugriffen an?
Zugriff auf das kleinste Element:
10
40
20
50
30
Zugriff auf das größte Element:
50
40
10
20
30
b) Zeige mit einem Schreibtischtest, der alle Aufrufe von Programmbestandteilen aus dem Programm der Übung
8 auflistet, wie die Gestalt des Baums sich entwickelt. Falls dabei der Baum bis zum endgültigen Resultat
unterschiedliche Darstellungen zeigt, gibt alle Darstellungen (Zwischenwerte) des Splay-Baums an.
3. Lösche, nachdem der Splay-Baum mit der Zahlenfolge 10, 20, 30, 40, 50 erstellt wurde, den kleinsten und den
größten Schlüssel
a) Welche Gestalt nimmt der Splay-Baum jeweils nach dem Löschen an?
Löschen 10
40
20
50
30
Löschen 50
40
20
30
b) Zeige mit einem Schreibtischtest, der alle Aufrufe von Programmbestandteilen aus dem Programm der Übung
8 auflistet, wie die Gestalt des Baums sich entwickelt. Falls dabei der Baum bis zum endgültigen Resultat
unterschiedliche Darstellungen zeigt, gibt alle die Darstellungen (Zwischenwerte)des Splay-Baums an.
9. Aufgabenblatt
Aufgabe 2b. alternativ
Schreibtischtest Splay - Baum (10 20 30 40 50)
Einfuegen
Zahl?
eingabeZeile = eingabe.readLine();
 10
b.insert(new Integer(zahl));
if( newNode == null )
newNode = new BinaerBaumknoten( null );
newNode.daten = x;
if( root == nullNode )
newNode.links = newNode.rechts =
nullNode;
root = newNode;
newNode = null;
// So next insert will call
new
b.ausgBinaerbaum(b.holeWurzel(),2);
// hole Wurzel
return root;
// public void ausgBinaerbaum(BinaerBaumknoten
b, int stufe)
if (b != b.links)
ausgBinaerbaum(b.links,stufe + 3);
for (int i = 0; i < stufe; i++)
System.out.print(' ');
System.out.println(b.daten.toString());
ausgBinaerbaum(b.rechts,stufe + 3);
Ausgabe:
while (eingabeZeile
!= "");
10
Zahl?
eingabeZeile = eingabe.readLine();
 20
b.insert(new Integer(zahl));
if( newNode == null )
newNode = new BinaerBaumknoten( null );
newNode.daten = x;
if( root == nullNode )
else
root = splay( x, root );
else if( x.compareTo( root.daten ) > 0 )
newNode.rechts = root.rechts;
newNode.links = root;
root.rechts = nullNode;
root = newNode;
newNode = null;
// So next insert will call new
b.ausgBinaerbaum(b.holeWurzel(),2);
s.o.
10
Ausgabe:
20
Zahl?
eingabeZeile = eingabe.readLine();
 30
b.insert(new Integer(zahl));
s.o.
b.ausgBinaerbaum(b.holeWurzel(),2);
s.o.
Ausgabe:
10
20
10
Zahl?
 40
eingabeZeile = eingabe.readLine();
b.insert(new Integer(zahl));
s.o.
b.ausgBinaerbaum(b.holeWurzel(),2);
s.o.
Ausgabe:
10
20
30
40
Zahl?
 50
eingabeZeile = eingabe.readLine();
b.insert(new Integer(zahl));
s.o.
b.ausgBinaerbaum(b.holeWurzel(),2);
s.o.
Ausgabe:
10
20
30
40
50
Löschen
Zahl?

eingabeZeile = eingabe.readLine();
10
b.remove(new Integer(zahl));
root = splay( x, root );
if( root.daten.compareTo( x ) != 0 )
if( root.links == nullNode )
neuerBaum = root.rechts;
root = neuerBaum;
b.ausgBinaerbaum(b.holeWurzel(),2);
if (b != b.links)
ausgBinaerbaum(b.links,stufe + 3);
for (int i = 0; i < stufe; i++)
System.out.print(' ');
Ausgabe:
20
40
30
50
Zahl?

eingabeZeile = eingabe.readLine();
b.remove(new Integer(zahl));
s.o
b.ausgBinaerbaum(b.holeWurzel(),2);
s.o
Ausgabe:
30
40
50
20
Zahl?
eingabeZeile = eingabe.readLine();

30

40
b.remove(new Integer(zahl));
s.o
b.ausgBinaerbaum(b.holeWurzel(),2);
s.o
Ausgabe:
40
50
Zahl?
eingabeZeile = eingabe.readLine();
b.remove(new Integer(zahl));
s.o
b.ausgBinaerbaum(b.holeWurzel(),2);
s.o
Ausgabe:
50
Herunterladen