30
Erg¨ anzungen, Hinweise, Informationen zur Lehrveranstaltung im SS 07 Algorithmik II Inhaltsverzeichnis 1 Hinweise zur Literatur 2 2 Zur Analyse von divide-and-conquer Algorithmen 3 3 Erl¨ auterung zur Laboraufgabe 2 4 4 osung zur Aufgabe 10 5 5 osungen zu den Aufgaben 9 und 11 6 6 osung f¨ ur fraktalen Drachen (optionale Laboraufgabe 8) 8 7 osungshinweise zu den ¨ Ubungen 13, 14 und 15 10 8 osungshinweise zur Aufgabe 16 12 9 Abschlussaufgabe f¨ ur das Labor Algorithmen und Datenstrukturen II (Diplom) 16 10 L¨ osungshinweise zu den Aufgaben 18 und 20 18 11 L¨ osungshinweise zur Aufgabe 19 21 12 L¨ osungshinweise zu den restlichen Pr¨ asenz¨ ubungen 22 1

Erg¨anzungen, Hinweise, Informationen zur

  • Upload
    others

  • View
    4

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Erg¨anzungen, Hinweise, Informationen zur

Erganzungen, Hinweise, Informationen zur Lehrveranstaltung im

SS 07

Algorithmik II

Inhaltsverzeichnis

1 Hinweise zur Literatur 2

2 Zur Analyse von divide-and-conquer Algorithmen 3

3 Erlauterung zur Laboraufgabe 2 4

4 Losung zur Aufgabe 10 5

5 Losungen zu den Aufgaben 9 und 11 6

6 Losung fur fraktalen Drachen (optionale Laboraufgabe 8) 8

7 Losungshinweise zu den Ubungen 13, 14 und 15 10

8 Losungshinweise zur Aufgabe 16 12

9 Abschlussaufgabe fur das Labor Algorithmen und Datenstrukturen II (Diplom) 16

10 Losungshinweise zu den Aufgaben 18 und 20 18

11 Losungshinweise zur Aufgabe 19 21

12 Losungshinweise zu den restlichen Prasenzubungen 22

1

Page 2: Erg¨anzungen, Hinweise, Informationen zur

1. Marz 2007

1 Hinweise zur Literatur

Literatur

[CLRS01] Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, and Clifford Stein. Intro-duction to Algorithms. MIT Press, 2001.

[DD02] Ernst-Erich Doberkat and Stefan Dißmann. Einfuhrung in die objektorientierte Program-mierung mit Java. Oldenbourg, 2 edition, 2002.

[Eng88] H. Engesser, editor. Duden Informatik. Dudenverlag, 1988.

[GT01] Michael T. Goodrich and Roberto Tamassia. Data Structures and Algorithms in Java.John Wiley, 2001.

[Her95] Dietmar Herrmann. Algorithmen Arbeitsbuch. Addison Wesley, 1995.

[Knu97] Donald E. Knuth. The Art of Computer Programming. Fundamental Algorithms, volu-me 1. Addison Wesley, 3 edition, 1997.

[Knu98a] Donald E. Knuth. The Art of Computer Programming. Seminumerical Algorithms, volu-me 2. Addison Wesley, 3 edition, 1998.

[Knu98b] Donald E. Knuth. The Art of Computer Programming. Sorting and Searching, volume 3.Addison Wesley, 2 edition, 1998.

[OW90] Thomas Ottmann and Peter Widmayer. Algorithmen und Datenstrukturen. Wissen-schaftsverlag, 1990.

[Pre99] Bruno R. Preiss. Data Structures and Algorithms with Object-Oriented Design Patternsin Java. John Wiley, 1999.

[Sch01] Uwe Schoning. Algorithmik. Spektrum Akademischer Verlag, 2001.

[Sch02] Uwe Schoning. Ideen der Informatik. Grundlegende Modelle und Konzepte. Oldenbourg,2002.

[Sed92] Robert Sedgewick. Algorithmen. Addison-Wesley, 1992.

2

Page 3: Erg¨anzungen, Hinweise, Informationen zur

1. Marz 2007

2 Zur Analyse von divide-and-conquer Algorithmen

(s. zitiertes Buch von U. Schoning)

Pseudo-Code:

Solve(x)1 if |x| = 12 then solve x directly: solution is `3 return `4 else split x into subproblems x1 and x2

5 `1 ← solve(x1)6 `2 ← solve(x2)7 combine the solutions `1 and `2 into the solution ` for the original problem8 return `

Daraus ergibt sich eine Gleichung fur f(n):

f(n) = cn + d + 2f(n/2)

3

Page 4: Erg¨anzungen, Hinweise, Informationen zur

1. Marz 2007

3 Erlauterung zur Laboraufgabe 2

Erlauterung, wie sich der geforderte Anfangszustand praparieren laßt, Bsp: n = 10Eine Moglichkeit ist:

• Man nehme die Zahlen 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20,

• erzeuge daraus eine Zufallspermutation mit dem folgenden

• Algorithmus (CLRS, p. 103):

Randomize-In-Place(a)1 n← length[a]2 for i← 1 to n3 do swap a[i]↔ a[Random(i, n)] � Zufallszahlen im Intervall [i, n]

• Lemma (CLRS, p. 103): Procedure Randomize-In-Place computes a uniform random per-mutation.

• Man wahle dann eine der Zahlen aus (z.B. 4) und ersetze n− 1 der Zahlen (also 9 der Zahlenim Beispiel, also etwa alle ab 12 einschließlich) durch die ausgewahlte Zahl, also hier durch 4.

