Klausur Informatik 1, 04.04.2006 · PDF fileName,Vorname, Matrikelnummer Bitte unbedingt...

12

Click here to load reader

Transcript of Klausur Informatik 1, 04.04.2006 · PDF fileName,Vorname, Matrikelnummer Bitte unbedingt...

Page 1: Klausur Informatik 1, 04.04.2006 · PDF fileName,Vorname, Matrikelnummer Bitte unbedingt leserlich ausf¨ullen Klausur Informatik 1, 04.04.2006 Aufgabe 1 [Zahlendarstellung, Boolsche

Name,Vorname, Matrikelnummer Bitte unbedingt leserlich ausfullen

Klausur Informatik 1, 04.04.2006

KlausurInformatik 1

Wintersemester 2005/2006Prof. Dr. Wolfgang May4. April 2006, 11-13 Uhr

Bearbeitungszeit: 90 Minuten

Aufgabe erreichbare erreichte PunktePunkte

1 10 / 10

2 14 / 14

3 16 / 16

4 26(+8)* / 26(+8)*

5 12 / 12

6 12 / 12

Gesamt: /90(+8)*

Wir wunschen viel Erfolg!

Bei der Klausur sind keine Hilfsmittel (Skripte, Taschenrechner etc.) erlaubt.Papier wird gestellt. Benutzen Sie nur die ausgeteilten, zusammengeheftetenBlatter fur Ihre Antworten. Schreiben Sie auf jedes Blatt oben Ihren Namen undIhre Matrikelnummer. Schreiben Sie mit blauem/schwarzem Kugelschreiber, Fulleretc.; Bleistift ist nicht erlaubt.

meine Note soll mit Matrikelnummer so bald wie moglichauf der Vorlesungs-Webseite veroffentlicht werden.

meine Note soll nicht veroffentlicht werden; ich erfahre sie dannaus Munopag/Wopag (bzw. beim Prufungsamt der Informatik).

(zutreffendes bitte ankreuzen)

1 von 12

Page 2: Klausur Informatik 1, 04.04.2006 · PDF fileName,Vorname, Matrikelnummer Bitte unbedingt leserlich ausf¨ullen Klausur Informatik 1, 04.04.2006 Aufgabe 1 [Zahlendarstellung, Boolsche

Name,Vorname, Matrikelnummer Bitte unbedingt leserlich ausfullen

Klausur Informatik 1, 04.04.2006

Aufgabe 1 [Zahlendarstellung, Boolsche Audrucke] [10 Punkte]

a) Addieren Sie die Zahlen 26 und 3 binar. [2 Punkte]

b) Multiplizieren Sie die Zahlen 26 und 3 binar. [2 Punkte]

c) Konvertieren Sie 136 in eine Hexadezimalzahl. [2 Punkte]

d) Addieren Sie die beiden Hexadezimalzahlen 6B und 57 und wandeln Sie das Ergebnisin eine Dezimahlzahl um. [4 Punkte]

Losung:

a)2610 = 110102

+ 310 = 000112

2910 = 111012

b)

2610 = 110102

∗ 310 = 000112

110102

+ 1101002

7810 = 10011102

c) 13610 = 810 ∗ 161

10+ 810 ∗ 160

10= 12810 + 810 = 8816

d)10710 = 6B16

+ 8710 = 5716

19410 = C216

2 von 12

Page 3: Klausur Informatik 1, 04.04.2006 · PDF fileName,Vorname, Matrikelnummer Bitte unbedingt leserlich ausf¨ullen Klausur Informatik 1, 04.04.2006 Aufgabe 1 [Zahlendarstellung, Boolsche

Name,Vorname, Matrikelnummer Bitte unbedingt leserlich ausfullen

Klausur Informatik 1, 04.04.2006

Aufgabe 2 [Grammatik] [14 Punkte]

a) Geben Sie eine Grammatik in BNF fur die Menge aller Palindrome aus dem Alphabet{a, b} an (Palindrome sind Ausdrucke, die sowohl vorwarts als auch ruckwarts dasselbeWort ergeben, z.B. abba, bbabb). [4 Punkte]

