Vorkurs Informatik - Technische Universität Braunschweig

Werbung
Technische Universität Braunschweig
Dr. Werner Struckmann/Stephan Mielke
Institut für Programmierung und Reaktive Systeme
22. März 2016
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–
Herunterladen