Einstieg in die Informatik mit Java - math.kit. · PDF fileEinstieg in die Informatik mit Java...

32
Einstieg in die Informatik mit Java Effizienz Gerd Bohlender Institut f ¨ ur Angewandte und Numerische Mathematik 1 / 32

Transcript of Einstieg in die Informatik mit Java - math.kit. · PDF fileEinstieg in die Informatik mit Java...

Page 1: Einstieg in die Informatik mit Java - math.kit. · PDF fileEinstieg in die Informatik mit Java Effizienz Gerd Bohlender Institut fur Angewandte und Numerische Mathematik ... int Faktor

Einstieg in die Informatik mit JavaEffizienz

Gerd Bohlender

Institut fur Angewandte und Numerische Mathematik

1 / 32

Page 2: Einstieg in die Informatik mit Java - math.kit. · PDF fileEinstieg in die Informatik mit Java Effizienz Gerd Bohlender Institut fur Angewandte und Numerische Mathematik ... int Faktor

Gliederung

1 Uberblick: was ist Effizienz?

2 Landau-Symbole

3 Eier im Korb

4 Zyklische Ziffern

2 / 32

Page 3: Einstieg in die Informatik mit Java - math.kit. · PDF fileEinstieg in die Informatik mit Java Effizienz Gerd Bohlender Institut fur Angewandte und Numerische Mathematik ... int Faktor

Gliederung

1 Uberblick: was ist Effizienz?

2 Landau-Symbole

3 Eier im Korb

4 Zyklische Ziffern

3 / 32

Page 4: Einstieg in die Informatik mit Java - math.kit. · PDF fileEinstieg in die Informatik mit Java Effizienz Gerd Bohlender Institut fur Angewandte und Numerische Mathematik ... int Faktor

Uberblick: was ist Effizienz?

In diesem Kapitel betrachten wir verschiedene Aspekte derEffizienz eines Programms

• Benotigte Rechenzeit• Ausnutzung der Performance des Computers• Beispiel Parallelrechner mit p Prozessoren:

Effizienz(p) = Zeit(1)pZeit(p)

• Benotigter Speicher• Aufwand des Programmierers• ...• 2 Beispiele

4 / 32

Page 5: Einstieg in die Informatik mit Java - math.kit. · PDF fileEinstieg in die Informatik mit Java Effizienz Gerd Bohlender Institut fur Angewandte und Numerische Mathematik ... int Faktor

Gliederung

1 Uberblick: was ist Effizienz?

2 Landau-Symbole

3 Eier im Korb

4 Zyklische Ziffern

5 / 32

Page 6: Einstieg in die Informatik mit Java - math.kit. · PDF fileEinstieg in die Informatik mit Java Effizienz Gerd Bohlender Institut fur Angewandte und Numerische Mathematik ... int Faktor

Asymptotischer Aufwand eines Algorithmus –Landau-Symbole

• Landau-Symbole: Schreibweise f (n) ∈ O(g(n)) fur

”f wachst nicht wesentlich schneller als g“(Edmund Landau, Berlin / Gottingen / Jerusalem,1877-1938)

• Die Funktion f (n) ist ∈ O(g(n)), fur n →∞, genau wennes Konstanten n0 und M gibt mit

|f (n)| < M · |g(n)|

fur alle n > n0

• Alternative Definition: f (n) ∈ O(g(n)) genau wenn0 ≤ lim supn→∞ | f (n)

g(n) | < ∞• Weitere Varianten siehehttp://de.wikipedia.org/wiki/Landau-Symbole

6 / 32

Page 7: Einstieg in die Informatik mit Java - math.kit. · PDF fileEinstieg in die Informatik mit Java Effizienz Gerd Bohlender Institut fur Angewandte und Numerische Mathematik ... int Faktor

Landau-Symbole – Beispiele

• g(n) ist meist eine einfache Funktion, z.B.O(n), O(n2), O(log n), ...