b) Leiten Sie mit den Produktionsregeln Ihrer Grammatik das Wort aababaa aus demStartsymbol ab. [2 Punkte]

c) Geben Sie einen deterministischen endlichen Automaten an der alle Palindrome ausdem Alphabet {a, b} mit einer Lange von mindestens 1 bis maximal 4 Zeichen erkennt.[8 Punkte]

Losung:

a) S = {S}, T = {a, b, ε}, N = {S}, S := a|b|aSa|bSb|ε

b) S → aSa → aaSaa → aabSbaa → aababaa

c)

a

b

b

aa

a

a

a

b

aa

bb

b

b

b

3 von 12

Page 4: Klausur Informatik 1, 04.04.2006 · PDF fileName,Vorname, Matrikelnummer Bitte unbedingt leserlich ausf¨ullen Klausur Informatik 1, 04.04.2006 Aufgabe 1 [Zahlendarstellung, Boolsche

Name,Vorname, Matrikelnummer Bitte unbedingt leserlich ausfullen

Klausur Informatik 1, 04.04.2006

Aufgabe 3 [Heaps] [16 Punkte]Gegeben sei die Zahlenfolge 5, 10, 4, 7, 9, 17, 2, 6, 3, 18, 23, 16

a) Fugen Sie die Zahlen aus der gegebenen Zahlenfolge nacheinander in einen anfangsleeren Heap ein. Zur Erinnerung: das kleinste Element befindet sich immer an derWurzel. [6 Punkte]

b) Erklaren Sie kurz wie man mit Hilfe eines Heaps Zahlen sortiert (HeapSort-Algorithmus).[5 Punkte]

c) Fuhren Sie den HeapSort-Algorithmus an obigem Heap durch, allerdings nicht kom-plett, sondern nur fur die ersten 4 Zahlen. Achten Sie darauf dass Ihr Vorgehen beimLesen nachvollziehbar ist. [5 Punkte]

Losung:

a) Heap als Array (von oben nach unten und links nach rechts): 2,3,4,6,9,16,5,10,7,18,23,17

b) Wenn der Heap vollstandig aufgebaut ist, befindet sich das kleinste Element in derWurzel. Dieses Element entfernt man und schreibt es in ein Array. An seine Stelleruckt nun das letzte Element des Heaps. Nach dem Einfugen wird sodann die Heap-Eigenschaft wieder hergestellt, indem das neue Wurzelelement per

”Durchsickern“an

seine neue Position gebracht wird. Beim Durchsickern vertauscht man dabei das jewei-lige Elter-Element mit dem kleineren der beiden Kind-Knoten. So verfahrt man, bisder Heap vollstandig abgearbeitet ist. Das Array mit den herausgeschriebenen Wur-zelelementen enthalt die sortierte Folge in aufsteigender Reihenfolge.

c) • Oberstes Element entfernen und in das Array schreiben: 2

• Letztes Element (17) nach oben ziehen und Heap neu aufbauen (durchsickern):3,6,4,7,9,16,5,10,17,18,23

• Oberstes Element entfernen und in das Array schreiben: 2,3

• Letztes Element (23) nach oben ziehen und Heap neu aufbauen (durchsickern):4,6,5,7,9,16,23,10,17,18

• Oberstes Element entfernen und in das Array schreiben: 2,3,4,

• Letztes Element (18) nach oben ziehen und Heap neu aufbauen (durchsickern):5,6,16,7,9,18,23,10,17

• Oberstes Element entfernen und in das Array schreiben: 2,3,4,5

• Letztes Element (17) nach oben ziehen und Heap neu aufbauen (durchsickern):6,7,16,10,9,18,23,17

4 von 12

