![Page 1: 1 Klausur Diskrete Mathematik II Musterlösung zu den Vorbereitungsaufgaben](https://reader034.vdokument.com/reader034/viewer/2022052315/55204d6649795902118bbb96/html5/thumbnails/1.jpg)
1
Klausur „Diskrete Mathematik II“
Musterlösung zu den Vorbereitungsaufgaben
![Page 2: 1 Klausur Diskrete Mathematik II Musterlösung zu den Vorbereitungsaufgaben](https://reader034.vdokument.com/reader034/viewer/2022052315/55204d6649795902118bbb96/html5/thumbnails/2.jpg)
2
Aufgabe 1: Umkehren einer Liste (Pseudocode auf hohem Niveau)Eingabe: Eine einfach verkettete Liste
Ausgabe: Eine einfach verkettete Liste, die die Elemente er Eingabeliste in umgekehrter Reihenfolge enthält
Programm:
Durchlaufe die Eingabeliste beginnend mit dem Kopf. Jedes Element wird kopiert, und die Kopie wird jeweils vorne (d.h. an der Kopfseite) in eine neue Liste eingehängt. Der Kopf der neuen Liste ist das zuletzt eingehängte Element.
![Page 3: 1 Klausur Diskrete Mathematik II Musterlösung zu den Vorbereitungsaufgaben](https://reader034.vdokument.com/reader034/viewer/2022052315/55204d6649795902118bbb96/html5/thumbnails/3.jpg)
3
Aufgabe 1: Umkehren einer Liste (Alternative, eher an Java angelehnt)
// Die folgende Lösung verwendet die Klasse "Element" aus der // Vorlesung. Die Lösung mit "Element" und "Liste" ist analog.
Element Kopf = ...; //Kopf der zu invertierenden Liste
Element aktuell = Kopf;
Element neuerKopf = NULL; //Kopf der invertierten Liste
while( aktuell != NULL )
{
Element Neu = new Element(aktuell.Wert); //Erzeugen einer Kopie
Neu.Weiter = neuerKopf;
neuerKopf = Neu;
aktuell = aktuell.Weiter;
}
![Page 4: 1 Klausur Diskrete Mathematik II Musterlösung zu den Vorbereitungsaufgaben](https://reader034.vdokument.com/reader034/viewer/2022052315/55204d6649795902118bbb96/html5/thumbnails/4.jpg)
4
Aufgabe 2: Multiplikation einer Matrix mit einem Vektor
int n = ...; //Länge des Vektors bzw. Anzahl der Spalten
int m = ...; // Anzahl der Zeilen
double [ ] vek = new double[n]; // vek ist der Vektor
double [ ][ ] mat = new double[m,n]; // mat ist die Matrix
double [] ergebnis = new double [m] ; //Produkt von vek und mat
ergebnis = {0,0,0...} //Initialisierung mit 0
vek = ...; mat = ...; // Belegung von vek und mat
for ( int i = 1 ; i <= m ; i++ )
for ( int j = 1 ; j <= n ; j++ )
{
ergebnis[i] = ergebnis[i] + mat[i,j] * vek[j];
}
![Page 5: 1 Klausur Diskrete Mathematik II Musterlösung zu den Vorbereitungsaufgaben](https://reader034.vdokument.com/reader034/viewer/2022052315/55204d6649795902118bbb96/html5/thumbnails/5.jpg)
5
Aufgabe 3: Umgekehrte Polnische Notation
Prozedur zur Erzeugung der Umgekehrten Polnischen Notation aus einem Syntaxbaum:
upn() { upn(wurzel); }
upn(Knoten W) {
if(W = NULL) return;
print(W);print("(");
upn(W.LinkerNachfolger);
print(",");
upn(W.RechterNachfolger);
print(")");
}
Bemerkung: Die Prozedur "upn()" ist fast identisch zu der Prozedur "PreOrder()" (Mathe 8, 1. Semester). Dort fehlen nur die Befehle zur Ausgabe der Klammern und des Komma (print("("); print(","); print(")")).
![Page 6: 1 Klausur Diskrete Mathematik II Musterlösung zu den Vorbereitungsaufgaben](https://reader034.vdokument.com/reader034/viewer/2022052315/55204d6649795902118bbb96/html5/thumbnails/6.jpg)
6
Aufgabe 4.1: Algorithmus zum Entfernen eines Knotens aus einem binären Suchbaum:Durchsuche den Baum solange, bis der zu löschende Knoten gefunden ist (z.B. mit Breiten- oder Tiefensuche); dieser sei L; merke Dir den Zeiger auf L vom Vorgänger im Baum; dieser sei zL
• falls L keine Nachfolger hat, lösche L, setzt zL auf Null und beende die Prozedur
andernfalls suche den Ersatzknoten E für L wie folgt:
• falls L einen linken Nachfolger hat, gehe einmal nach links und dann solange nach rechts, wie rechte Nachfolger vorhanden sind. Der gefundene Knoten sei E.
• falls L keinen linken Nachfolger hat, gehe einmal nach rechts und dann solange nach links, wie linke Nachfolger vorhanden sind. Der gefundene Knoten sei E.
ersetze L durch E: dazu wird zL auf E gesetzt, und der linke und rechte Nachfolgen von L wird dem linken und rechten Nachfolger von E zugewiesen;
lösche L und ersetze das alte Vorkommen von E durch den linken/rechten Nachfolger F von E
![Page 7: 1 Klausur Diskrete Mathematik II Musterlösung zu den Vorbereitungsaufgaben](https://reader034.vdokument.com/reader034/viewer/2022052315/55204d6649795902118bbb96/html5/thumbnails/7.jpg)
7
Aufgabe 4.1: Beispiel: Löschen des Knotens mit Nr. 84 (dient nur zur Veranschaulichung, gehört nicht zur Musterlösung)
5716
8444
65
67 99
70 90
888 34 55 60
804 50 56
75
96
7774
L
E
zL
73
72
F
![Page 8: 1 Klausur Diskrete Mathematik II Musterlösung zu den Vorbereitungsaufgaben](https://reader034.vdokument.com/reader034/viewer/2022052315/55204d6649795902118bbb96/html5/thumbnails/8.jpg)
8
Aufgabe 4.1: Beispiel: Löschen des Knotens mit Nr. 84 (dient nur zur Veranschaulichung, gehört nicht zur Musterlösung)
5716
8044
65
67 99
70 90
888 34 55 60
4 50 56 75 96
7774
EzL
73
72 F
![Page 9: 1 Klausur Diskrete Mathematik II Musterlösung zu den Vorbereitungsaufgaben](https://reader034.vdokument.com/reader034/viewer/2022052315/55204d6649795902118bbb96/html5/thumbnails/9.jpg)
9
Aufgabe 4.1 (Fortsetzung): Der schwierige Fall im Algorithmus ist der, dass der zu löschende Knoten L Nachfolger hat, d.h. kein Blatt ist.
Aufgabe 4.2: Korrektheit des Algorithmus
Gezeigt werden muss, dass das Ergebnis wieder ein binärer Suchbaum ist. Dazu muss gezeigt werden, dass die Ersetzung von L durch E und von E durch F die Suchbaumeingenschaft nicht zerstört
• Ersetzung von L durch E: E muss der größte (kleinste) Knoten im linken (rechten) Teilbaum unter L sein: Man betrachtet den Pfad, der von E zu L führt. Alle Knoten auf diesem Pfad sind kleiner als E (da E links von diesen Knoten liegt), und alle linken Teilbäume dieser Knoten sind ebenfalls kleiner als E. Folglich ist E der größte Knoten im linken Teilbaum unter L. Der Beweis, dass E der kleinste Knoten im rechten Teilbaum unter L ist, verläuft analog.
• Ersetzung von E durch F: Wenn E rechter (linker) Nachfolger eines Knotens K ist, d.h. E > K (E < K), dann ist auch jeder Knoten des Teilbaumes unter E größer (kleiner) als K.
![Page 10: 1 Klausur Diskrete Mathematik II Musterlösung zu den Vorbereitungsaufgaben](https://reader034.vdokument.com/reader034/viewer/2022052315/55204d6649795902118bbb96/html5/thumbnails/10.jpg)
10
D
E
A
B
C
30
10
1040
Aufgabe 5: Anwendung des Algorithmus von Dijkstra
90
2040
100
![Page 11: 1 Klausur Diskrete Mathematik II Musterlösung zu den Vorbereitungsaufgaben](https://reader034.vdokument.com/reader034/viewer/2022052315/55204d6649795902118bbb96/html5/thumbnails/11.jpg)
11
D
E
A
B
C
30
10
1040
Schritt 1
90
2040
100
30
100
90
Grüner Knoten mit minimalen Kosten ist E (30)
![Page 12: 1 Klausur Diskrete Mathematik II Musterlösung zu den Vorbereitungsaufgaben](https://reader034.vdokument.com/reader034/viewer/2022052315/55204d6649795902118bbb96/html5/thumbnails/12.jpg)
12
D
E
A
B
C
30
10
1040
Schritt 2
90
2040
100
30
70
90
40Grüner Knoten mit minimalen Kosten ist D (40)
30 + 40 = 70 < 100AEC statt AC
![Page 13: 1 Klausur Diskrete Mathematik II Musterlösung zu den Vorbereitungsaufgaben](https://reader034.vdokument.com/reader034/viewer/2022052315/55204d6649795902118bbb96/html5/thumbnails/13.jpg)
13
D
E
A
B
C
30
10
1040
Schritt 3
90
2040
100
30
70
50
40Grüner Knoten mit minimalen Kosten ist B (50)
30 + 10 + 10 = 50 < 90AEDB statt AB
![Page 14: 1 Klausur Diskrete Mathematik II Musterlösung zu den Vorbereitungsaufgaben](https://reader034.vdokument.com/reader034/viewer/2022052315/55204d6649795902118bbb96/html5/thumbnails/14.jpg)
14
D
E
A
B
C
30
10
1040
Schritt 4
90
2040
100
30
70
50
40Grüner Knoten mit minimalen Kosten ist C (70)
30 + 40 = 70 < 30 + 10 + 10 = 70AEC bleibt (statt AEDB)
![Page 15: 1 Klausur Diskrete Mathematik II Musterlösung zu den Vorbereitungsaufgaben](https://reader034.vdokument.com/reader034/viewer/2022052315/55204d6649795902118bbb96/html5/thumbnails/15.jpg)
15
D
E
A
B
C
30
10
1040
Schritt 5
90
2040
100
30
70
50
40
![Page 16: 1 Klausur Diskrete Mathematik II Musterlösung zu den Vorbereitungsaufgaben](https://reader034.vdokument.com/reader034/viewer/2022052315/55204d6649795902118bbb96/html5/thumbnails/16.jpg)
16
D
E
A
B
C
30
10
1040
Alternative Lösung
90
2040
100
30
70
50
40
![Page 17: 1 Klausur Diskrete Mathematik II Musterlösung zu den Vorbereitungsaufgaben](https://reader034.vdokument.com/reader034/viewer/2022052315/55204d6649795902118bbb96/html5/thumbnails/17.jpg)
17
Aktuell bearb. Liste der grünen KnotenKnoten
(A,0)
(A,0) (E,30), (C,100), (B,90)
(E,30) (D,40), (C,70), (B,90)
(D,40) (C,70), (B,50)
(B,50) (C,70)
(C,70)
So könnte die Lösung auch aussehen:
![Page 18: 1 Klausur Diskrete Mathematik II Musterlösung zu den Vorbereitungsaufgaben](https://reader034.vdokument.com/reader034/viewer/2022052315/55204d6649795902118bbb96/html5/thumbnails/18.jpg)
18
Aufgabe 6: Dijkstra: Unterscheidung Entfernung und Fahrzeit
• Beides sind Kosten
• Zwei Attribute an Kanten; Dijkstra muss wissen, welches verwendet werden soll
![Page 19: 1 Klausur Diskrete Mathematik II Musterlösung zu den Vorbereitungsaufgaben](https://reader034.vdokument.com/reader034/viewer/2022052315/55204d6649795902118bbb96/html5/thumbnails/19.jpg)
19
Aufgabe 7.1: Heap7
22 9
23 27 11 30
90 28 33 80 19 70
7 22 9 23 27 11 30 90 28 33 80 19 70
![Page 20: 1 Klausur Diskrete Mathematik II Musterlösung zu den Vorbereitungsaufgaben](https://reader034.vdokument.com/reader034/viewer/2022052315/55204d6649795902118bbb96/html5/thumbnails/20.jpg)
20
Aufgabe 7.2:7
22 9
23 27 11 30
90 28 33 80 19 70
7 22 9 23 27 11 30 90 28 33 80 19 70
8
8
![Page 21: 1 Klausur Diskrete Mathematik II Musterlösung zu den Vorbereitungsaufgaben](https://reader034.vdokument.com/reader034/viewer/2022052315/55204d6649795902118bbb96/html5/thumbnails/21.jpg)
21
Aufgabe 7.2:7
22 9
23 27 11 8
90 28 33 80 19 70
7 22 9 23 27 11 8 90 28 33 80 19 70
30
30
![Page 22: 1 Klausur Diskrete Mathematik II Musterlösung zu den Vorbereitungsaufgaben](https://reader034.vdokument.com/reader034/viewer/2022052315/55204d6649795902118bbb96/html5/thumbnails/22.jpg)
22
Aufgabe 7.2:7
22 8
23 27 11 9
90 28 33 80 19 70
7 22 8 23 27 11 9 90 28 33 80 19 70
30
30
![Page 23: 1 Klausur Diskrete Mathematik II Musterlösung zu den Vorbereitungsaufgaben](https://reader034.vdokument.com/reader034/viewer/2022052315/55204d6649795902118bbb96/html5/thumbnails/23.jpg)
23
Aufgabe 7.3: Wie gut ist Array-Repräsentation auch für AVL-Bäume geeignet?
Nicht gut.
• Lücken in Array (AVL-Baum nicht ausgeglichen)
• Einfügen/Löschen von Knoten erfordert Rotationen: Fast jedes Arrayelement muss verschoben werden: O(n)=> Beispiel L-Rotation (die folgende Animation ist zur Lösung der Aufgabe nicht erforderlich; sie dient nur der Veranschaulichung)
![Page 24: 1 Klausur Diskrete Mathematik II Musterlösung zu den Vorbereitungsaufgaben](https://reader034.vdokument.com/reader034/viewer/2022052315/55204d6649795902118bbb96/html5/thumbnails/24.jpg)
24
T1
T2 T3
k1
k2
0
+1
L-Rotation
![Page 25: 1 Klausur Diskrete Mathematik II Musterlösung zu den Vorbereitungsaufgaben](https://reader034.vdokument.com/reader034/viewer/2022052315/55204d6649795902118bbb96/html5/thumbnails/25.jpg)
25
T1
T2 T3
k1
k2
x
+1
+2
L-Rotation: Einfügen von x
![Page 26: 1 Klausur Diskrete Mathematik II Musterlösung zu den Vorbereitungsaufgaben](https://reader034.vdokument.com/reader034/viewer/2022052315/55204d6649795902118bbb96/html5/thumbnails/26.jpg)
26
L-Rotation
T1
T2 T3
k1
k2
x
+1
+2
![Page 27: 1 Klausur Diskrete Mathematik II Musterlösung zu den Vorbereitungsaufgaben](https://reader034.vdokument.com/reader034/viewer/2022052315/55204d6649795902118bbb96/html5/thumbnails/27.jpg)
27
T1
T2 T3
k1
k2
x
+1
+2
L-Rotation
![Page 28: 1 Klausur Diskrete Mathematik II Musterlösung zu den Vorbereitungsaufgaben](https://reader034.vdokument.com/reader034/viewer/2022052315/55204d6649795902118bbb96/html5/thumbnails/28.jpg)
28
T1
k1
k2
x
0
T2
T3
0
L-Rotation
![Page 29: 1 Klausur Diskrete Mathematik II Musterlösung zu den Vorbereitungsaufgaben](https://reader034.vdokument.com/reader034/viewer/2022052315/55204d6649795902118bbb96/html5/thumbnails/29.jpg)
29
T1
k1
k2
x
0
T2
T3
0
L-Rotation
Position jedes Arrayelementsverändert
![Page 30: 1 Klausur Diskrete Mathematik II Musterlösung zu den Vorbereitungsaufgaben](https://reader034.vdokument.com/reader034/viewer/2022052315/55204d6649795902118bbb96/html5/thumbnails/30.jpg)
30
Aufgabe 8: Zusammenhang eines Graphen4 Alternative Lösungen: • Tiefensuche: Graph zusammenhängend, wenn alle Knoten durchlaufen werden• Breitensuche (wie Tiefensuche)• Dijkstra (beliebige Kosten > 0, wie Tiefensuche)• Floyd (beliebige Kosten > 0), Graph zusammenhängend, wenn kein in Matrix
Ein Problem ergibt sich daraus, dass die Definition "zusammenhängend" in der Aufgabenstellung von ungerichteten Graphen ausgeht, die vier Verfahren jedoch von gerichteten. Der unten gezeigte gerichtete Graph ist zusammenhängend; mit Startknoten B würde jedoch Dijkstra niemals A erreichen. Eine Lösung dieses Problems besteht darin, bei gerichteten Graphen zu jeder Kante eine Kante mit entgegengesetzter Orientierung zu ergänzen. Ungerichtete Kanten müssen durch zwei gerichtete Kanten mit entgegengesetzter Orientierung ersetzt werden.
A B
![Page 31: 1 Klausur Diskrete Mathematik II Musterlösung zu den Vorbereitungsaufgaben](https://reader034.vdokument.com/reader034/viewer/2022052315/55204d6649795902118bbb96/html5/thumbnails/31.jpg)
31
D ADC
ADBC
ACD
AC
CA
ADC
D
B
C
A
ADC
Aufgabe 9: Anwendung von Scan-Line
Schnittpunkterkannt
Schnittpunkterkannt (bereits
vorhanden)
Schnittpunkterkannt