Notation Bedeutung wenn das Argument verdoppelt wird,f ∈ f wachst dann andert sich f etwa so:O(1) garnicht f bleibt beschranktO(n) linear f verdoppelt sichO(n log n) superlinear f wachst auf etwas mehr als das DoppelteO(n2) quadratisch f vervierfacht sichO(n3) kubisch f verachtfacht sichO(2n) exponentiell wenn das Argument um 1 erhoht wird,

dann verdoppelt sich f

7 / 32

Page 8: Einstieg in die Informatik mit Java - math.kit. · PDF fileEinstieg in die Informatik mit Java Effizienz Gerd Bohlender Institut fur Angewandte und Numerische Mathematik ... int Faktor

Landau-Symbole – Anwendung

• Angaben zum Rechenaufwand eines Algorithmus(asymptotische Komplexitat)

• Angaben zum Speicherbedarf eines Algorithmus

Beispieln × n-Matrix (Zahlenschema mit n Zeilen und n Spalten)• Speicherbedarf O(n2)

• Rechenaufwand fur Addition O(n2)

• Rechenaufwand fur Multiplikation O(n3)

n O(n2) O(n3)

10 100 1000100 10000 1000000

1000 1000000 1000000000

8 / 32

Page 9: Einstieg in die Informatik mit Java - math.kit. · PDF fileEinstieg in die Informatik mit Java Effizienz Gerd Bohlender Institut fur Angewandte und Numerische Mathematik ... int Faktor

Landau-Symbole – Rechenregeln

Rechenregeln fur den asymptotischen Aufwand:• Konstante Faktoren spielen keine Rolle:

O(c · g(n)) = O(g(n)) fur eine reelle Konstante c 6= 0,folglich gilt auchO(log2 n) = O(ln n) = O(log10 n)

• Langsamer anwachsende Terme konnen vernachlassigtwerden, z.B. gilt mit reellen Konstanten a > b und c:O(na + c · nb) = O(na)O(na + c · log n) = O(na)O(2n + c · nb) = O(2n)

• Beispiel:O(2n3 + 3n2 + 24n + 799) = O(n3)

9 / 32

Page 10: Einstieg in die Informatik mit Java - math.kit. · PDF fileEinstieg in die Informatik mit Java Effizienz Gerd Bohlender Institut fur Angewandte und Numerische Mathematik ... int Faktor

Landau-Symbole – Einsatz zum Vergleich vonAlgorithmen

Beispiel: sortiere n Zahlen x0, x1, . . . , xn−1

Algorithmus 1 (Bubblesort) Algorithmus 2 (Quicksort)n O(n2) O(n log n)

2 4 24 16 88 64 24...

1000 106 10000106 1012 20 · 106

• Algorithmus ist fur n = 106 etwa 100000 mal schneller.• 100000 ≈ 1 Tag / 1 Sekunde

10 / 32

Page 11: Einstieg in die Informatik mit Java - math.kit. · PDF fileEinstieg in die Informatik mit Java Effizienz Gerd Bohlender Institut fur Angewandte und Numerische Mathematik ... int Faktor

Landau-Symbole – Vorsicht

• Aber Vorsicht! Alle Aussagen gelten nur asymptotisch furn →∞, also ab einem (unbekannten) n0 und mit einem(unbekannten) Faktor M.

• Fur ein ”kleines“ n konnte Algorithmus 1 durchausschneller sein als Algorithmus 2.

11 / 32

Page 12: Einstieg in die Informatik mit Java - math.kit. · PDF fileEinstieg in die Informatik mit Java Effizienz Gerd Bohlender Institut fur Angewandte und Numerische Mathematik ... int Faktor

Gliederung

1 Uberblick: was ist Effizienz?

2 Landau-Symbole

3 Eier im Korb

4 Zyklische Ziffern

12 / 32

Page 13: Einstieg in die Informatik mit Java - math.kit. · PDF fileEinstieg in die Informatik mit Java Effizienz Gerd Bohlender Institut fur Angewandte und Numerische Mathematik ... int Faktor