Page 5: Klausur Informatik 1, 04.04.2006 · PDF fileName,Vorname, Matrikelnummer Bitte unbedingt leserlich ausf¨ullen Klausur Informatik 1, 04.04.2006 Aufgabe 1 [Zahlendarstellung, Boolsche

Name,Vorname, Matrikelnummer Bitte unbedingt leserlich ausfullen

Klausur Informatik 1, 04.04.2006

Aufgabe 4 [Java] [26(+8*) Punkte]Gegeben sei folgende Klasse Chars zur Verwaltung von Zeichenketten (als Arrays von chars):

public boolean contains(Chars other)

public class Chars {{}

public char[] array;

public Chars(char[] a) { array = a; }

public Chars(String s) { array = s.toCharArray(); }

public int getLength() { return array.length; }

public int getFirstIndex(char c) {

//...

}

public boolean equals(Object other) {

//...

}

public boolean contains(Chars other) {

//...

}

public boolean containsScattered(Chars other) {

//...

}

}

Chars example = new Chars("abacab");

erzeugt zum Beispiel ein Objekt, das die Zeichenkette

[’a’, ’b’, ’a’, ’c’, ’a’, ’b’]

0 1 2 3 4 5

der Lange 6 reprasentiert. Die Array-Indizes laufen hierbei von 0 bis 5.

5 von 12

Page 6: Klausur Informatik 1, 04.04.2006 · PDF fileName,Vorname, Matrikelnummer Bitte unbedingt leserlich ausf¨ullen Klausur Informatik 1, 04.04.2006 Aufgabe 1 [Zahlendarstellung, Boolsche

Name,Vorname, Matrikelnummer Bitte unbedingt leserlich ausfullen

Klausur Informatik 1, 04.04.2006

a) Erganzen sie die Klasse um folgende Methoden:

• getFirstIndex(char c)

liefert den Index des ersten Vorkommens (von links angefangen) eines Zeichens ineiner Zeichenkette.Mit obigem Beispiel:

example.getFirstIndex(’b’)

soll den Wert 1 zuruck liefern [4 Punkte]

• equals(Object other)

vergleicht zwei Zeichenketten. Zwei Zeichenketten sind gleich wenn sie (1) gleichlang sind und (2) die Zeichen an jeder Stelle ubereinstimmen. [8 Punkte]

• contains(Chars other) uberpruft ob eine Zeichenkette eine zweite Zeichenketteother zusammenhangend enthalt. [’a’, ’b’, ’a’, ’c’,’a’, ’b’] enthalt zum Beispiel

– [’a’, ’b’, ’a’] und [’c’, ’a’],

– aber nicht [’a’, ’b’, ’c’].

[7 Punkte]

• containsScattered(Chars other)

uberpruft ob eine Zeichenkette eine zweite Zeichenkette other auch unzusam-menhangend enthalt. [’a’, ’b’, ’a’,’c’, ’a’, ’b’] enthalt zum Beispiel – zeichenweiseverteilt – [’a’, ’b’, ’c’]. [7 Punkte]

b) (nur Zusatzpunkte) Geben sie fur die Methoden

getFirstIndex()

contains()

containsScattered()

die asymptotische Laufzeit an, abhangig von der Lange der Zeichenketten.[8* Punkte]

6 von 12