• Ergebnis (hier zur Vereinfachung ohne die Permutation abgedruckt):

1 2 3 4 5 6 7 8 9 10 11 4 4 4 4 4 4 4 4 4

also 10 × die 4,

10 × andere Zahlen, hier 1 2 3 5 6 7 8 9 10 11

• Das Ergebnis ist dann der Ausgangszustand, auf den die gesuchten Algorithmen anzuwendensind. Das ganze Programm sollte naturlich so geschrieben werden, dass der Anwender denwiederholt auftretenden Wert (4 im Beispiel) nicht vorher bereits kennt.

4

Page 5: Erg¨anzungen, Hinweise, Informationen zur

19. Marz 2007

4 Losung zur Aufgabe 10

a) m = 2

α1 = 1/3

α2 = 2/3

k = 1

also α1 + α2 = 1

daher:

T (n) = Θ(n log n)

b) m = 2

α1 = 1/3

α2 = 2/3

k = 2

also α21 + α2

2 = (1/3)2 + (2/3)2 = 5/9 < 1

daher:

T (n) = Θ(n2)

c) m = 3

α := αi = 1/4∑i αi = 3α = 3/4 < 1

k = 1

daher:

T (n) = Θ(n)

5

Page 6: Erg¨anzungen, Hinweise, Informationen zur

29. Marz 2007

5 Losungen zu den Aufgaben 9 und 11

Aufgabe 9

Zu zeigen ist: die Gleichung

C2n = 2C2n−1 + 2n mit C1 = 0

fur die unbekannte Funktion CN wird gelost durch

C2n = n2n.

Bemerkung: Die exakte allgemeine Losung kann man auch angeben; sie lautet:

CN = Nblg Nc+ 2N − 2blg Nc+1

Losung 1

setze g(n) :=12n

C2n

daraus: g(n) = g(n− 1) + 1 mit g(0) = 0

also g(n) = g(n− 1) + 1 = g(n− 2) + 2 = · · · = g(0) + n = n

daher: C2n = n2n

Losung 2

Einsetzmethode direkt (ohne die obige Substitution)

C2n = 2C2n−1 + 2n

= 2(2C2n−2 + 2n−1) + 2n

= 4C2n−2 + 2 · 2n κ = 1

= 4(2C2n−3 + 2n−2) + 2 · 2n

= 8C2n−3 + 3 · 2n κ = 2

= 8(2C2n−4 + 2n−3) + 3 · 2n

= 16C2n−4 + 4 · 2n κ = 3

allgemein:

= 2k+1C2n−(k+1) + (k + 1)2n κ = k

setze k = n− 1 :

= 2nC20 + n2n = n2n

6

Page 7: Erg¨anzungen, Hinweise, Informationen zur

Losung 3

durch Induktion uber n:

(1) C20 = 0

(2) Schluß von n auf n + 1:

Zu zeigen ist: C2n+1 = (n + 1)2n+1 unter den Voraussetzungen C2n = 2C2n−1 + 2n und C2n = n2n.

C2n+1 = 2C2n + 2n+1

= 2n2n + 2n+1

= n2n+1 + 2n+1

= (n + 1)2n+1

Aufgabe 11

a) mit Master-Theorem:

m = 7

αi = 12 , i = 1, . . . , 7

k = 2∑mi=1 αk

i =∑7

i=1

(12

)2 = 74 > 1

also

T (n) = Θ(nc) mit∑m

i=1 αci = 1

Die Summe ausgeschrieben: 7(

12

)c = 1, 7 = 2c, c = ld 7 (wobei ld = log2)

insgesamt daher:

T (n) = Θ(nld 7)

b) exakte Losung:

T (m) = 6 · 7m

(1−

(47

)m)mit n = 2m

= 6 · 7ld n

(1−

(47

)ld n)

= 6 · nld 7(1− nld (4/7)

)

Der Vorteil ist hier, dass man so auch die Konstante erhalt, die in einer Aussage zum asym-ptotischen Verhalten der Art Θ(. . .) implizit steckt.

7

Page 8: Erg¨anzungen, Hinweise, Informationen zur

4. April 2007

6 Losung fur fraktalen Drachen (optionale Laboraufgabe 8)

Kann im Detail noch erheblich verfeinert/verbessert werden.

1 package Aufgaben;2 /* compile and start with3

4 javac −classpath /usr/local/share/ Fractals.java5 java −classpath ..:/usr/local/share/ Aufgaben.FractalsDemo6 */7 import com.imsl.math.*;8 import java.awt.*;9 import java.awt.event.*;

10