Eier im Korb - Aus einem alten Rechenbuch

Ein Mann stoßt den Korb voller Eier einer Marktfrau um. DieEier gehen zu Bruch. Der Mann will den Schaden ersetzen undfragt wieviele Eier im Korb waren.Die Marktfrau antwortet:

”Die genaue Zahl weiß ich nicht.Aber wenn ich immer 2 Eier aus dem Korb genommenhabe, dann blieb eines ubrig.Genauso, wenn ich immer 3, immer 4, immer 5 oderimmer 6 Eier heraus genommen habe.Aber wenn ich immer 7 Eier heraus genommen habe,dann blieb keines ubrig.“

Wieviele Eier waren (mindestens) im Korb?

13 / 32

Page 14: Einstieg in die Informatik mit Java - math.kit. · PDF fileEinstieg in die Informatik mit Java Effizienz Gerd Bohlender Institut fur Angewandte und Numerische Mathematik ... int Faktor

Eier im Korb - Erster Algorithmus

Teste alle Zahlen n = 1, 2, 3, ...

• Beginne mit n = 1• Prufe, ob die Zahl n bei Division durch 2, 3, 4, 5, 6 den

Rest 1 ergibt und ob n durch 7 ohne Rest teilbar ist.• Ist dies der Fall, dann brich ab und gib das Ergebnis aus.

Andernfalls erhohe n um 1 und prufe nochmal.

14 / 32

Page 15: Einstieg in die Informatik mit Java - math.kit. · PDF fileEinstieg in die Informatik mit Java Effizienz Gerd Bohlender Institut fur Angewandte und Numerische Mathematik ... int Faktor

Eier im Korb - Erstes Java-Programm

public class Eier {

public s t a t i c void main ( S t r i n g [ ] args ){i n t i =0;do i ++;while ( i %2!=1 | | i %3!=1 | | i %4!=1 | |

i %5!=1 | | i %6!=1 | | i %7!=0);System . out . p r i n t l n ( ” Es waren ” + i +

” E ie r im Korb . ” ) ;}

}

15 / 32

Page 16: Einstieg in die Informatik mit Java - math.kit. · PDF fileEinstieg in die Informatik mit Java Effizienz Gerd Bohlender Institut fur Angewandte und Numerische Mathematik ... int Faktor

Eier im Korb - Zweiter Algorithmus

Es kommen nur Zahlen in Frage, die bei Division durch 2, 3, 4,5, 6 den Rest 1 ergeben.Mit etwas Mathematik stellt man fest: Es kommen nur Zahlen inFrage, die bei Division durch kgV(2, 3, 4, 5, 6) = 60 den Rest 1ergeben.Also: Teste alle Zahlen n = 1, 61, 121...

• Beginne mit n = 1• Prufe, ob n durch 7 ohne Rest teilbar ist.• Ist dies der Fall, dann brich ab und gib das Ergebnis aus.

Andernfalls erhohe n um 60 und prufe nochmal.

16 / 32

Page 17: Einstieg in die Informatik mit Java - math.kit. · PDF fileEinstieg in die Informatik mit Java Effizienz Gerd Bohlender Institut fur Angewandte und Numerische Mathematik ... int Faktor

Eier im Korb - Zweites Java-Programm

public class Eier2 {

public s t a t i c void main ( S t r i n g [ ] args ){i n t i =1;do i += 60;while ( i%7 != 0 ) ;System . out . p r i n t l n ( ” Es waren ” + i +

” E ie r im Korb . ” ) ;}

}

17 / 32

Page 18: Einstieg in die Informatik mit Java - math.kit. · PDF fileEinstieg in die Informatik mit Java Effizienz Gerd Bohlender Institut fur Angewandte und Numerische Mathematik ... int Faktor

Vergleich der Effizienz

• Programm 2 braucht nur 1/60 der Rechenzeit vonProgramm 1

