K TU Ilmenau, Fakultät IA Institut TI, FG Komplexitätstheorie und Effiziente Algorithmen Prof. Dr. (USA) M. Dietzfelbinger, Dr. M. Brinkmeier, Dr. E. Hübel http://www.tu-ilmenau.de/fakia/afs ws07.html Algorithmen und Datenstrukturen, SS08 Übungsblatt Blatt 05 für die 20./21. Woche 2008 Aufgabe 1 (Dynamische Mengen) Mengen über einem Universum U seien als aufsteigend sortierte Listen mit Sentinel (Schlusselement mit Eintrag ∞) implementiert. Geben Sie (in Pseudocode) ein Verfahren zur Implementierung der Operationen intersect(S1 , S2 ) und symdiff (S1 , S2 ) an, das Laufzeit O(n1 + n2 ) hat, wo n1 = |S1 | und n2 = |S2 |. Aufgabe 2 (Binärbäume) Beweisen Sie die folgenden Aussagen für jeden binären Baum T mit N ≥ 1 äußeren Knoten. (a) T hat genau n = N − 1 innere Knoten. (b) Auf Level 0, 1, . . . , l zusammen liegen höchstens 2l Blätter (äußere Knoten). Aufgabe 3 (Listenimplementierung Dünn besetzter Matrizen“) ” Implementieren Sie die Datenstruktur Dünn besetzte Matrix“. ” Erklärung: Es gibt Fälle, in denen man vorab weiß, dass eine ziemlich große Matrix ziemlich wenige Einträge enthält, die ungleich Null sind. Dies kommt z.B. bei Berechnungen in der Wettervorhersage vor. In so einem Fall wäre es unsinnig, die Matrix als zweidimensionales Array abzuspeichern, da dies Speicherplatz für alle Nullen beansprucht. Eine Alternative besteht darin, für eine (m × n)Matrix A ein Array A der Länge m anzulegen, wobei der i-te Arrayeintrag auf den ersten Eintrag einer linearen Liste Li verweist, die die i-te Matrixzeile darstellt. In dieser Liste Li gibt es für jeden Matrixeintrag aij 6= 0 einen Knoten, der die Daten j und aij enthält. Die Liste ist gemäß den Indizes j aufsteigend sortiert. (a) Implementieren Sie die folgenden Operationen in dieser Darstellung für quadratische Matrizen A, B ∈ n×n , c ∈ und einen Vektor x ∈ n , als Array gegeben. (Nulleinträge im Ergebnis sollen weggelassen werden!): Q Q Q a) Skalarmultiplikation C := c A b) Matrixaddition C := A + B c) Transposition C := AT (!) d) Matrix-Vektor-Multiplikation y := A x (b) Begründen Sie, weshalb in Ihrer Implementierung die Rechenzeit für jede der Operationen O(n + e) ist, wobei e = Anzahl der Matrixeinträge 6= 0. 2 Algorithmen und Datenstrukturen, SS08 Übungsblatt Blatt 05 Aufgabe 4 (Binärbäume) (a) Beschreiben Sie, wie ein binärer Baum mit n inneren Knoten (leere Blätter) aussieht, der Tiefe n − 1 hat! Wenn man von den Knotenbeschriftungen absieht, wieviele verschiedene Formen kann ein solcher Binärbaum haben? (b) Beschreiben Sie, wie ein binärer Baum mit n = 12 m (m + 1) ≈ √ Blätter) aussehen könnte, der Tiefe m (≈ 2n) hat. m2 2 inneren Knoten (leere (c) Man kann auf den Knoten eines Binärbaums T eine Orientierung einführen. Wir sagen, dass Knoten v links von“ Knoten w ist, wenn es einen inneren Knoten u in T ” gibt, so dass v im linken Unterbaum von Tu und w im rechten Unterbaum von Tu ist. Zeigen Sie: Wenn u, v Knoten sind, dann trifft genau eine der folgenden fünf Möglichkeiten zu: 1.) u = v 2.) u ist echter Nachfahr von v 3.) v ist echter Nachfahr von u 4.) u ist links von v 5.) v ist links von u Welche dieser Möglichkeiten zutrifft, kann man auch an der Reihenfolge ablesen, in der u und v im Präorder- und im Postorder-Durchlauf von T besucht werden. Wie geht das?