11 public class Fractals extends Canvas {12 int13 xmin, xmax, ymin, ymax, xOffset, yOffset, colorScale, width,14 height, maxSteps, limit;15 double16 scale, lambdaX, lambdaY;17 Fractals () {18 repaint();19 }20 void init () {21 this.xmin = 0; this.xmax = 1280−1;22 this.ymin = 0; this.ymax = 1024−1;23 this.xOffset = 150; this.yOffset = 450;24 this.colorScale = 10;25 this.width = 2; this.height = 2; // of rectangles26 this.maxSteps = 100; this.limit = 500;27 this.scale= 0.001;28 this.lambdaX = 1.64; this.lambdaY = 0.96;29 }30 public void paint (Graphics g) {31 init();32 com.imsl.math.Complex lambda = new com.imsl.math.Complex(lambdaX, lambdaY);33 // Mandelbrot, Tafel C534 for (int x = xmin; x <= xmax; x+=width) {35 for (int y = ymin; y <= ymax; y+=height) {36 com.imsl.math.Complex z37 = new com.imsl.math.Complex(scale*(x−xOffset), scale*(y−yOffset));38 double norm = com.imsl.math.Complex.abs(z);39 int k = 0;40 while (k < maxSteps && norm < limit) {41 z = lambda.times(z.minus(z.times(z)));42 norm = com.imsl.math.Complex.abs(z);43 k++;44 } // norm >= limit || k >= maxSteps

8

Page 9: Erg¨anzungen, Hinweise, Informationen zur

45 if (norm >= limit) {46 g.setColor(new Color(colorScale*k));47 } else { // norm < limit48 g.setColor(Color.cyan);49 }50 g.drawRect(x, y, width, height);51 }52 }53 }54 }55

56 class FractalsDemo extends Frame {57 FractalsDemo (String title) {58 super (title);59 Fractals graph = new Fractals();60 add(graph, BorderLayout.CENTER);61 addWindowListener (new WindowController ());62 setSize (1280, 1024);63 setVisible (true);64 }65 class WindowController extends WindowAdapter {66 public void windowClosing (WindowEvent event) {67 System.exit (0);68 }69 }70 public static void main (String [ ] args) {71 new FractalsDemo (”fractal dragon”);72 }73 }

Dieses Programm kann als Modell verwendet werden fur die Laboraufgabe 3, in der etwas Java-Graphik zu programmieren ist.

9

Page 10: Erg¨anzungen, Hinweise, Informationen zur

16. April 2007

7 Losungshinweise zu den Ubungen 13, 14 und 15

Ubung 13

P [X = k ] =12k

E [X ] =∞∑

k=1

k · 2−k = 2

Trick zur Berechnung der Summe:

f(x) =∞∑

k=1

xk =1

1− x− 1 =

x

1− x

f ′(x) =∞∑

k=1

kxk−1 =1x

∞∑k=1

kxk

f ′(x) =1

(1− x)2

algemeines systematisches Verfahren: erzeugende Funktion verwenden: GX(z) = E[zX]

Ubung 14

zunachst Hilfsformel (die man auch aus einer Tabelle abschreiben kann):∞∑

k=1

kεk−1 =1

(1− ε)2

Begrundung: betrachte

11− x

=∞∑

k=0

xk

daraus:(1

1− x

)′=

( ∞∑k=0

xk

)′

1(1− x)2

=∞∑

k=0

kxk−1 =∞∑

k=1

kxk−1

Erfolg nach genau

→ t Schritten, d.h.

→ genau t− 1 mal Misserfolg und dann genau einmal Erfolg

Wahrscheinlichkeit dafur: εt−1 · (1− ε)Erwartungswert fur die Schrittzahl:

E [t ] =∞∑

t=1

tεt−1(1− ε)

= (1− ε)1

(1− ε)2=

11− ε

10

Page 11: Erg¨anzungen, Hinweise, Informationen zur

Ubung 15

Kompakte Darstellung (nach Knuth):2 3 5 7 11 13 17 19 23 29 31 37 41

5 5 7 11 13 17 19 23 29 31 37 4110 7 11 13 17 19 23 29 31 37 41

17 11 13 17 19 23 29 31 37 4117 24 17 19 23 29 31 37 41

24 34 19 23 29 31 37 4124 34 42 29 31 37 41

34 42 53 31 37 4142 53 65 37 4142 53 65 78

95 65 7895 143

238Eine konkrete Darstellung des Baumes erhalt man am einfachsten dadurch, dass man – von derWurzel mit Gewicht 238 beginnend – die entsprechenden Kindknoten anhangt.

11

Page 12: Erg¨anzungen, Hinweise, Informationen zur

20. April 2007

8 Losungshinweise zur Aufgabe 16

LZW-Algorithmus : Ablauf im Detail am Beispiel des Wortes ananasanna

1. D wird initialisiert mit a, n, s / code 0, 1, 2

2. Ablauf:

w k wk∈D? out/code D ← wk codeε a a∈D? y

a n an∈D? n a/0 an 3

n a na∈D? n n/1 na 4

a n an∈D? y

an a ana∈D? n an/3 ana 5

a s as∈D? n a/0 as 6

s a sa∈D? n s/2 sa 7

a n an∈D? y

an n ann∈D? n an/3 ann 8

n a na∈D? y

na EOF na/4

12

Page 13: Erg¨anzungen, Hinweise, Informationen zur

a) Protokoll der Einzelschritte:

w k wk∈D? out / code D ← wk new codeε F F ∈D? yF I FI ∈D? n F / 1 FI 10I S IS ∈D? n I / 2 IS 11S C SC ∈D? n S / 3 SC 12C H CH ∈D? n C / 4 CH 13H E HE ∈D? n H / 5 HE 14E R ER∈D? n E / 6 ER 15R S RS ∈D? n R / 7 RS 16S . S.∈D? n S / 3 S. 17. F .F ∈D? n . / 0 .F 18F R FR∈D? n F / 1 FR 19R I RI ∈D? n R / 7 RI 20I T IT ∈D? n I / 2 IT 21T Z TZ ∈D? n T / 8 TZ 22Z E ZE ∈D? n Z / 9 ZE 23E . E.∈D? n E / 6 E. 24. F .F ∈D? y.F I .FI ∈D? n .F / 18 .F I 25I S IS ∈D? yIS C ISC ∈D? n IS / 11 ISC 26C H CH ∈D? yCH T CHT ∈D? n CH / 13 CHT 27T . T.∈D? n T / 8 T. 28. F .F ∈D? y.F R .FR∈D? n .F / 18 .FR 29R I RI ∈D? yRI S RIS ∈D? n RI / 20 RIS 30S C SC ∈D? ySC H SCH ∈D? n SC / 12 SCH 31H E HE ∈D? yHE . HE.∈D? n HE / 14 HE. 32. F .F ∈D? y.F I .FI ∈D? y.F I S .FIS ∈D? n .F I / 25 .F IS 33S C SC ∈D? ySC H SCH ∈D? ySCH E SCHE ∈D? n SCH / 31 SCHE 34E EOF E / 6

13

Page 14: Erg¨anzungen, Hinweise, Informationen zur

b) Protokoll der Einzelschritte:

w k wk∈D? out / code D ← wk new codeε A A∈D? yA H AH ∈D? n A / 0 AH 8H N HN ∈D? n H / 1 HN 9N E NE ∈D? n N / 2 NE 10E N EN ∈D? n E / 3 EN 11N . N.∈D? n N / 2 N. 12. N .N ∈D? n . / 4 .N 13N A NA∈D? n N / 2 NA 14A H AH ∈D? yAH M AHM ∈D? n AH / 8 AHM 15M E ME ∈D? n M / 5 ME 16E N EN ∈D? yEN . EN.∈D? n EN / 11 EN. 17. A .A∈D? n . / 4 .A 18A N AN ∈D? n A / 0 AN 19N A NA∈D? yNA N NAN ∈D? n NA / 14 NAN 20N A NA∈D? yNA S NAS ∈D? n NA / 14 NAS 21S B SB ∈D? n S / 6 SB 22B A BA∈D? n B / 7 BA 23A N AN ∈D? yAN A ANA∈D? n AN / 19 ANA 24A N AN ∈D? yAN E ANE ∈D? n AN / 19 ANE 25E N EN ∈D? yEN S ENS ∈D? n EN / 11 ENS 26S A SA∈D? n S / 6 SA 27A H AH ∈D? yAH N AHN ∈D? n AH / 8 AHN 28N E NE ∈D? yNE EOF NE / 10

c) s. Musterlosung zur Klausur vom SS 06

