effizienz - kit - fakultät für mathematik · uberlegungen zur effizienz¨ ben¨otigte rechenzeit...
TRANSCRIPT
Effizienz
Gerd Bohlender
Einstieg in die Informatik mit Java, Vorlesung vom 9.5.07
Gerd Bohlender Effizienz
Ubersicht
1 Uberlegungen zur Effizienz
2 Landau-Symbole
3 Eier im Korb
4 Zyklische Ziffern
Gerd Bohlender Effizienz
Uberlegungen zur Effizienz
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
Gerd Bohlender Effizienz
Uberlegungen zur Effizienz
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
Gerd Bohlender Effizienz
Uberlegungen zur Effizienz
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
Gerd Bohlender Effizienz
Uberlegungen zur Effizienz
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
Gerd Bohlender Effizienz
Uberlegungen zur Effizienz
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
Gerd Bohlender Effizienz
Uberlegungen zur Effizienz
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
Gerd Bohlender Effizienz
Asymptotischer Aufwand eines Algorithmus –Landau-Symbole
Schreibweise O(g(n))Landau-Symbole (Edmund Landau, Gottingen, 1877-1938)
Die Funktion f (n) ist O(g(n)), fur n →∞, genau wenn esKonstanten n0 und M gibt mit
|f (n)| < M · |g(n)|
fur alle n > n0
Dabei ist g(n) meist eine einfache Funktion, z.B.O(n),O(n2),O(log n), ...
Gerd Bohlender Effizienz
Asymptotischer Aufwand eines Algorithmus –Landau-Symbole
Schreibweise O(g(n))Landau-Symbole (Edmund Landau, Gottingen, 1877-1938)
Die Funktion f (n) ist O(g(n)), fur n →∞, genau wenn esKonstanten n0 und M gibt mit
|f (n)| < M · |g(n)|
fur alle n > n0
Dabei ist g(n) meist eine einfache Funktion, z.B.O(n),O(n2),O(log n), ...
Gerd Bohlender Effizienz
Asymptotischer Aufwand eines Algorithmus –Landau-Symbole
Schreibweise O(g(n))Landau-Symbole (Edmund Landau, Gottingen, 1877-1938)
Die Funktion f (n) ist O(g(n)), fur n →∞, genau wenn esKonstanten n0 und M gibt mit
|f (n)| < M · |g(n)|
fur alle n > n0
Dabei ist g(n) meist eine einfache Funktion, z.B.O(n),O(n2),O(log n), ...
Gerd Bohlender Effizienz
Landau-Symbole – Anwendung
Angaben zum Rechenaufwand eines Algorithmus(asymptotische Komplexitat)
Angaben zum Speicherbedarf eines Algorithmus
Beispiel: n × n-Matrix (n Zeilen, 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
Gerd Bohlender Effizienz
Landau-Symbole – Anwendung
Angaben zum Rechenaufwand eines Algorithmus(asymptotische Komplexitat)
Angaben zum Speicherbedarf eines Algorithmus
Beispiel: n × n-Matrix (n Zeilen, 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
Gerd Bohlender Effizienz
Landau-Symbole – Anwendung
Angaben zum Rechenaufwand eines Algorithmus(asymptotische Komplexitat)
Angaben zum Speicherbedarf eines Algorithmus
Beispiel: n × n-Matrix (n Zeilen, 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
Gerd Bohlender Effizienz
Landau-Symbole – Rechenregeln
O(c · g(n)) = O(g(n)) fur eine Konstante c
O(g(n) + h(n)) = max(O(g(n),O(h(n))
z.B. O(2n3 + 3n2 + 24n + 799) = O(n3)
Gerd Bohlender Effizienz
Landau-Symbole – Rechenregeln
O(c · g(n)) = O(g(n)) fur eine Konstante c
O(g(n) + h(n)) = max(O(g(n),O(h(n))
z.B. O(2n3 + 3n2 + 24n + 799) = O(n3)
Gerd Bohlender Effizienz
Landau-Symbole – Rechenregeln
O(c · g(n)) = O(g(n)) fur eine Konstante c
O(g(n) + h(n)) = max(O(g(n),O(h(n))
z.B. O(2n3 + 3n2 + 24n + 799) = O(n3)
Gerd Bohlender Effizienz
Landau-Symbole – Einsatz zum Vergleich von Algorithmen
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
Gerd Bohlender Effizienz
Landau-Symbole – Einsatz zum Vergleich von Algorithmen
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
Gerd Bohlender Effizienz
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 durchaus schneller
sein als Algorithmus 2.
Gerd Bohlender Effizienz
Eier im Korb - Aus einem alten Rechenbuch
Ein Mann stoßt den Korb voller Eier einer Marktfrau um. Die Eiergehen zu Bruch. Der Mann will den Schaden ersetzen und fragtwieviele 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?
Gerd Bohlender Effizienz
Eier im Korb - Aus einem alten Rechenbuch
Ein Mann stoßt den Korb voller Eier einer Marktfrau um. Die Eiergehen zu Bruch. Der Mann will den Schaden ersetzen und fragtwieviele 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?
Gerd Bohlender Effizienz
Eier im Korb - Aus einem alten Rechenbuch
Ein Mann stoßt den Korb voller Eier einer Marktfrau um. Die Eiergehen zu Bruch. Der Mann will den Schaden ersetzen und fragtwieviele 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?
Gerd Bohlender Effizienz
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 Rest1 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.
Gerd Bohlender Effizienz
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 Rest1 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.
Gerd Bohlender Effizienz
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 Rest1 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.
Gerd Bohlender Effizienz
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 Rest1 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.
Gerd Bohlender Effizienz
Eier im Korb - Erstes Java-Programm
public class Eier {
public static void main (String [] args){int 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.println("Es waren " + i +
" Eier im Korb.");}
}
Gerd Bohlender Effizienz
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.
Gerd Bohlender Effizienz
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.
Gerd Bohlender Effizienz
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.
Gerd Bohlender Effizienz
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.
Gerd Bohlender Effizienz
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.
Gerd Bohlender Effizienz
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.
Gerd Bohlender Effizienz
Eier im Korb - Zweites Java-Programm
public class Eier2 {
public static void main (String [] args){int i=1;do i += 60;while (i%7 != 0);System.out.println("Es waren " + i +
" Eier im Korb.");}
}
Gerd Bohlender Effizienz
Vergleich der Effizienz
Programm 2 braucht nur 1/60 der Rechenzeit von Programm1
Beide Programm brauchen nur Bruchteile einer Sekunde
Rechenzeit spielt hier keine Rolle
Fazit: Die Arbeitszeit des Programmierers fur diemathematischen Uberlegungen ist
”verschwendet“
Ubrigens ... es waren 301 Eier im Korb!
Gerd Bohlender Effizienz
Vergleich der Effizienz
Programm 2 braucht nur 1/60 der Rechenzeit von Programm1
Beide Programm brauchen nur Bruchteile einer Sekunde
Rechenzeit spielt hier keine Rolle
Fazit: Die Arbeitszeit des Programmierers fur diemathematischen Uberlegungen ist
”verschwendet“
Ubrigens ... es waren 301 Eier im Korb!
Gerd Bohlender Effizienz
Vergleich der Effizienz
Programm 2 braucht nur 1/60 der Rechenzeit von Programm1
Beide Programm brauchen nur Bruchteile einer Sekunde
Rechenzeit spielt hier keine Rolle
Fazit: Die Arbeitszeit des Programmierers fur diemathematischen Uberlegungen ist
”verschwendet“
Ubrigens ... es waren 301 Eier im Korb!
Gerd Bohlender Effizienz
Vergleich der Effizienz
Programm 2 braucht nur 1/60 der Rechenzeit von Programm1
Beide Programm brauchen nur Bruchteile einer Sekunde
Rechenzeit spielt hier keine Rolle
Fazit: Die Arbeitszeit des Programmierers fur diemathematischen Uberlegungen ist
”verschwendet“
Ubrigens ... es waren 301 Eier im Korb!
Gerd Bohlender Effizienz
Vergleich der Effizienz
Programm 2 braucht nur 1/60 der Rechenzeit von Programm1
Beide Programm brauchen nur Bruchteile einer Sekunde
Rechenzeit spielt hier keine Rolle
Fazit: Die Arbeitszeit des Programmierers fur diemathematischen Uberlegungen ist
”verschwendet“
Ubrigens ... es waren 301 Eier im Korb!
Gerd Bohlender Effizienz
Zyklische Ziffern - Das Problem
Finde eine Zahl mit Endziffer 5
Multipliziere sie mit 5
Ist das Produkt gleich der ursprunglichen Zahl, wenn man die5 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 selbst programmiert,Problem 3
Gerd Bohlender Effizienz
Zyklische Ziffern - Das Problem
Finde eine Zahl mit Endziffer 5
Multipliziere sie mit 5
Ist das Produkt gleich der ursprunglichen Zahl, wenn man die5 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 selbst programmiert,Problem 3
Gerd Bohlender Effizienz
Zyklische Ziffern - Das Problem
Finde eine Zahl mit Endziffer 5
Multipliziere sie mit 5
Ist das Produkt gleich der ursprunglichen Zahl, wenn man die5 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 selbst programmiert,Problem 3
Gerd Bohlender Effizienz
Zyklische Ziffern - Das Problem
Finde eine Zahl mit Endziffer 5
Multipliziere sie mit 5
Ist das Produkt gleich der ursprunglichen Zahl, wenn man die5 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 selbst programmiert,Problem 3
Gerd Bohlender Effizienz
Zyklische Ziffern - Das Problem
Finde eine Zahl mit Endziffer 5
Multipliziere sie mit 5
Ist das Produkt gleich der ursprunglichen Zahl, wenn man die5 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 selbst programmiert,Problem 3
Gerd Bohlender Effizienz
Zyklische Ziffern - Das Problem
Finde eine Zahl mit Endziffer 5
Multipliziere sie mit 5
Ist das Produkt gleich der ursprunglichen Zahl, wenn man die5 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 selbst programmiert,Problem 3
Gerd Bohlender Effizienz
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.
Gerd Bohlender Effizienz
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.
Gerd Bohlender Effizienz
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.
Gerd Bohlender Effizienz
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.
Gerd Bohlender Effizienz
Zyklische Ziffern - Erstes Java-Programm
public class ZykZiff1 {
public static void main (String [] args){int i=0;do i++;while (i*5 != i/10+50000); // bei 4 Ziffern abcdSystem.out.println("Zyklische Ziffern: " + i);
}
}
Gerd Bohlender Effizienz
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???
Gerd Bohlender Effizienz
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???
Gerd Bohlender Effizienz
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???
Gerd Bohlender Effizienz
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???
Gerd Bohlender Effizienz
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???
Gerd Bohlender Effizienz
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 zuberucksichtigen 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, undder Ubertrag = 0 ist
Gerd Bohlender Effizienz
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 zuberucksichtigen 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, undder Ubertrag = 0 ist
Gerd Bohlender Effizienz
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 zuberucksichtigen 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, undder Ubertrag = 0 ist
Gerd Bohlender Effizienz
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 zuberucksichtigen 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, undder Ubertrag = 0 ist
Gerd Bohlender Effizienz
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 zuberucksichtigen 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, undder Ubertrag = 0 ist
Gerd Bohlender Effizienz
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 zuberucksichtigen 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, undder Ubertrag = 0 ist
Gerd Bohlender Effizienz
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 zuberucksichtigen 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, undder Ubertrag = 0 ist
Gerd Bohlender Effizienz
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 zuberucksichtigen 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, undder Ubertrag = 0 ist
Gerd Bohlender Effizienz
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 zuberucksichtigen 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, undder Ubertrag = 0 ist
Gerd Bohlender Effizienz
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 Zifferund den hoherwertigen Ubertrag
Wiederhole solange
die berechnete Ziffer nicht 5 ist, oderder Ubertrag nicht 0 ist
Gerd Bohlender Effizienz
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 Zifferund den hoherwertigen Ubertrag
Wiederhole solange
die berechnete Ziffer nicht 5 ist, oderder Ubertrag nicht 0 ist
Gerd Bohlender Effizienz
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 Zifferund den hoherwertigen Ubertrag
Wiederhole solange
die berechnete Ziffer nicht 5 ist, oderder Ubertrag nicht 0 ist
Gerd Bohlender Effizienz
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 Zifferund den hoherwertigen Ubertrag
Wiederhole solange
die berechnete Ziffer nicht 5 ist, oderder Ubertrag nicht 0 ist
Gerd Bohlender Effizienz
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 Zifferund den hoherwertigen Ubertrag
Wiederhole solange
die berechnete Ziffer nicht 5 ist, oderder Ubertrag nicht 0 ist
Gerd Bohlender Effizienz
Zyklische Ziffern - Zweites Programm
import java.util.*;
public class Zykziff5 {
public static void main (String [] args) {
Locale.setDefault (Locale.US);
Scanner sc = new Scanner (System.in);
int Faktor, Ziffer, Uebertrag=0, Produkt, Stellen=0;
System.out.print ("Mit welchem Faktor soll multipliziert werden ? ");
Faktor = sc.nextInt (); // Faktor einlesen
Ziffer = Faktor; // niederwertigste Ziffer = Faktor
System.out.println("Das Ergebnis lautet (rueckwaerts gelesen !):");
do
{
System.out.print (Ziffer); // aktuelle Ziffer ausdrucken
Stellen ++; // Stellenzahl bei jeder Ausgabe erhoehen
Produkt = Ziffer * Faktor + Uebertrag; // neues Produkt, zweistellig
Ziffer = Produkt % 10; // neue Ziffer = niederste Stelle des Produkts
Uebertrag = Produkt / 10; // neuer Uebertrag = hoechste Stelle des Produkts
} // wiederholen, wenn eine der beiden ...
while (Ziffer != Faktor || Uebertrag != 0); // ... Abbruch-Bedingungen verletzt ist
System.out.println ();
System.out.println ("Es hat " + Stellen + " Stellen");
}
}
Gerd Bohlender Effizienz
Zyklische Ziffern - Ergebnisse
c:\b\java>java Zykziff5Mit welchem Faktor soll multipliziert werden ? 5Das Ergebnis lautet (rueckwaerts gelesen !):557783964376381959798442216035623618040201Es hat 42 Stellen
Gerd Bohlender Effizienz
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
Gerd Bohlender Effizienz
Zyklische Ziffern - Laufzeit des zweiten Algorithmus
42 Schleifendurchlaufe
etwa 10 Operationen pro Schleife
theoretisch etwa 10−7 Sekunden auf einem handelsublichenPC
mit Java-Overhead (Interpretation, Startup)deutlich unter 1 Sekunde
Gerd Bohlender Effizienz
Zyklische Ziffern - Laufzeit des zweiten Algorithmus
42 Schleifendurchlaufe
etwa 10 Operationen pro Schleife
theoretisch etwa 10−7 Sekunden auf einem handelsublichenPC
mit Java-Overhead (Interpretation, Startup)deutlich unter 1 Sekunde
Gerd Bohlender Effizienz
Zyklische Ziffern - Laufzeit des zweiten Algorithmus
42 Schleifendurchlaufe
etwa 10 Operationen pro Schleife
theoretisch etwa 10−7 Sekunden auf einem handelsublichenPC
mit Java-Overhead (Interpretation, Startup)deutlich unter 1 Sekunde
Gerd Bohlender Effizienz
Zyklische Ziffern - Laufzeit des zweiten Algorithmus
42 Schleifendurchlaufe
etwa 10 Operationen pro Schleife
theoretisch etwa 10−7 Sekunden auf einem handelsublichenPC
mit Java-Overhead (Interpretation, Startup)deutlich unter 1 Sekunde
Gerd Bohlender Effizienz
Zyklische Ziffern - Laufzeit des ersten Algorithmus
Er benotigt 1042 Schleifendurchlaufe= etwa 1043 Operationen
Schnellster Rechner zzt. (2007, Quelle: www.top500.org):knapp 1015 Flops
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 erstetwa 1010 Jahre seit dem Urknall!
Gerd Bohlender Effizienz
Zyklische Ziffern - Laufzeit des ersten Algorithmus
Er benotigt 1042 Schleifendurchlaufe= etwa 1043 Operationen
Schnellster Rechner zzt. (2007, Quelle: www.top500.org):knapp 1015 Flops
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 erstetwa 1010 Jahre seit dem Urknall!
Gerd Bohlender Effizienz
Zyklische Ziffern - Laufzeit des ersten Algorithmus
Er benotigt 1042 Schleifendurchlaufe= etwa 1043 Operationen
Schnellster Rechner zzt. (2007, Quelle: www.top500.org):knapp 1015 Flops
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 erstetwa 1010 Jahre seit dem Urknall!
Gerd Bohlender Effizienz
Zyklische Ziffern - Laufzeit des ersten Algorithmus
Er benotigt 1042 Schleifendurchlaufe= etwa 1043 Operationen
Schnellster Rechner zzt. (2007, Quelle: www.top500.org):knapp 1015 Flops
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 erstetwa 1010 Jahre seit dem Urknall!
Gerd Bohlender Effizienz
Zyklische Ziffern - Laufzeit des ersten Algorithmus
Er benotigt 1042 Schleifendurchlaufe= etwa 1043 Operationen
Schnellster Rechner zzt. (2007, Quelle: www.top500.org):knapp 1015 Flops
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 erstetwa 1010 Jahre seit dem Urknall!
Gerd Bohlender Effizienz
Zyklische Ziffern - Laufzeitvergleich der beiden Algorithmen
Der erste Algorithmus braucht 1020 Jahre auf dem schnellstenRechner der Erde
Der zweite Algorithmus braucht einen Bruchteil einer Sekundeauf einem handelsublichen PC
Fazit: Nachdenken uber mathematische Hintergrunde hat sichgelohnt
Gerd Bohlender Effizienz
Zyklische Ziffern - Laufzeitvergleich der beiden Algorithmen
Der erste Algorithmus braucht 1020 Jahre auf dem schnellstenRechner der Erde
Der zweite Algorithmus braucht einen Bruchteil einer Sekundeauf einem handelsublichen PC
Fazit: Nachdenken uber mathematische Hintergrunde hat sichgelohnt
Gerd Bohlender Effizienz
Zyklische Ziffern - Laufzeitvergleich der beiden Algorithmen
Der erste Algorithmus braucht 1020 Jahre auf dem schnellstenRechner der Erde
Der zweite Algorithmus braucht einen Bruchteil einer Sekundeauf einem handelsublichen PC
Fazit: Nachdenken uber mathematische Hintergrunde hat sichgelohnt
Gerd Bohlender Effizienz
Zyklische Ziffern - Wann sind Computer schnell genug furden 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!!!)
Gerd Bohlender Effizienz
Zyklische Ziffern - Wann sind Computer schnell genug furden 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!!!)
Gerd Bohlender Effizienz
Zyklische Ziffern - Wann sind Computer schnell genug furden 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!!!)
Gerd Bohlender Effizienz
Zyklische Ziffern - Wann sind Computer schnell genug furden 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!!!)
Gerd Bohlender Effizienz