Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Klausur „Diskrete Mathematik II“

Ähnliche Präsentationen


Präsentation zum Thema: "Klausur „Diskrete Mathematik II“"—  Präsentation transkript:

1 Klausur „Diskrete Mathematik II“
Musterlösung zu den Vorbereitungsaufgaben Teil I (Aufgaben )

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.

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; }

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]; }

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(")")).

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

7 Aufgabe 4. 1: Beispiel: Löschen des Knotens mit Nr
Aufgabe 4.1: Beispiel: Löschen des Knotens mit Nr. 84 (dient nur zur Veranschaulichung, gehört nicht zur Musterlösung) 65 zL L 44 84 16 57 70 90 8 34 55 60 67 73 88 99 4 50 56 80 96 72 E 75 F 74 77

8 Aufgabe 4. 1: Beispiel: Löschen des Knotens mit Nr
Aufgabe 4.1: Beispiel: Löschen des Knotens mit Nr. 84 (dient nur zur Veranschaulichung, gehört nicht zur Musterlösung) 65 zL E 44 80 16 57 70 90 8 34 55 60 67 73 88 99 4 50 56 F 96 72 75 74 77

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.


Herunterladen ppt "Klausur „Diskrete Mathematik II“"

Ähnliche Präsentationen


Google-Anzeigen