14

Page 15: Erg¨anzungen, Hinweise, Informationen zur

Zur Erganzung: Das dictionary bei 10-maligem Zusammenfugen des Textes aus Teil b. Mansieht sehr deutlich, wie durch die neu erkannten Symbole, die zunehmend langere Teile des Aus-gangstextes reprasentieren, immer effizienter komprimiert wird. Der Kompressiongrad wurdeso bei einem langeren Text steigen.

0: A1: H2: N3: E4: .5: M6: S7: B8: AH9: HN10: NE11: EN12: N.13: .N14: NA15: AHM16: ME17: EN.18: .A19: AN20: NAN21: NAS22: SB23: BA24: ANA25: ANE26: ENS27: SA28: AHN29: NEA30: AHNE31: EN.N32: NAH33: HM34: MEN35: N.A36: ANAN37: NASB

38: BAN39: NANE40: ENSA41: AHNEA42: AHNEN43: N.N44: NAHM45: MEN.46: .AN47: NANA48: AS49: SBA50: ANANE51: ENSAH52: HNE53: EA54: AHNEN.55: .NA56: AHME57: EN.A58: ANANA59: ASB60: BANA61: ANEN62: NS63: SAH64: HNEA65: AHNEN.N66: NAHME67: EN.AN68: NANAS69: SBAN70: NANEN71: NSA72: AHNEAH73: HNEN74: N.NA75: AHMEN

76: N.AN77: NANASB78: BANAN79: NEN80: NSAH81: HNEAH82: HNEN.83: .NAH84: HME85: EN.ANA86: ANAS87: SBANA88: ANENS89: SAHN90: NEAH91: HNEN.N92: NAHMEN93: N.ANA94: ANASB95: BANANE96: ENSAHN97: NEAHN98: NEN.99: .NAHM100: MEN.A101: ANANAS102: SBANAN103: NENS104: SAHNE105: EAH106: HNEN.NA107: AHMEN.108: .ANA109: ANASBA110: ANANEN111: NSAHN

15

Page 16: Erg¨anzungen, Hinweise, Informationen zur

2. Mai 2007

9 Abschlussaufgabe fur das Labor Algorithmen und Datenstruk-turen II (Diplom)

Die folgende Aufgabe ist die Abschlussaufgabe fur das AuD II-Labor im SS 07. Die Auf-gabe soll ausgearbeitet und mit gedrucktem Programm-Code (keine Disketten) undErlauterungen abgegeben werden bis spatestens unmittelbar

vor Beginn der Klausur zur LV Algorithmik II.

(Abgabe entweder im Labor am Mitwoch oder Einwurf in Postfach Nr. 143 (Name undMatrikel-Nummer bitte nicht vergessen!)).

Die Erlauterungen sollen eine ausformulierte Beschreibung Ihrer Implementierung ent-halten vom Umfang ca. einer DIN A4-Seite gedruckten Textes. Nur Kommentare imProgramm reichen nicht.

Die Aufgabe besteht darin, Klassen zu entwickeln, die den Umgang mit Bruchen (rationalen Zahlen)mit beliebig großen Zahlern und Nennern gestatten. Solche Klassen spielen in Anwendungen eineRolle, in denen es auf extreme Genauigkeit ankommt. Schreiben Sie außerdem eine kleine Testan-wendung, die demonstriert, dass Ihre Implementierung korrekt funktioniert.

