• Keine Ergebnisse gefunden

1. Aufgabe: Absteigende Sortierung mit dem Radix Exchange - Verfahren

N/A
N/A
Protected

Academic year: 2021

Aktie "1. Aufgabe: Absteigende Sortierung mit dem Radix Exchange - Verfahren"

Copied!
6
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

− 2 −

1. Aufgabe: Absteigende Sortierung mit dem Radix Exchange - Verfahren

a) Das Verfahren Radix Exchange Sort aus der Vorlesung soll so modifiziert werden, dass es eine Liste absteigend sortiert. Geben Sie eine kurze verbale Beschreibung des so modifizierten Verfahrens an:

b) Führen Sie das in a) beschriebene Verfahren anhand der folgenden Beispieldaten durch.

Erläutern Sie die Einzelschritte so, dass sich das Vorgehen nachvollziehen lässt. (zu ver- tauschende ltems unterstreichen, Kommentartext

1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Kommentar:

1100 0111 1001 0110 1100 0100 0010 1000 0001 1110

(2)

c) Modifizieren Sie das hier abgedruckte Radix Exchange-Verfahren aus der Vorlesung, so dass es eine absteigend sortierte Liste liefert.

unsigned Z(unsigned k, int i) { return (k >> i) & 0x0001;}

void RadixSort (int *A, int left, int right, int b) {

int i, j;

int item;

if ((left<right) && (b>=0)) { i = left; j = right;

while (i != j) {

while (Z(A[i],b)==0 && (i<j)) i++;

while (Z(A[j],b)!=0 && (j>i)) j--;

item = A[i];

A[i] = A[j];

A[j] = item;

}

if (Z(A[right],b) == 0) j++;

RadixSort (A,left, j-1,b-1);

RadixSort (A,j, right,b-1);

} }

(3)

− 4 −

2. Aufgabe: Löschen mit dem symmetrischen Vorgänger

Modifizieren Sie das Löschen in einem binären Suchbaum, das in der Vorlesung verwendet wurde so, daß im Falle eines Schlüsseltausches der symmetrische Vorgänger verwendet wird statt des symmetrischen Nachfolgers.

void Tree::deleteNode (int delKey) { delNode (&root, delKey); }

void Tree::delNode (Node **root, int delKey) { Node *pred;

Node *toDel;

if(*root == NULL) ; else

{ if (delKey < (*root)->key)

delNode (&((*root)->left), delKey);

else

{ if (delKey > (*root)->key )

delNode (&((*root)->right), delKey);

else

{ if ((*root)->left == NULL ) { toDel = *root;

*root = (*root)->right;

} else

{ if ((*root)->right == NULL) { toDel = *root;

*root = (*root)->left;

} else

{ pred = PredsymSucc(*root);

if ( pred == *root ) { toDel = pred->right;

(*root)->key = pred->right->key;

(*root)->right = (*root)->right->right;

}

else

{ toDel = pred->left;

(*root)->key = pred->left->key;

pred->left = pred->left->right;

}

} }

cout << "\nKnoten " << delKey << " wird geloescht !\n\n";

delete toDel;

} } } }

Node *Tree::PredsymSucc (Node *node) { if (node->right->left != NULL)

{ node = node->right;

while (node->left->left != NULL) node = node->left;

}

return(node);

}

(4)

3. Aufgabe: AVL-Bäume

Verwenden Sie in den folgenden Teil-Aufgaben die Algorithmen aus der Vorlesung zum Löschen und Einfügen in AVL-Bäumen. Geben Sie bei den folgenden Aufgaben jeweils an:

– den Zwischenzustand nach dem Löschen – den Endzustand nach dem Ausgleich an.

– welche Ausgleichsoperation benutzt wurde und warum diese gewählt wurde (welche Situation der Fallunterscheidungen in der Vorlesung vorliegt).

Gegeben ist der folgende AVL-Baum B als Ausgangspunkt für jede der in a) und b) ge- forderten Operationen.

a) Löschen Sie den Schlüssel mit dem Wert 937 in dem obigen AVL-Baum B.

