Prof. Dr. V. Linnemann Lübeck, den 12. Mai 2010 Universität zu Lübeck Institut für Informationssysteme Algorithmen und Datenstrukturen Sommersemester 2010 6. Übungsblatt Lösungen Lösung 1: Optimale Matrixmultiplikation In der Vorlesung wurde im Abschnitt 1.2 ab der Folie 32 ein Algorithmus im Pseudocode entwickelt, der eine optimale Auswertungsreihenfolge für ein Matrixprodukt M 1... M n berechnet. In dieser Aufgabe sollen Sie den Algorithmus in Java realisieren. Die optimale Auswertungsreihenfolge soll als Text ausgegeben werden. Realisieren Sie eine Methode public static String matrixoptimierung(int[] r) die die Dimensionen der Matrizen gemäß Algorithmus der Vorlesung als Parameter übergeben bekommt und die die optimale Klammerung sowie die Anzahl der benötigten Multiplikationen bei dieser Auswertungsreihenfolge als Zeichenkette abliefert. Beispiel: int [] r = {10,20,,1,100}; System.out.println(matrixoptimierung(r1)); liefert als String-Wert: (M[1]*(M[2]*M[3]))*M[4], Aufwand: 2200 Operationen Für die Generierung der optimalen Klammerung aus den vom Algorithmus berechneten k i,j - Werten bietet sich eine rekursive Methode an. Scheiben Sie eine entsprechende main - Methode und testen Sie Ihre Methode an 2 Beispielen, wovon eins das Beispiel der Vorlesung sein soll. Achten Sie auf ausreichend Kommentar. (20 Punkte) Lösung: Siehe BlueJ-Projekt Uebung06-Loesung 1/6
Lösung 2: AVL-Bäume Abbildung 1: Ausgangsbaum für Aufgabenteil a) 59 21 Abbildung 2: Ausgangsbaum für Aufgabenteil b) a) Fügen Sie in den Ausgangsbaum für a) die Knotenliste 20,,17,61 ein. Zeichnen Sie dabei den AVL-Baum nach jedem Einfüge- und nach jedem Rotationsvorgang. Schreiben Sie die zugehörigen Fallbezeichnungen aus dem Vorlesungsalgorithmus daneben! (5 Punkte) b) Löschen Sie in dem Ausgangsbaum für b) die Knotenliste 59,,,21,. Zeichnen Sie dabei den AVL-Baum nach jedem Lösch- und nach jedem Rotationsvorgang. Schreiben Sie die zugehörigen Fallbezeichnungen aus dem Vorlesungsalgorithmus daneben! (5 Punkte) Lösung: 2/6
20 Einfügen der 20, Fall (a1) 20 Einfügen der, Fall (a2),(a2),(a1) R Rotation um 20 2 20 17 Einfügen der 17, Fall (a2),(a3) mit Rechts-Rotation 3/6
R Rotation um +2 1 +2 61 +1 61 L Rotation um 61 Einfügen der 61, Fall (a2),(b3) mit Rechts-Links-Rotation 4/6
21 Löschen der 59, Fall 2 1 2 R Rotation um 21 21 Löschen der, Fall 4, 6a mit Rechts-Rotation 21 Löschen der, Fall 5 Löschen der 21, Fall 1, 2 5/6
+2 L Rotation um Löschen der, Fall 3b mit Links-Rotation Hinweise Lösungen für die Übungsaufgaben sind (in der Regel) zu zweit abzugeben. Die erste Seite muss oben rechts den Namen des Abgebenden sowie die Gruppennummer enthalten. Lösungen ohne Gruppennummer werden mit 0 Punkten bewertet die Personen, die eine Lösung abgeben, müssen der gleichen Gruppe angehören. Lösungen mit mehreren Gruppennummern werden mit 0 Punkten bewertet Die Einteilung der Übungsgruppen erfolgt über die Anmeldung unter http://www.informatik-vor-2009.uni-luebeck.de/veranstaltungen/. Dieser Link ist auch über die Übungsseite der Vorlesung erreichbar. Zertifikatskriterium: Für das Zertifikat sind % der erreichbaren Punkte bei den Übungsaufgaben, einmaliges Vorrechnen in der Übung und das Bestehen der Klausur am Ende des Semesters erforderlich. Die Benotung des Zertifikats wird ausschließlich durch die Note in der Klausur bestimmt. Lösungen für Programmieraufgaben sind zusätzlich per Email einzureichen. Senden Sie Ihre Quelldateien hierzu an die passende Abgabe-Emailadresse. Die Emailadresse lautet aud?@ifis.uni-luebeck.de, wobei Sie das? durch Ihre Gruppennummer ersetzen. Fügen Sie dem Betreff Ihrer Abgabemail unbedingt die Gruppennummer und die Nummer des Übungsblattes hinzu. Papierabgaben ohne Emaileinreichung bzw. Emails ohne Papierabgabe werden nicht gewertet. Abgabetermin: Mittwoch, den. Mai bis 11 Uhr im Institut für Informationssysteme, 2. OG im Informatik-Neubau (Küche neben Sekretariat) 6/6