Im Detail: Es sind zwei Klassen zu entwickeln: RationalNumber und TestRationals.RationalNumber soll das abgedruckte Interface Rational implementieren und die Klasse java.lang.Numbererweitern. Zahler und Nenner sollen Objekte vom Typ java.math.BigInteger sein. Ausfuhrliche Be-schreibungen dieser Klassen aus dem Java-API findet man in der Java-Dokumentation.Ihre Testklasse sollte zumindestens folgende Kontrollanwendungen enthalten:

• Zu berechnen ist der Wert von

w =N1

N2+

N2

N1

wobei N1 und N2 große naturliche Zahlen sind, die als long-Werte nicht mehr direkt verarbeitetwerden konnten.

• Die Testanwendung sollte insbesondere auch ein Array von rationalen Zahlen enthalten, wel-ches irgendwie mit Werten belegt und dann mittels einer geeigneten Methode aus der Klassejava.util.Arrays sortiert wird.

Hinweise: Die Bearbeitung der Aufgabe kann schwierig werden, wenn man mit der Implementierungetwas planlos beginnt. Deshalb folgende Tipps:

• Losen Sie die gesamte Aufgabe erst fur den Fall, dass Zahler und Nenner vom elementaren Typint sind. Die nachtragliche Umstellung auf BigInteger ist dann nicht mehr besonders schwierig.

• Die im Interface vorgegebenen Methoden kann man zum Teil aufeinander zuruckfuhren. Uber-legen Sie sorgfaltig, was Sie im Detail implementieren mussen und was dann auf bereits im-plementierte Methoden zuruckgefuhrt werden kann.

• Die Regeln fur das Bruchrechnen durften aus der Schule noch bekannt sein. Wichtig ist hier,dass Bruche in jedem Fall so fruh wie moglich gekurzt werden bzw. dass gemeinsame Faktorenz. B. bei der Addition herausgezogen werden, um ein exzessives Anwachsen von Zwischener-gebnissen zu vermeiden.

16

Page 17: Erg¨anzungen, Hinweise, Informationen zur

• In einem Objekt vom Typ RationalNumber sollten Zahler und Nenner stets eindeutig sein, d. h.also, der Bruch sollte stets in gekurzter Form vorliegen, und das Vorzeichen sollte in einemeigenen Attribut signum abgelegt werden.

Das vorgegebene Interface ist:

1 import java.math.*;2

3 public interface Rational extends Comparable {4 /** Returns the numerator of this fraction (Rational). */5 BigInteger getNumerator();6

7 /** Returns the denominator of this fraction (Rational). */8 BigInteger getDenominator();9

10 /** Returns the signum function of this Rational. */11 int signum();12

13 /** Returns a Rational whose value is (this + val). */14 Rational add(Rational val);15

16 /** Returns a Rational whose value is (this − val). */17 Rational subtract (Rational val);18

19 /** Returns a Rational whose value is (this * val). */20 Rational multiply(BigInteger val);21

22 /** Returns a Rational whose value is (this * val). */23 Rational multiply(Rational val);24

25 /** Returns a Rational whose value is (this / val). */26 Rational divide(BigInteger val);27

28 /** Returns a Rational whose value is (this / val). */29 Rational divide(Rational val);30

31 /** Compares this Rational with the specified Object for equality. */32 boolean equals(Object val);33

34 /** Compares this Rational with the specified Rational. */35 int compareTo(Rational val);36

37 /** Returns a string representation of this Rational. */38 String toString();39 }

17

Page 18: Erg¨anzungen, Hinweise, Informationen zur

10. Mai 2007

10 Losungshinweise zu den Aufgaben 18 und 20

Aufgabe 18

Laut Aufgabe:

ak =1n

n−1∑j=0

yje−ijk2π/n mit 0 ≤ k ≤ n− 1.

und

yk =n−1∑j=0

ajeijk2π/n mit 0 ≤ k ≤ n− 1

Indizes mussen umbenannt werden (naturlich konsequent an jeder Stelle):1. j → l

yk =n−1∑l=0

aleilk2π/n mit 0 ≤ k ≤ n− 1

und 2. k → j

yj =n−1∑l=0

aleijl2π/n mit 0 ≤ j ≤ n− 1

einsetzen von yj :

ak =1n

n−1∑j=0

n−1∑l=0

aleij(l−k)2π/n =

1n

n−1∑l=0

n−1∑j=0

aleij(l−k)2π/n

=1n

n−1∑l=0

al

n−1∑j=0

(ei(l−k)2π/n)j

= (∗)

Was ist

1n·

n−1∑j=0

(ei(l−k)2π/n)j = ?

Fur l = k:

1n·

n−1∑j=0

(ei(l−k)2π/n)j = 1

und fur l 6= k:

n−1∑j=0

(ei(l−k)2π/n)j =1− ei(l−k)2π

1− ei(l−k)2π/n= 0

18

Page 19: Erg¨anzungen, Hinweise, Informationen zur

Das erhalt man1. entweder durch Berechnung der geometrischen Reihe (wie angegeben, ist hier etwas umstandlichund uberflussig)Man muß hier aufpassen: der Zahler ist also 0, der Nenner wegen

−(n− 1) ≤ l − k ≤ n− 1

aber nicht!2. oder aus Symmetrieargument: Summe der Einheitswurzeln in der Gaußschen Zahlenebene istoffenbar 0.also insgesamt:

1n·