• Beide Programm brauchen nur Bruchteile einer Sekunde• Rechenzeit spielt hier keine Rolle• Fazit: Die Arbeitszeit des Programmierers fur die

mathematischen Uberlegungen ist ”verschwendet“• Ubrigens ... es waren 301 Eier im Korb!

18 / 32

Page 19: Einstieg in die Informatik mit Java - math.kit. · PDF fileEinstieg in die Informatik mit Java Effizienz Gerd Bohlender Institut fur Angewandte und Numerische Mathematik ... int Faktor

Gliederung

1 Uberblick: was ist Effizienz?

2 Landau-Symbole

3 Eier im Korb

4 Zyklische Ziffern

19 / 32

Page 20: Einstieg in die Informatik mit Java - math.kit. · PDF fileEinstieg in die Informatik mit Java Effizienz Gerd Bohlender Institut fur Angewandte und Numerische Mathematik ... int Faktor

Zyklische Ziffern - Das Problem

• Finde eine Zahl mit Endziffer 5• Multipliziere sie mit 5• Ist das Produkt gleich der ursprunglichen Zahl, wenn man

die 5 am Ende streicht und dafur vorne anfugt?• Beispiel: 5 * abcd5 = 5abcd

(mit 4 Ziffern a, b, c, d)• Verallgemeinerung: ersetze 5 durch Faktor 2 bis 9

Quelle: Jacques Arsac, Computerdenkspiele selbstprogrammiert, Problem 3

20 / 32

Page 21: Einstieg in die Informatik mit Java - math.kit. · PDF fileEinstieg in die Informatik mit Java Effizienz Gerd Bohlender Institut fur Angewandte und Numerische Mathematik ... int Faktor

Zyklische Ziffern - Erster Algorithmus

Teste alle Zahlen n = 1, 2, 3, ...

• Beginne mit n = 1• Prufe, ob die Zahl n die Bedingung ”Zyklische Ziffern“ erfullt• Ist dies der Fall, dann brich ab und gib das Ergebnis aus.

Andernfalls erhohe n um 1 und prufe nochmal.

21 / 32

Page 22: Einstieg in die Informatik mit Java - math.kit. · PDF fileEinstieg in die Informatik mit Java Effizienz Gerd Bohlender Institut fur Angewandte und Numerische Mathematik ... int Faktor

Zyklische Ziffern - Erstes Java-Programm

public class ZykZ i f f 1 {

public s t a t i c void main ( S t r i n g [ ] args ){i n t i =0;do i ++;while ( i ∗5 != i /10+50000); / / be i 4 Z i f f e r n abcdSystem . out . p r i n t l n ( ” Zyk l i sche Z i f f e r n : ” + i ) ;

}

}

22 / 32

Page 23: Einstieg in die Informatik mit Java - math.kit. · PDF fileEinstieg in die Informatik mit Java Effizienz Gerd Bohlender Institut fur Angewandte und Numerische Mathematik ... int Faktor

Zyklische Ziffern - Probleme mit diesem Programm

• Unbekannt, ob 4 Stellen abcd notig sind oder mehr oderweniger

• Ggf. mussen alle Stellenzahlen durchprobiert werden• Reicht der Zahlbereich von int (9 Stellen) aus?• Reicht long (19 Stellen)?• Rechenzeit???

23 / 32

Page 24: Einstieg in die Informatik mit Java - math.kit. · PDF fileEinstieg in die Informatik mit Java Effizienz Gerd Bohlender Institut fur Angewandte und Numerische Mathematik ... int Faktor

Zyklische Ziffern - Mathematische Idee

Fuhre Ziffernvergleich bei 5 ∗ abcd5 = 5abcd durch,beginnend bei der niederwertigsten Ziffer.

• 5 ∗ abcd5 = 5abcd fuhrt wegen 5 ∗ 5 = 25 zu d = 5• Es entsteht ein Ubertrag von 2, der im nachsten Schritt zu

