• Keine Ergebnisse gefunden

Test-Aufgaben zu DA Serie 2

N/A
N/A
Protected

Academic year: 2021

Aktie "Test-Aufgaben zu DA Serie 2"

Copied!
9
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Test-Aufgaben zu DA Serie 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:

Nach dem Wert der höchstwertigen Ziffer werden zunächst zwei Teillisten gebildet, so dass die linke alle ,,großen" und die rechte alle „kleinen" Elemente enthält.

Die beiden Teillisten werden nach der selben Methode weiter unterteilt bis Teillisten der Länge 1 entstanden sind. Die Gesamtliste ist dann absteigende sortiert.

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 höchstwertige Ziffer ist relevant 2x vertauschen: Spalten 2/10 und 4/8. I und j treffen sich in Spalte 6 1100 1110 1001 1000 1100 0100 0010 0110 0001 0111 zweithöchste Ziffer ist relevant

1. Teilliste: 1x vertauschen in Spalten 3/5. I und j treffen sich in Spalte 4

2. Teilliste: 1x vertauschen in Spalten 7/10. I und j treffen sich in Spalte 9

1100 1110 1100 1000 1001 0100 0111 0110 0001 0010 dritthöchste Ziffer ist relevant 1. Teilliste: 1x vertauschen in Spalten 1/2. I und j treffen sich in Spalte 2

2. Teilliste: unverändert 3. Teilliste: 1x vertauschen in Spalten 6/8. I und j treffen sich in Spalte 8

4. Teilliste: 1x vertauschen 1110 1100 1100 1000 1001 0110 0111 0100 0010 0010 letzte Ziffer ist relevant:

nur in der 3. und 4. Teilliste wird noch vertauscht

1110 1100 1100 1001 1000 0111 0110 0100 0010 0010 Ergebnis ist absteigend sortiert

(2)

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

Es sind die markierten Stellen zu ändern:

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)==1 && (i<j)) i++;

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

item = A[i];

A[i] = A[j];

A[j] = item;

}

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

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

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

} }

(3)

2. Aufgabe: Löschen mit dem symmetrischen Vorgänger 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; Nachfolger }

else

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

toDel = *root;

*root = (*root)->right;

} else {

pred = PredsymPred(*root);

if ( pred == *root ) {

toDel = pred->left;

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

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

} else {

toDel = pred->right;

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

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

} } }

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

delete toDel;

} } } }

Node *Tree::PredsymPred (Node *node) {

if (node->left->right != NULL) {

node = node->left;

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

}

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 !

zu a) Löschen von Schlüssel 937

Es liegt Fall 3.3 des Lösch-Algorithmus vor:

Es wird rechts gelöscht, der rechte Unterbaum war bereits vor dem Löschen schon kürzer und der linke Unterbaum von hat zwei verschieden hohe Unterbäume und den Balancie- rungsgrad +1.

Daher ist der Ausgleich mit einer Doppelrotation um die Wurzel zu bewerkstelligen mit dem folgenden Ergebnis:

293 15

3

404

182 848

626 959

11

347

71 237

404

15

3 293

182

848

626 959

11 347 937

71 237

(5)

zu b) Einfügen von Schlüssel 137

Einfügen dieses Schlüssels liefert zunächst den folgenden Baum:

Der erste nicht ausgeglichene Teilbaum ist der mit der Wurzel 293,

Es liegt der Fall 3.1. vor: Es wurde in den linken Unterbaum von 293 eingefügt und dieser war vorher schon höher als der rechte. Der Linke Unterbaum wurde dabei nach links verlän- gert .

Der Ausgleich ist also mit einer einfachen Rotation möglich:

zu c)

Ein AVL-Baum der Höhe h=12 hat mindestens F13 = 377 Blätter und damit F13-1=376 inne- re Knoten. Daher kann ein Baum mit 300 Knoten und der Höhe 12 kein AVL-Baum sein.

404 15

3 293

182

848

626 959

11 347 937

71 237

137

404 15

3 182

848

626 959

11 71 293 937

137 237 347