n−1∑j=0

(ei(l−k)2π/n)j = δkl

(∗) =n−1∑l=0

alδkl = ak

Aufgabe 20

Vorbemerkung: Das aktuelle ω in der for-Schleife ist (ωn)k.

• n = 1:

(y0) = Recursive-FFT((a0))wobei

y0 = a0

• n = 2:

(y0, y1) = Recursive-FFT((a0, a1)) =?

ω2 = e2πi/2 = −1

aeven = (a0)

aodd = (a1)

yeven = Recursive-FFT((a0))

yodd = Recursive-FFT((a1))

konkret:

yeven = (a0)

yodd = (a1)

for-Schleife: k = 0 . . . 0

y0 = yeven0 + yodd

0 = a0 + a1

y1 = yeven0 − yodd

0 = a0 − a1

insgesamt also:

(y0, y1) = Recursive-FFT((a0, a1))wobei

y0 = a0 + a1

y1 = a0 − a1

19

Page 20: Erg¨anzungen, Hinweise, Informationen zur

• n = 4:

ω4 = e2πi/4 = i

(y0, y1, y2, y3) = Recursive-FFT((a0, a1, a2, a3)) =?

aeven = (a0, a2)

aodd = (a1, a3)

yeven = Recursive-FFT((a0, a2))

yodd = Recursive-FFT((a1, a3))

konkret:

yeven = (a0 + a2, a0 − a2)

yodd = (a1 + a3, a1 − a3)

for-Schleife: k = 0 . . . 1

y0 = yeven0 + yodd

0 = a0 + a2 + a1 + a3

y2 = yeven0 − yodd

0 = a0 + a2 − (a1 + a3)

y1 = yeven1 + ω4y

odd1 = a0 − a2 + i(a1 − a3)

y3 = yeven1 − ω4y

odd1 = a0 − a2 − i(a1 − a3)

insgesamt also:

(y0, y1, y2, y3) = Recursive-FFT((a0, a1, a2, a3))wobei

y0 = a0 + a1 + a2 + a3

y1 = a0 + ia1 − a2 − ia3

y2 = a0 − a1 + a2 − a3

y3 = a0 − ia1 − a2 + ia3

zum Vergleich: Ergebnis (n = 4) kann auch berechnet werden uber die Vandermondesche Matrix:y0

y1

y2

y3

=

1 1 1 11 i −1 −i1 −1 1 −11 −i −1 i

a0

a1

a2

a3

Diese Form ist besonders gut dazu geeignet, um die Aufgabe 21 zu losen.

20

Page 21: Erg¨anzungen, Hinweise, Informationen zur

17. Mai 2007

11 Losungshinweise zur Aufgabe 19

Die einfachste Losung: a(t) ausschreiben und daraus die yj ablesen.

a(t) =1n

n−1∑j=0

yjω−jt

wobei ω = e2πi/n, also ωn = 1.

a(t) = cos (3 · 2πt/n) +12

sin (5 · 2πt/n) mit n = 128

ausgeschrieben:

a(t) =12(e3·2πit/n + e−3·2πit/n) +

12· 12i

(e5·2πit/n − e−5·2πit/n)

=12ω3t +

12ω−3t − i

4ω5t +

i

4ω−5t

=12ω−3t +

i

4ω−5t − i

4ω−(n−5)t +

12ω−(n−3)t

und daraus die yj/n ablesen:

. . .y0 = 0 y121 = 0y1 = 0 y122 = 0y2 = 0 y123 = −(128/4) · i = −32iy3 = 128/2 = 64 y124 = 0y4 = 0 y125 = 128/2 = 64y5 = (128/4) · i = 32i y126 = 0y6 = 0 y127 = 0. . .

21

Page 22: Erg¨anzungen, Hinweise, Informationen zur

1. Juni 2007

12 Losungshinweise zu den restlichen Prasenzubungen

Aufgabe 12

a) Binomialverteilung:

• n Versuche, nummerieren von 1 bis n

• Angenommen, das Ereignis geschieht genau m mal, z. B. bei den Versuchsnummern 1 . . .moder zu anderen definierten Nummern.Dann ist die Wahrscheinlichkeit fur dieses Ereignis:

pmqn−m

• Wahrscheinlichkeit dafur, dass das Ereignis genau m mal geschieht, aber bei irgendwelchenVersuchsnummern:

b(m,n, p) =(

n

m

)pmqn−m

b) Normierungsbedingung:

n∑m=0

(n

m

)pmqn−m = (p + q)n = 1 (aus Binomialsatz)

c) Ein detailliertes Beispiel:

t = 11 Personen verfugen je uber eine asymmetrische Munze, die mit Wahrscheinlichkeit ε dasEreignis B ergibt, also etwa Wappen, welches als fehlerhaft interpretiert wird. Entsprechendwird mit der Wahrscheinlichkeit 1 − ε das richtige Ereignis A erhalten, also Zahl. Ein Mehr-heitsvotum kommt folgendermaßen zustande. Jede Person wirft einmal die Munze und votiertdementsprechend mit A = richtig oder B = falsch. Die moglichen Ausgange sind dabei diefolgenden:

• Niemand votiert richtig, alle falsch

• oder einer votiert richtig, alle bis auf einen falsch

• oder . . . .

22

Page 23: Erg¨anzungen, Hinweise, Informationen zur

A = richtig B = falsch Wahrscheinlichkeit Ergebnis

0 11(110

)(1− ε)0ε11 Mehrheitsvotum fuhrt zu Fehler