b) Fügen Sie den Schlüssel mit dem Wert 137 in den obigen AVL-Baum B ein.

c) Ein binärer Suchbaum hat 300 innere Knoten und die Höhe 12.

Kann dieser Baum ein AVL-Baum sein ? Begründen Sie Ihre Antwort ! 404

15

3 293

182

848

626 959

11 347 937

71 237

(5)

− 6 − 4. Aufgabe: B-Bäume

a) Für den Zugriff auf die Sätze in einer Datei soll eine B-Baum-Struktur der Ordnung 100 verwendet werden. Wieviele Datensätze können höchstens verwaltet werden, wenn die Höhe des B-Baumes dabei maximal 4 werden darf ? Begründen Sie Ihre Antwort

b) Löschen Sie in dem folgenden B-Baum der Ordnung m=3 das Item mit dem Schlüssel 60 unter Zuhilfenahme des symmetrischen Vorgängers. Geben Sie dabei die Zwischen- schritte so an, so daß Ihr Vorgehen nachvollziehbar wird und erläutern Sie kurz jeden Schritt.

70

90 144 60

156 178 92

80 82 64

30

(6)

5. Aufgabe: Hashing mit der Kollisionsstrategie „Random Probing“

Die Kollisionsstrategie „Random Probing“ verwendet im Kollisionsfall eine Folge von Hash- Funktionen, die wie folgt definiert ist:

H

o

(k)= k mod m

H

i

(k)= (H

o

(k) + r

i

) mod m für i = 1, 2, 3, ...

Dabei werden die

r

i einer Folge von Zufallszahlen entnommen, die mit dem folgenden Zu- fallszahlengenerator erzeugt werden:

r

o

= 4

r

i+1

= (1 +11∗r

i

) mod m für i = 0, 1, 2, 3, ...

Für das Folgende wählen wir für die Tabellengröße m=17.

a) Verwenden Sie diese Methode, um die Buchstaben des Textes R A N D O M P R O B I N G

in die unten stehende Hash-Tabelle einzuordnen. Die Buchstaben der Zeichenfolge sollen einzeln in der Reihenfolge, in der sie im Text vorkommen, in die Hash-Tabelle eingeordnet werden. Gehen Sie dazu von der folgenden Zuordnung der Buchstaben zu numerischen Werten aus:

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26

b) Markieren Sie dabei die Positionen, an denen Kollisionen auftreten.

c) Wie viele Kollisionen treten insgesamt auf ?

Index 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

HashTabelle Einfüge-Schritt

Nr.

Anzahl der Kollisionen: _____________

Referenzen

ÄHNLICHE DOKUMENTE

Bei Dislokation eines Zahnes in den Sinus maxillaris oder bei einer Wurzelfraktur mit Verdacht auf die mögliche Dislokation des Wurzelfragmentes in den Sinus sollte

In the present chapter we will repeat basic definitions first introduced by Attila Peth˝ o and Peter Varga which allow to define Shift Radix Systems in the sense of Chapter 3 and

Wir betrachten in dieser Aufgabe einen Datenbereich, welcher natürliche Zahlen und Listen von natürlichen Zahlen umfasst. Gegeben sind dazu die folgenden Prädikate

(Mit B¨ aumen oder, wenn Sie viel Zeit und Geduld haben, ohne B¨ aume.). Besprechung der ¨ Ubungsaufgaben

Universit¨ at T¨ ubingen T¨ ubingen, den 23.01.2017 Mathematisches

Nutzen Sie die a posteriori Fehlerabsch¨atzung aus Aufgabe 9.4c zum Abbruch der Iteration.. (c) Ab welchem Schritt beobachten Sie

Wie viele Flaschen Orangensaft kann die Firma maximal produzieren, ohne dabei das Budget zu überschreiten. Für welchen Preis sollte eine Flasche Orangensaft

However, the tatonnement process assumes that there is no trading before the prices reach the equilibrium prices, which is extremely unrealistic since in the markets of the re- al