(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

Nach Vorlesung gilt für die Höhe eines B-Baums die Abschätzung: m

log( N + ≤ 1) h

Es ist dabei

– m = Ordnung des B-Baums = 100, – N die Anzahl der Schlüssel und – h=4 die Höhe

also gilt stets: 100

log( N + ≤ 1) 4

Wegen 10

10

log( ) log( )

log( )

m

z z

= m

erhalten wir 100 10 10

10

log( 1) log( 1) log( 1)

log(100) 2

N N

N + +

+ = =

also 10

log( N + ≤ 1) 4*2 8 =

oder

N + ≤ 1 10

8

D.h. der Baum kann 100 Mio Schlüssel aufnehmen.

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.

Schlüsseltausch mit Schlüssel 30 liefert einen Unterlauf:

70

90 144 60

156 178 92

80 82 64

30

70

90 144 30

156 178 92

80 82 64

(7)

Durch Mischen der drei beteiligten Knoten ergibt sich ein Unterlauf in dem Knoten, der 50 enthielt:

Diesen Unterlauf lösen wir durch Ausgleichen auf:

70

90 144

156 178 92

80 82 30 64

90

144 70

156 178 92

80 82 30 64

(8)

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 ?

Die Random-Folge ri beginnt so:

r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 r13 ... ... ... ...

11 3 0 1 12 14 2 6 16 7 10 9 15 ... ... ... ...

Die Hash-Tabelle wird wie folgt belegt:

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

HashTabelle R R I D B G N O A M N O P Einfüge-Schritt

Nr. 1 8 11 4 10 13 12 9 2 6 3 5 7

Anzahl der Kollisionen: 10

(9)

Nebenrechnungen dazu:

R:

H

o

(18)= 18 mod 17 = 1

H

1

(18)= H

o

(18)+ r

1

= 1+11 mod 17 =12 H

2

(18)= H

o

(18)+ r

2

= 1+ 3 mod 17 = 4 H

3

(18)= H

o

(18)+ r

3

= 1+ 0 mod 17 = 1 H

4

(18)= H

o

(18)+ r

4

= 1+ 1 mod 17 = 2 A:

H

o

(1)= 1 mod 17 = 1

H

1

(1)= H

o

(1)+ r

1

= 1+11 mod 17 =12 O:

H

o

(15)= 15 mod 17 = 15

H

1

(15)= H

o

(15)+ r

1

= 15+11=26 mod 17 = 9

N: H

o

(14)= 14 mod 17 = 14

H

1

(14)= H

o

(18)+ r

1

= 14+11=25 mod 17 = 8 B: H

o

(2)= 2 mod 17 = 2

H

1

(2)= H

o

(2)+ r

1

= 2+11 mod 17 = 13 H

2

(2)= H

o

(2)+ r

1

= 2+ 3 mod 17 = 5 I: H

o

(9)= 9 mod 17 = 9

H

1

(9)= H

o

(9)+ r

1

= 9+11 mod 17 = 3

Referenzen

ÄHNLICHE DOKUMENTE

# oder mit grep-Befehl der die Zeilen zählt, # in denen ein bestimmter Ausdruck vorkommt ANZAHL=`grep -c &#34;@&#34; /home/praktikum/gaeste`. # Wiederhole solange Variable

spiel nach indischen Quellen anf die bekannte Erziihlung von der Belohimng des Erfinders mit Weizonkörnorn sich beziphcn könnte. Auch die Japaner nennen die Felder me .,Augo.&#34;

mehrfach bei Johannes von Ephesus findet (z. Die Bedeutung einer „Menge&#34; scheint somit für baN. ursprünghcher zu sein als die Beschränkung auf

Kenntniss von dieser Frucht wird wohl eben so alt sein, wenn die¬.. selbe auch nicht etwa schon weiter gen Westen als

daß eine Zählweise existierte, bei der für die Zahlen über 10 statt mit. 11, 12 weiterzuzählen wieder mit

Von den Verboten dieser Verordnung kann die Bezirksregierung Halle - Obere Naturschutzbehörde - nach Maßgabe des § 44 NatSchG LSA auf Antrag Befreiung gewähren.

Nach dem Einsatz des &#34;Victor&#34; entlang einer Fahrtroute über die Zwillingskuppe (&#34;Twin mounds&#34;) wurde das Fahrzeug am Vormittag wieder geborgen.. Während des

Einen Bruchterm kürzen heisst, seinen Zähler und seinen Nenner mit der gleichen Zahl oder dem gleichen Term dividieren. Dazu muss man das