berucksichtigen ist• 5 ∗ abc55 = 5abc5 fuhrt wegen 5 ∗ 5 + 2 = 27 zu c = 7• Es entsteht ein Ubertrag von 2• 5 ∗ ab755 = 5ab75 fuhrt wegen 5 ∗ 7 + 2 = 37 zu b = 7• Es entsteht ein Ubertrag von 3• usw. (egal wie viele Stellen abcd vorliegen)• Der Algorithmus ist zu Ende, wenn

• die berechnete Ziffer = 5 ist, und• der Ubertrag = 0 ist

24 / 32

Page 25: Einstieg in die Informatik mit Java - math.kit. · PDF fileEinstieg in die Informatik mit Java Effizienz Gerd Bohlender Institut fur Angewandte und Numerische Mathematik ... int Faktor

Zyklische Ziffern - Zweiter Algorithmus

Verallgemeinerung: ersetze 5 durch beliebigen Faktor 2 bis 9

• Starte mit Ziffer = Faktor und Ubertrag = 0• Berechne das 2-stellige Produkt = Ziffer * Faktor +

Ubertrag• Zerlege Produkt in die niederwertige Ziffer

und den hoherwertigen Ubertrag• Wiederhole solange

• die berechnete Ziffer nicht gleich dem Faktor ist, oder• der Ubertrag nicht 0 ist

25 / 32

Page 26: Einstieg in die Informatik mit Java - math.kit. · PDF fileEinstieg in die Informatik mit Java Effizienz Gerd Bohlender Institut fur Angewandte und Numerische Mathematik ... int Faktor

Zyklische Ziffern - Zweites Programm

import java . u t i l .∗ ;

public class Z y k z i f f 5 {

public s t a t i c void main ( S t r i n g [ ] args ) {Locale . se tDe fau l t ( Locale .US) ;Scanner sc = new Scanner ( System . i n ) ;i n t Faktor , Z i f f e r , Uebertrag =0 , Produkt , S t e l l e n =0;System . out . p r i n t ( ” Mi t welchem Faktor s o l l m u l t i p l i z i e r t werden ? ” ) ;Faktor = sc . n e x t I n t ( ) ; / / Faktor e in lesenZ i f f e r = Faktor ; / / n i ed e rwe r t i g s t e Z i f f e r = FaktorSystem . out . p r i n t l n ( ”Das Ergebnis l a u t e t ( rueckwaerts gelesen ! ) : ” ) ;do{

System . out . p r i n t ( Z i f f e r ) ; / / a k t u e l l e Z i f f e r ausdruckenS t e l l e n ++; / / S t e l l e n z a h l be i j ede r Ausgabe erhoehenProdukt = Z i f f e r ∗ Faktor + Uebertrag ; / / neues Produkt , z w e i s t e l l i gZ i f f e r = Produkt % 10; / / neue Z i f f e r = n ieders te S t e l l e des ProduktsUebertrag = Produkt / 10; / / neuer Uebertrag = hoechste S t e l l e des Produkts

} / / wiederholen , wenn eine der beiden . . .while ( Z i f f e r != Faktor | | Uebertrag != 0 ) ; / / . . . Abbruch−Bedingungen v e r l e t z t i s tSystem . out . p r i n t l n ( ) ;System . out . p r i n t l n ( ” Es hat ” + S t e l l e n + ” S t e l l e n ” ) ;

}

}

26 / 32

Page 27: Einstieg in die Informatik mit Java - math.kit. · PDF fileEinstieg in die Informatik mit Java Effizienz Gerd Bohlender Institut fur Angewandte und Numerische Mathematik ... int Faktor

Zyklische Ziffern - Ergebnisse

c:\b\java>java Zykziff5Mit welchem Faktor soll multipliziert werden ? 5Das Ergebnis lautet (rueckwaerts gelesen !):557783964376381959798442216035623618040201Es hat 42 Stellen

27 / 32