Page 7: Klausur Informatik 1, 04.04.2006 · PDF fileName,Vorname, Matrikelnummer Bitte unbedingt leserlich ausf¨ullen Klausur Informatik 1, 04.04.2006 Aufgabe 1 [Zahlendarstellung, Boolsche

Name,Vorname, Matrikelnummer Bitte unbedingt leserlich ausfullen

Klausur Informatik 1, 04.04.2006

Losung:

a) public class Chars {

public static void main(String[] args) {

Chars example = new Chars("abacab");

System.out.println("getFirstIndex(’b’): "

+example.getFirstIndex(’b’));

System.out.println("getFirstIndex(’k’): "

+example.getFirstIndex(’k’));

System.out.println("abacab == abacab?: "

+example.equals(example));

System.out.println("abacab == abacab?: "

+example.equals(new Chars("abacab")));

System.out.println("abacab == abacap?: "

+example.equals(new Chars("abacap")));

System.out.println("abacab contains abacab?: "

+example.contains(new Chars("abacab")));

System.out.println("abacab contains* abacab?: "

+example.containsScattered(new Chars("abacab")));

}

public char[] array;

public Chars(char[] a) { array = a; }

public Chars(String s) { array = s.toCharArray(); }

public int length() { return array.length; }

public int getFirstIndex(char c) {

int i=0;

while(i<length()) {

if(c==array[i]) break;

i++;

}

if(i == length()) return -1;

return i;

}

7 von 12

Page 8: Klausur Informatik 1, 04.04.2006 · PDF fileName,Vorname, Matrikelnummer Bitte unbedingt leserlich ausf¨ullen Klausur Informatik 1, 04.04.2006 Aufgabe 1 [Zahlendarstellung, Boolsche

Name,Vorname, Matrikelnummer Bitte unbedingt leserlich ausfullen

Klausur Informatik 1, 04.04.2006

public boolean equals(Object other) {

if(!(other instanceof Chars)) return false;

Chars o = (Chars) other;

if(length() != o.length()) return false;

boolean result = true;

for(int i=0;i<length();i++) {

if(array[i]!=o.array[i]) {

result = false;

break;

}

}

return result;

}

public boolean contains(Chars other) {

if(other.length() > length()) return false;

boolean result = true;

for(int i=0; i<=length()-other.length(); i++) {

result = true;

for(int j=0; j<other.length();j++) {

if(array[i+j] != other.array[j]) {

result = false;

break;

}

}

if(result==true) break;

}

return result;

}

public boolean containsScattered(Chars other) {

if(other.length() > length()) return false;

int i=0; int j=0;boolean result = false;

for(i=0; i<length() && result==false; i++) {

if(array[i] == other.array[j]) {

j++;

if(j==other.length()) result = true;

}

}

return result;

}

}

8 von 12

Page 9: Klausur Informatik 1, 04.04.2006 · PDF fileName,Vorname, Matrikelnummer Bitte unbedingt leserlich ausf¨ullen Klausur Informatik 1, 04.04.2006 Aufgabe 1 [Zahlendarstellung, Boolsche

Name,Vorname, Matrikelnummer Bitte unbedingt leserlich ausfullen

Klausur Informatik 1, 04.04.2006

b) getFirstIndex(): O(n) (2 Punkte*)

contains(): O(n*m) (3 Punkte*)

containsScattered(): O(n) (3 Punkte*)

9 von 12

Page 10: Klausur Informatik 1, 04.04.2006 · PDF fileName,Vorname, Matrikelnummer Bitte unbedingt leserlich ausf¨ullen Klausur Informatik 1, 04.04.2006 Aufgabe 1 [Zahlendarstellung, Boolsche

Name,Vorname, Matrikelnummer Bitte unbedingt leserlich ausfullen

Klausur Informatik 1, 04.04.2006

Aufgabe 5 [Master-Theorem] [12 Punkte]Betrachten Sie folgenden Algorithmus:

public static int parity(int[] array, int from, int to) {

int result;

if(from==to) result = array[from];

else {

int mid = (from+to) / 2;

int left = parity(array, from, mid);

int right = parity(array, mid+1, to);

result = left + right - 2*left*right;

}

return result;

}

a) Vollziehen Sie den Aufrufint n = parity([1, 0, 1, 1], 0, 3)grafisch nach und berechnen Sie das Ergebnis. [4 Punkte]

b) Stellen Sie eine Rekurrenzgleichung fur obiges Code-Fragment auf. [4 Punkte]

c) Berechnen Sie die asymptotische Laufzeit mit Hilfe des Mastertheorems. [4 Punkte]

Losung:

a) int n = parity([1,0,1,1],0,3);

==> mid = 1;

==> left = parity([1,0,1,1],0,1);

==> mid = 0;

==> left = parity([1,0,1,1],0,0);

==> return 1;

==> right = parity([1,0,1,1],1,1);

==> return 0;

==> return 1;

==> right = parity([1,0,1,1],2,3);

==> mid = 2;

==> left = parity([1,0,1,1],2,2);

==> return 1;

==> right = parity([1,0,1,1],3,3);

==> return 1;

==> return 0;

==> return 1;

10 von 12

