Klausur „Diskrete Mathematik II“

Slides:



Advertisements
Ähnliche Präsentationen
Vortrag von Stephanie Weirauch Jens Pleger Peter Jancke Frank Wejmelka
Advertisements

Algorithmen für das Erfüllbarkeitsproblem SAT
Imperative Programmierung
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (26-Graphenalgorithmen: Wiederholung und Übung) Prof. Th. Ottmann.
Sortieren I - Bubblesort -
LS 2 / Informatik Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
Graphen Ein Graph ist eine Kollektion von Knoten und Kanten. Knoten sind einfache Objekte. Sie haben Namen und können Träger von Werten, Eigenschaften.
Übung 6.6Schranken 1.Angenommen, Ihr Algorithmus habe einen Aufwand von g(n) = 5n 3 + n für alle n a)Geben sie eine obere Schranke O(g(n)) an. b)Beweisen.
der Universität Oldenburg
Manfred Thaller, Universität zu Köln Köln 22. Januar 2009
Java: Objektorientierte Programmierung
Java: Dynamische Datentypen
Baumstrukturen Richard Göbel.
WS Algorithmentheorie 13 - Kürzeste (billigste) Wege Prof. Dr. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (20 – Graphen)
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (26 - Graphen) Prof. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (27 – Kürzeste Wege) Prof. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (17 – Bäume: Grundlagen und natürliche Suchbäume) Prof. Th. Ottmann.
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (21 – Kürzeste Wege) T. Lauer.
Algorithmen und Datenstrukturen
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (05 – Elementare Datenstrukturen) Prof. Th. Ottmann.
Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 6 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 7 Claudio Moraga, Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
Diskrete Mathe II Übung
Diskrete Mathematik I Vorlesung Arrays-
Diskrete Mathe II Übung IKG - Übung Diskrete Mathe II – Jörg Schmittwilken 2 Ü6 Wendet den Scan-Line Algorithmus auf unten stehende Situation.
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik I Vorlesung Listen-
PKJ 2005/1 Stefan Dissmann Rückblick auf 2005 Was zuletzt in 2005 vorgestellt wurde: Klassen mit Attributen, Methoden und Konstruktoren Referenzen auf.
Weiteres Programm Studium des Breitendurchlaufs Hierzu
Wir müssen also überlegen: Implementierung der Knoten, Implementierung der Kanten, daraus: Implementierung des Graphen insgesamt. Annahme: die Knoteninhalte.
PRJ 2007/1 Stefan Dissmann Verkettete datenstruktur: Liste Problem: Liste, die eine beliebige Zahl von Elementen verwaltet Operationen: Erzeugen, Anfügen,
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik II Vorlesung 1 SS 2001 Algorithmus von Dijkstra.
Rekursion mit Listen: Quicksort
Flüsse, Schnitte, bipartite Graphen
Effiziente Algorithmen
Multiplikation großer Zahlen mit Standard-FFT
Diskrete Mathematik II
Diskrete Mathematik II
Effiziente Algorithmen
Effiziente Algorithmen Hartmut Klauck Universität Frankfurt SS
Quantum Computing Hartmut Klauck Universität Frankfurt WS 04/
Polynome und schnelle Fourier-Transformation
Einführung in die Programmiersprache C 4
Technische Informatik Reihungen – Felder - Arrays.
Institut für Wirtschaftsinformatik – Software Engineering, JKU Linz 1 Thomas Hilpold: Algorithmen und Datenstrukturen SS 2005 Mag.Th. Hilpold u. Dr. A.Stritzinger.
Informatik Datenstruktur Graph 3.3 Durchlaufen von Graphen
Informatik Datenstruktur Graph 3.2 Repräsentation von Graphen
se_4_graphen_und_baeume_I.ppt1 Softwareengineering Graphen und Bäume 1 Prof. Dr.-Ing. Axel Benz, Berlin School of Economics and Law.
Programmiervorkurs WS 2014 Referenzdatentypen
CuP - Java Achte Vorlesung Entspricht ungefähr Kapitel 4.1 des Skriptums Montag, 28. Oktober 2002.
Diskrete Mathematik II
Analyse der Laufzeit von Algorithmen
A) Erklären Sie den Datentyp char. b) Erklären Sie den Datentyp Struct c) Erklären Sie die Wirkungsweise des Operators & bei Anwendung im Zusammenhang.
Diskrete Mathe II Übung
Diskrete Mathematik I Vorlesung 2 Arrays.
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik II Vorlesung der Algorithmus von Floyd Foliendesign:
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik II Vorlesung Datenstrukturen für den Algorithmus von.
Binärer Suchbaum IV AVL-Baum I
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik I Vorlesung Binärer Suchbaum III- -AVL-Baum-
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik II Vorlesung Suche des kürzesten Weges in einem Netz.
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik II Vorlesung der Algorithmus von Floyd.
Diskrete Mathe II Übung IKG - Übung Diskrete Mathe II – Jörg Schmittwilken 2 Hinweis Heutige Übung zum Thema Floyd Donnerstag keine Vorlesung.
Diskrete Mathe Diskrete Mathematik I Listen Vorlesung 4.
Einführung in die Informationsverarbeitung Teil Thaller Stunde V: Wege und warum man sie geht Graphen. Köln 14. Januar 2016.
Graphen.
Klausur „Diskrete Mathematik II“
Musterlösung zur Klausur "Diskrete Mathematik" vom
3. Die Datenstruktur Graph 3.2 Repräsentation von Graphen
 Präsentation transkript:

Klausur „Diskrete Mathematik II“ Musterlösung zu den Vorbereitungsaufgaben

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.

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

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

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

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

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

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

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.

Aufgabe 5: Anwendung des Algorithmus von Dijkstra 90 30 B 100 40 E 20 10 40 10 C D

Schritt 1 A 90 90 30 B 100 40 30 E 20 10 40 10 C D 100 Grüner Knoten mit minimalen Kosten ist E (30)

Schritt 2 A 90 90 30 B 100 40 30 E 20 10 40 10 C 30 + 40 = 70 < 100 AEC statt AC D 70 40 Grüner Knoten mit minimalen Kosten ist D (40)

Schritt 3 A 90 50 30 B 100 40 30 E 20 10 40 10 C D 70 30 + 10 + 10 = 50 < 90 AEDB statt AB 40 Grüner Knoten mit minimalen Kosten ist B (50)

Schritt 4 A 90 50 30 B 100 40 30 E 20 10 40 10 C D 70 30 + 40 = 70 < 30 + 10 + 10 = 70 AEC bleibt (statt AEDB) 40 Grüner Knoten mit minimalen Kosten ist C (70)

Schritt 5 A 90 50 30 B 100 40 30 E 20 10 40 10 C D 70 40

Alternative Lösung A 90 50 30 B 100 40 30 E 20 10 40 10 C D 70 40

Aktuell bearb. Liste der grünen Knoten Knoten (A,0) So könnte die Lösung auch aussehen: Aktuell bearb. Liste der grünen Knoten Knoten (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)

Aufgabe 6: Dijkstra: Unterscheidung Entfernung und Fahrzeit Beides sind Kosten Zwei Attribute an Kanten; Dijkstra muss wissen, welches verwendet werden soll

Aufgabe 7.1: Heap 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

Aufgabe 7.2: 7 9 22 23 27 11 30 90 28 33 80 19 70 8 7 22 9 23 27 11 30 90 28 33 80 19 70 8

Aufgabe 7.2: 7 9 22 23 27 11 8 90 28 33 80 19 70 30 7 22 9 23 27 11 8 90 28 33 80 19 70 30

Aufgabe 7.2: 7 22 8 23 27 11 9 90 28 33 80 19 70 30 7 22 8 23 27 11 9 90 28 33 80 19 70 30

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)

L-Rotation T1 T2 T3 k1 k2 +1

L-Rotation: Einfügen von x +2 k1 +1 k2 T1 T2 T3 x

L-Rotation +2 k1 +1 k2 T1 T2 T3 x

L-Rotation +2 k1 +1 k2 T1 T2 T3 x

L-Rotation k2 k1 T3 T1 T2 x

L-Rotation Position jedes Arrayelements verändert k2 k1 T3 T1 T2 x

Aufgabe 8: Zusammenhang eines Graphen 4 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

A D B C D D C A D C A D B C A D C A C D AC CA A Aufgabe 9: Anwendung von Scan-Line A D B Schnittpunkt erkannt Schnittpunkt erkannt Schnittpunkt erkannt (bereits vorhanden) C D D C A D C A D B C A D C A C D AC CA A