Page 28: Einstieg in die Informatik mit Java - math.kit. · PDF fileEinstieg in die Informatik mit Java Effizienz Gerd Bohlender Institut fur Angewandte und Numerische Mathematik ... int Faktor

Zyklische Ziffern - Ergebnisse

Mit welchem Faktor soll multipliziert werden ? 2

248637498751362501

Es hat 18 Stellen

Mit welchem Faktor soll multipliziert werden ? 3

3973142715569860268572844301

Es hat 28 Stellen

Mit welchem Faktor soll multipliziert werden ? 4

465201

Es hat 6 Stellen

Mit welchem Faktor soll multipliziert werden ? 6

6697760446811726754748050389833022395531882732452519496101

Es hat 58 Stellen

Mit welchem Faktor soll multipliziert werden ? 7

7975048813263572944101

Es hat 22 Stellen

Mit welchem Faktor soll multipliziert werden ? 8

8487228562101

Es hat 13 Stellen

Mit welchem Faktor soll multipliziert werden ? 9

91742202834944046788980825779716505595321101

Es hat 44 Stellen

28 / 32

Page 29: Einstieg in die Informatik mit Java - math.kit. · PDF fileEinstieg in die Informatik mit Java Effizienz Gerd Bohlender Institut fur Angewandte und Numerische Mathematik ... int Faktor

Zyklische Ziffern - Laufzeit des zweiten Algorithmus

• 42 Schleifendurchlaufe• etwa 10 Operationen pro Schleife• theoretisch etwa 10−7 Sekunden auf einem

handelsublichen PC• mit Java-Overhead (Interpretation, Startup)

deutlich unter 1 Sekunde

29 / 32

Page 30: Einstieg in die Informatik mit Java - math.kit. · PDF fileEinstieg in die Informatik mit Java Effizienz Gerd Bohlender Institut fur Angewandte und Numerische Mathematik ... int Faktor

Zyklische Ziffern - Laufzeit des ersten Algorithmus

• Er benotigt 1042 Schleifendurchlaufe= etwa 1043 Operationen

• Schnellster Rechner zzt. (2009, Quelle: www.top500.org):etwa 1015 Flops (Floating point Operationen pro Sekunde)

• Dieser braucht etwa 1028 Sekunden zur Losung• 1028 Sekunden = etwa 1020 Jahre

(1 Jahr = 365 ∗ 86400 Sekunden = etwa 3 ∗ 107 Sekunden)• ... aber das Universum existiert erst

etwa 1010 Jahre seit dem Urknall!

30 / 32

Page 31: Einstieg in die Informatik mit Java - math.kit. · PDF fileEinstieg in die Informatik mit Java Effizienz Gerd Bohlender Institut fur Angewandte und Numerische Mathematik ... int Faktor

Zyklische Ziffern - Laufzeitvergleich der beidenAlgorithmen

• Der erste Algorithmus braucht 1020 Jahre auf demschnellsten Rechner der Erde

• Der zweite Algorithmus braucht einen Bruchteil einerSekunde auf einem handelsublichen PC

• Fazit: Nachdenken uber mathematische Hintergrunde hatsich gelohnt

31 / 32

Page 32: Einstieg in die Informatik mit Java - math.kit. · PDF fileEinstieg in die Informatik mit Java Effizienz Gerd Bohlender Institut fur Angewandte und Numerische Mathematik ... int Faktor

Zyklische Ziffern - Wann sind Computer schnell genugfur den ersten Algorithmus?

• Der erste Algorithmus braucht 1020 Jahre auf dem heuteschnellsten Rechner der Erde

• Supercomputer wurden im letzten Jahrzehnt fast um denFaktor 1000 schneller (Quelle: www.top500.org)

• In 70 Jahren ware das (theoretisch!!!) ein Faktor 1021

• Im Jahre 2080 brauchte der schnellste Computer der Erdenoch 1 Monat(sehr theoretisch!!!)

32 / 32