Technische Universität Braunschweig Dr. Werner Struckmann/Stephan Mielke Institut für Programmierung und Reaktive Systeme 28. März 2017 Vorkurs Informatik 3. Übungsblatt Gegeben sei die folgende Funktion: Aufgabe 9: int mysteryFunction(int n) { int mystery=0; for (int i=0; i<n; i++) { mystery = mystery+2*i+1; } return mystery; } a) Führen Sie die Funktion mysteryFunction für die Eingabe n = 4 per Hand aus. b) Welchen Wert berechnet die Funktion mysteryFunction? c) Benutzen Sie die vollständige Induktion, um Ihre Vermutung zu beweisen. Aufgabe 10: Gegeben seien die folgenden Sortieralgorithmen im Pseudocode: Bubblesort: Bubblesort ( var a as array ) for i from 1 to N for j from 0 to N - 1 if a [ j ] > a [ j + 1] swap ( a [ j ] , a [ j + 1] ) Insertionsort: for i from 1 to N key = a [ i ] j = i - 1 while j >= 0 and a [ j ] > key a [ j +1] = a [ j ] j = j - 1 a [ j +1] = key Mergesort: Mergesort ( var a as array ) if ( n == 1 ) return a var l1 as array = a [0] ... a [ n /2] var l2 as array = a [ n /2+1] ... a [ n ] l1 = Mergesort ( l1 ) l2 = Mergesort ( l2 ) return Merge ( l1 , l2 ) Merge ( var a as array , var b as array ) var c as array while ( a and b have elements ) if ( a [0] >b [0] ) add b [0] to the end of c remove b [0] from b else add a [0] to the end of c remove a [0] from a while ( a has elements ) add a [0] to the end of c remove a [0] from a while ( b has elements ) add b [0] to the end of c remove b [0] from b return c Quicksort: Quicksort ( A as array , low as int , high as int ) if ( low < high ) pivotlocation = Partition (A , low , high ) Quicksort (A , low , pivotlocation - 1) Quicksort (A , pivotlocation + 1 , high ) Partition ( A as array , low as int , high as int ) pivot = A [ low ] leftwall = low for i = low + 1 to high if ( A [ i ] < pivot ) then leftwall = leftwall + 1 swap ( A [ i ] , A [ leftwall ]) swap ( A [ low ] , A [ leftwall ]) return ( leftwall ) –2– a) Sortieren Sie folgende Zahlenfolgen mit den oben gezeigten Sortierverfahren, zählen sie dabei auch, wie oft zwei Zahlen verglichen werden. Welches Sortierverfahren gefällt Ihnen besser? Begründen Sie ihre Antwort. {7, 8, 9, 4, 5, 3, 2, 1} {5, 3, 2, 1, 7, 8} {3, 2, 1} {1, 2, 3} {2, 1, 3} b) O-Notation: O(g) = {f : N −→ R | ∃c > 0, n0 > 0 ∀n ≥ n0 . 0 ≤ f (n) ≤ cg(n)} Machen Sie sich mit der O-Notation vertraut. Wozu wird diese benötigt? Ordnen Sie die folgenden Funktionen – falls möglich – in die Laufzeitklassen O(1), O(n), O(n2 ), O(2n ) ein: f1 (n) = 58657539 f2 (n) = 5n f3 (n) = 1 f4 (n) = 10n f5 (n) = n3 + n2 f6 (n) = 5 · 2n c) Geben Sie den Aufwand der Sortierverfahren Bubblesort und Insertionsort an, indem sie die Anzahl der Vergleiche berechnen. Aufgabe 11: liegt: Berechnen Sie im Kopf, zwischen welchen ganzen Zahlen der Logarithmus 1 log2 3, log2 5, log2 , log3 2, log4 13, log5 36, log6 99, log 29,5. 3 Aufgabe 12: Für welche Basis b ist die Gleichung erfüllt? √ 1 3 logb 9 = 2, logb = −2, logb 125 = 3, logb 8 = . 9 4 Aufgabe 13: Es seien die Basen a und b gegeben. In der Vorlesung wurde gezeigt, dass es gibt eine Konstante c gibt, so dass für alle n die folgende Gleichung gilt: loga n = c · logb n. Überprüfen Sie diese Aussage für einige Werte von a, b und n. Hinweis: Diese Aussage ist für die Informatik sehr wichtig. –3–