1 10(111

)(1− ε)1ε10 Mehrheitsvotum fuhrt zu Fehler

2 9(112

)(1− ε)2ε9 Mehrheitsvotum fuhrt zu Fehler

3 8(113

)(1− ε)3ε8 Mehrheitsvotum fuhrt zu Fehler

4 7(114

)(1− ε)4ε7 Mehrheitsvotum fuhrt zu Fehler

5 6(115

)(1− ε)5ε6 Mehrheitsvotum fuhrt zu Fehler

6 5(116

)(1− ε)6ε5

7 4(117

)(1− ε)7ε4

8 3(118

)(1− ε)8ε3

9 2(119

)(1− ε)9ε2

10 1(1110

)(1− ε)10ε1

11 0(1111

)(1− ε)11ε0

Daher gilt

perror =(110

)(1− ε)0ε11 +

(111

)(1− ε)1ε10 +

(112

)(1− ε)2ε9

+(113

)(1− ε)3ε8 +

(114

)(1− ε)4ε7 +

(115

)(1− ε)5ε6

allgemein:

=bt/2c∑i=0

(t

i

)(1− ε)iεt−i

d) Das Ergebnis ist klar: ein Algorithmus, der durch Munzenwerfen mit fairer Munze ersetztwerden kann, kann nichts Brauchbares ergeben. Das Endergebnis kann auch durch Munzwurferhalten werden.

Eine Rechnung der folgenden Art ist trotzdem enorm wichtig, um die Formel fur intuitiv klareFalle zu testen: Formeln konnen auch falsch sein!

ε =12

perror =12

formal:

perror =bt/2c∑i=0

(t

i

)(12

)i(12

)t−i

=12t

bt/2c∑i=0

(t

i

)

Die Summe rechts ist die Halfte von

t∑i=0

(t

i

)= 2t = (1 + 1)t

23

Page 24: Erg¨anzungen, Hinweise, Informationen zur

(ergibt sich z. B. aus Pascal-Dreieck)

daher:bt/2c∑i=0

(t

i

)=

122t = 2t−1

also insgesamt:

perror =12t

122t =

12

e) Die Ungleichung ist deswegen richtig, weil der rechts hinzugefugte Term 1−εε ≥ 1 ist fur ε ≤ 1

2 .

f) δt = 10−α

daraus (als eine mogliche Form):

t =⌈

α

log10(1/δ)

⌉Aufgabe 21

n = 2:entsprechende Tupel (mit Nullen ausgefullt auf 2n = 4):a = (1, 2, 0, 0)b = (2, 1, 0, 0)Rechnen uber die Vandermondesche Matrix:

V =

1 1 1 11 ω ω2 ω3

1 ω2 ω4 ω6

1 ω3 ω6 ω9

mit

ω = ω2n = ω4 = e2πi/4 = ei(π/2) = i

konkret:

V =

1 1 1 11 i −1 −i1 −1 1 −11 −i −1 i

und

V −1 =14

1 1 1 11 −i −1 i1 −1 1 −11 i −1 −i

daraus:

y =

3

1 + 2i−1

1− 2i

=

1 1 1 11 i −1 −i1 −1 1 −11 −i −1 i

1200

24

Page 25: Erg¨anzungen, Hinweise, Informationen zur

und

y′ =

3

2 + i1

2− i

=

1 1 1 11 i −1 −i1 −1 1 −11 −i −1 i

2100

Das Produkt:y • y′ = (9, 5i,−1,−5i)daraus endgultig:

c = a⊗ b =

c0

c1

c2

c3

=14

1 1 1 11 −i −1 i1 −1 1 −11 i −1 −i

95i−1−5i

=

2520

also

C(x) = 2 + 5x + 2x2

Aufgabe 22

1 1 1 1 1 1 1 11 ω1 ω2 ω3 ω4 ω5 ω6 ω7

1 ω2 ω4 ω6 ω8 ω10 ω12 ω14

1 ω3 ω6 ω9 ω12 ω15 ω18 ω21

1 ω4 ω8 ω12 ω16 ω20 ω24 ω28

1 ω5 ω10 ω15 ω20 ω25 ω30 ω35

1 ω6 ω12 ω18 ω24 ω30 ω36 ω42

1 ω7 ω14 ω21 ω28 ω35 ω42 ω49

Die Vereinfachung ergibt sich aus

n =⌊n

8

⌋· 8 + n mod 8

Wegen ωk·8 = e(2πi/8)·k·8 = 1 folgt daher:

ωn = ωbn/8c·8 · ωn mod 8 = ωn mod 8

Aufgabe 23

n = 4s = 1 . . . lg 4 = 1, 2 (lg x = log2 x)

25

Page 26: Erg¨anzungen, Hinweise, Informationen zur

s = 1m = 2ω2 = e2πi/2 = −1k = 0 . . . 3 by 2 = 0, 2

k = 0ω = 1j = 0 . . . 2/2− 1 = 0

j = 0

t = A[1]u = A[0]A[0] = (A[0] + A[1])oldA[1] = (A[0]−A[1])oldω = −1

k = 2ω = 1j = 0 . . . 2/2− 1 = 0

j = 0

t = A[3]u = A[2]A[2] = (A[2] + A[3])oldA[3] = (A[2]−A[3])oldω = −1

26

Page 27: Erg¨anzungen, Hinweise, Informationen zur

s = 2m = 4ω4 = e2πi/4 = ik = 0 . . . 3 by 4 = 0

k = 0ω = 1j = 0 . . . 4/2− 1 = 0, 1ω = 1