Page 11: Klausur Informatik 1, 04.04.2006 · PDF fileName,Vorname, Matrikelnummer Bitte unbedingt leserlich ausf¨ullen Klausur Informatik 1, 04.04.2006 Aufgabe 1 [Zahlendarstellung, Boolsche

Name,Vorname, Matrikelnummer Bitte unbedingt leserlich ausfullen

Klausur Informatik 1, 04.04.2006

b) Hier stellt sich erst die Frage nach dem Kostenmaß. Vorschlag: Zuweisung = 1, allearithmetisch und/oder booleschen Operationen = 1. Damit ergibt sich folgende Rekur-renzgleichung:

T(1) = 1 (if-Zweig)

T(n) = 2 * T(n/2) + 3 (mid-Berechnung)

+ 2 (left und right Zuw.)

+ 3 (result 1.)

+ 4 (result 2.)

= 2 * T(n) + 12.

c) Mit obiger Rekurrenzgleichung ergibt sich a = 2, b = 2, k = 0. => a = 2 > 1 = 20 = bk.Das entspricht dem 1. Fall. => T (n) = O(nlogba) = O(nlog22) = O(n1) = O(n).

11 von 12

Page 12: Klausur Informatik 1, 04.04.2006 · PDF fileName,Vorname, Matrikelnummer Bitte unbedingt leserlich ausf¨ullen Klausur Informatik 1, 04.04.2006 Aufgabe 1 [Zahlendarstellung, Boolsche

Name,Vorname, Matrikelnummer Bitte unbedingt leserlich ausfullen

Klausur Informatik 1, 04.04.2006

Aufgabe 6 [Fibonacci-Funktion] [12 Punkte]Gegeben sei die Fibonacci-Funktion mit

• fib(0) := fib(1) := 1

• fib(n + 1) := fib(n) + fib(n − 1) ∀n ∈ N, n > 1

a) Berechnen Sie fib(5). [3 Punkte]

b) Wie lautet der großte gemeinsame Teiler (ggT ) von fib(4) und fib(5)? [1 Punkt]

c) Zwei naturliche Zahlen x und y sind genau dann teilerfremd, wenn der großte gemein-same Teiler ggT (x, y) = 1 gilt. Beweisen Sie folgende Aussage mit Hilfe vollstandigerInduktion:

Zwei benachbarte Fibonacci Zahlen fib(n) und fib(n + 1) sind immer teilerfremd.

Hinweis: “k ist ein Teiler von x” kann man mathematisch so aufschreiben:∃i ∈ N k · i = x (Falls k ein Teiler von x ist, dann gibt es eine naturliche Zahl i sodass x in die Faktoren k und i zerlegt werden kann). [8 Punkte]

Losung:

a) fib(5) = fib(4)+fib(3) = fib(3)+fib(2)+fib(2)+fib(1) = fib(2)+fib(1)+fib(1)+fib(0)+ fib(1)+ fib(0)+ fib(1) = fib(1)+ fib(0)+ fib(1)+ fib(1)+ fib(0)+ fib(1)+fib(0) + fib(1) = 8

b) fib(5) = 8, f ib(4) = 5 ⇒ ggT (5, 4) = 1 ⇒ fib(4) und fib(5) sind teilerfremd.

c) Induktionsanfang: Die Aussage A2(1) ist richtig, da fib(1) = 1 und fib(2) = 2teilerfremd sind.Induktionsvoraussetzung: Sei die Aussage A2(n) bewiesen.Induktionsschritt: (A2(n) => A2(n + 1))Widerspruchbew. Waren fib(n + 1) und fib(n + 2) nicht teilerfremd, dann gabe eseine naturliche Zahl k > 1, so dass fib(n + 1) = a ∗ k und fib(n + 2) = b ∗ k mita, b Element von n. Da fib(n + 2) = fib(n) + fib(n + 1) nach Def. gilt, galte dannb ∗ k = fib(n) + a ∗ k, also fib(n) = (b − a) ∗ k. Dann waren fib(n) und fib(n + 1)nicht teilerfremd, was ein Widerspruch zur I.V. ist.

12 von 12