Algorithmen & Datenstrukturen Lösungen P. Fierz / HS 2012/2013 Kapitel 1 Daten Die Programme sind alle im zipfile 01_Z_Daten.zip gespeichert. Jede Aufgabe ist als Package organisiert (Bsp. u1.aufgabe2). Aufgabe 1.1 [Endliche Arithmetik] a) Wir wählen die kleinstmögliche Mantisse (diese ist ja immer normalisiert) und zwar 1.0 und dazu den kleinstmöglichten Exponenten −33 und erhalten: kleinste positive Zahl = 1.0 · 10−33 b) Entsprechend nehmen wir die grösste Mantisse und den grössten Exponenten: grösste positive Zahl = 9.999999 · 1033 c) Wir nehmen die grösste Mantisse und den Exponenten −1. grösste Zahl kleiner als 1 = 9.999999 · 10−1 d) Wir nehmen die kleinste Mantisse grösser als 1 1.000001 und den Exponenten 2. kleinste Zahl grösser als 100 = 1.000001 · 102 e) Das Intervall der möglichen Mantissen ist [1000000 . . . 9999999] Wir haben also 8999999 verschiedene Mantissen, die nicht gleich Null sind. Ferner sind 67 verschiedene Exponenten möglich. Daher haben wir 8999999 · 67 positive Zahlen. Man sieht sofort, dass es ebensoviele negative Zahlen gibt und noch die 0. verschiedene Zahlen = (2 · 8999999 · 67) + 1 f) Das folgende Zahlenbeispiel beweist die Aussage: x = 9.000002 y = 2.0 z = 5.000003 (x · y) · z = (9.000002 · 2.0) ·5.000003 = 90.00005 | | {z gerundet=18.0 {z } gerundet=90.00005 } x · (y · z) = 9.000002 · (2.0 · 5.000003) = 90.00011 | {z } gerundet=10.00001 | {z gerundet=90.00011 } 1-1 Algorithmen & Datenstrukturen Lösungen P. Fierz / HS 2012/2013 Aufgabe 1.2 [Berechnung von π] a) Aus der Gleichung v q u u 1 − 1 − sin2 (α) t α sin( ) = 2 2 können wir die folgende Formel für A2n herleiten: A2n = n · v q u u 1 − 1 − sin2 (α ) t n 2 Wir müssen nun auf der rechten seite sin(αn ) eliminieren. Dies können wir mit Hilfe der Formel 2 · An n An = sin(αn ) ⇒ sin(αn ) = 2 n tun. Die Rekursionsformel lautet also: A2n = n · v q u u 1 − 1 − ( 2·An )2 t n 2 b) Programm: u1.aufgabe2.Pi1 c) Falls man diese Rekursionsformel implementiert, bekommt man falsche Resultate. Das Problem liegt unter der Wurzel im Zähler. Im Ausdruck 1− q 1 − sin2 (α) werden fast gleich grosse Zahlen voneinander subtrahiert, wenn α gegen null geht weil dann sin2 (α) auch gegen null strebt. Dies führt zu Stellenauslöschung. d) In der Formel a−b= setzen wir a = 1 und b = q 1− a2 − b2 a+b 1 − sin2 (αn ) ein und erhalten q 1 − sin2 (αn ) = sin2 (αn ) 1 + 1 − sin2 (αn ) p daraus folgt die folgende Formel: α sin( ) = r 2 sin(α) 2(1 + q 1 − sin2 (α)) Wird nun das Programm mit dieser Formel implementiert, so erhält man eine stabile Berechnung für π. Diese Formel ist im Programm u1.aufgabe2.Pi2 implementiert. 1-2 Algorithmen & Datenstrukturen Lösungen P. Fierz / HS 2012/2013 Aufgabe 1.3 [Geklammerte Ausdrücke] Programm: u1.aufgabe3.Klammer Aufgabe 1.4 [Polnische Notation] Programm: u1.aufgabe4.PolnischStack Aufgabe 1.5 [Bäume] Vollständiger binärer Baum Beliebiger Binärer Baum Gegeben Tiefe d Anzahl Blätter 2d zwischen 1 und 2d Anzahl Knoten 2d+1 − 1 zwischen d und 2d+1 − 1 Gegeben Anzahl Blätter m Tiefe log2 (m) zwischen log2 (m) und ∞ log (m)+1 2 Anzahl Knoten 2 − 1 = 2m − 1 zwischen 2m − 1 und ∞ Gegeben Anzahl Knoten n n+1 n+1 Anzahl Blätter zwischen 1 und 2 2 m l n+1 ) ) und n−1 Tiefe log2 ( n+1 zwischen log ( 2 2 2 Aufgabe 1.6 [Suchstruktur als ADT] Interfaces: Interface: u1.aufgabe6bis9.SortSuch 1-3