j = 0

t = A[2]u = A[0]A[0] = (A[0] + A[2])oldA[2] = (A[0]−A[2])oldω = i

j = 1

t = iA[3]u = A[1]A[1] = (A[1] + iA[3])oldA[3] = (A[1]− iA[3])oldω = i2 = −1

Resultat:

A[0] = y0 = a0 + a2 + a1 + a3

A[1] = y1 = a0 − a2 + ia1 − ia3

A[2] = y2 = a0 + a2 − a1 − a3

A[3] = y3 = a0 − a2 − ia1 + ia3

Aufgabe 24

Original Schlussel Chiffre Original xor Chiffre(1) (2) (3) (4)0 0 0 00 1 1 11 0 1 01 1 0 1

Die Spalten (2) und (4) sind gleich.

27

Page 28: Erg¨anzungen, Hinweise, Informationen zur

Aufgabe 25

allgemein: (a, b)

(b, a mod b)

(d′, x′, y′)

(d′, y′, x′ − babc · y′) = (d, x, y)

also: gcd(a, b) = d = ax + byWenden Sie diesen Algorithmus an auf die Zahlenpaare → a = 20, b = 35:

(20, 35)

(35, 20 mod 35) = (35, 20)

(20, 35 mod 20) = (20, 15)

(15, 20 mod 15) = (15, 5)

(5, 15 mod 5) = (5, 0)

(5, 1, 0)

(5, 0, 1 − b 155c · 0) = (5, 0, 1)

(5, 1, 0 − b 2015c · 1) = (5, 1,−1)

(5,−1, 1 − b 3520c · (−1)) = (5,−1, 2)

(5, 2,−1 − b 2035c · 2) = (5, 2,−1)

gcd(20, 35) = 5 = 2 · 20 + (−1) · 35→ a = 99, b = 78:

28

Page 29: Erg¨anzungen, Hinweise, Informationen zur

(99, 78)

(78, 99 mod 78) = (78, 21)

(21, 78 mod 21) = (21, 15)

(15, 21 mod 15) = (15, 6)

(6, 15 mod 6) = (6, 3)

(3, 6 mod 3) = (3, 0)

(3, 1, 0)

(3, 0, 1− b63c · 0) = (3, 0, 1)

(3, 1, 0− b156 c · 1) = (3, 1,−2)

(3,−2, 1− b2115c · (−2)) = (3,−2, 3)

(3, 3,−2− b7821c · 3) = (3, 3,−11)

(3,−11, 3 + b9978c · 11) = (3,−11, 14)

gcd(99, 78) = 3 = (−11) · 99 + 14 · 78

Aufgabe 26

a) Z∗45 = {1, 2, 4, 7, 8, 11, 13, 14, 16, 17, 19, 22, 23, 26, 28, 29, 31, 32, 34, 37, 38, 41, 43, 44}

b) Z∗15 = {1, 2, 4, 7, 8, 11, 13, 14}

c) Z∗11 = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}

a) ϕ(45) = 24

b) ϕ(15) = 8

c) ϕ(11) = 10

allgemein (CLRS, p. 865):

ϕ(n) = n∏p|n

(1− 1

p

)= |Z∗

n|

Primfaktoren im Produkt werden nur einmal gerechnet!

29

Page 30: Erg¨anzungen, Hinweise, Informationen zur

Aufgabe 27

vgl. CLRS, p. 865Extended-Euclid ergibt (d, x, y) = (1,−2, 1), so dass also 1 = 5 · (−2) + 11 · 1.Die Losung ist also −2, d. h. 9 mod 11 ist ein multiplikatives Inverses von 5 modulo 11.insgesamt also: 9 ≡ 5−1 (mod 11)

Aufgabe 28

a) ϕ(45) = 3 · 3 · 5(1− 13)(1− 1

5) = 24

ϕ(15) = 3 · 5(1− 13)(1− 1

5) = 8

ϕ(11) = 11(1− 111) = 10

b) ϕ(n) = pq(1− 1p)(1− 1

q ) = (p− 1)(q − 1)

c) ϕ(n) = p(1− 1p) = p− 1

Aufgabe 29

35 mod 7 = 5

dazu auch Klausuraufgabe 1, WS 06/07

Aufgabe 30

a) Additions- und Multiplikationstafel:

Gruppe (Z6, +6)

+6 0 1 2 3 4 5

0 0 1 2 3 4 51 1 2 3 4 5 02 2 3 4 5 0 13 3 4 5 0 1 24 4 5 0 1 2 35 5 0 1 2 3 4

Gruppe (Z∗15, ·15)

·15 1 2 4 7 8 11 13 14

1 1 2 4 7 8 11 13 142 2 4 8 14 1 7 11 134 4 8 1 13 2 14 7 117 7 14 13 4 11 2 1 88 8 1 2 11 4 13 14 711 11 7 14 2 13 1 8 413 13 11 7 1 14 8 4 214 14 13 11 8 7 4 2 1

In dieser Menge kann man auch Divisionenausfuhren.

b) Die folgende Tabelle enthalt die Werte x mit ax ≡ b (mod n) fur n = 15

a 1 2 4 7 8 11 13 14b

1 1 8 4 13 2 11 7 142 2 1 8 11 4 7 14 134 4 2 1 7 8 14 13 117 7 11 13 1 14 2 4 88 8 4 2 14 1 13 11 7

11 11 13 14 8 7 1 2 413 13 14 7 4 11 8 1 214 14 7 11 2 13 4 8 1

30