Potenzierung
Verfasst: Sonntag 10. April 2011, 18:03
hallo!
Ich möchte die schnellste Variante finden, um Potenzen zur Basis 10 zu berechnen. Der Exponent kann dabei zwischen 0 und 100 liegen.
5 verschiedene Varianten sind mir eingefallen:
Dann rufe ich alle 4 Definitionen so auf:
Es treten folgende Laufzeiten auf:
potenz1: 2.68 s
potenz2: 4.09 s
potenz3: 8.38 s
potenz4: 3.07 s
potenz5: 1.62 s
Am schnellstet ist also die elif-Fallunterscheidung, gefolgt von
direkter Potenzierung,
if-Fallunterscheidung,
String-Konstruktion,
Dictionary.
Fallen euch noch andere Varianten ein? Dann kann ich mal deren Laufzeit testen.
Gerade die Stringkonstruktion (potenz2) kann man sicher noch besser machen.
Gruß
Paul
Ich möchte die schnellste Variante finden, um Potenzen zur Basis 10 zu berechnen. Der Exponent kann dabei zwischen 0 und 100 liegen.
5 verschiedene Varianten sind mir eingefallen:
Code: Alles auswählen
def potenz1(a):
b=10**a
return b
def potenz2(a):
b=int('1'+a*'0')
return b
def potenz3(a):
d={ 0 : 1,
1 : 10,
[...die restlichen Möglichkeiten...]
99 : 1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000}
b=d[a]
return b
def potenz4(a):
if a== 0 :
b= 1
if a== 1 :
b= 10
[...die restlichen Möglichkeiten...]
if a== 99 :
b= 1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
return b
def potenz5(a):
if a== 0 :
b= 1
elif a== 1 :
b= 10
[...die restlichen Möglichkeiten...]
elif a== 99 :
b= 1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
return b
Code: Alles auswählen
zufall=list(randint(0,99) for i in range(1000000))
for i in zufall:
potenz1(i)
potenz1: 2.68 s
potenz2: 4.09 s
potenz3: 8.38 s
potenz4: 3.07 s
potenz5: 1.62 s
Am schnellstet ist also die elif-Fallunterscheidung, gefolgt von
direkter Potenzierung,
if-Fallunterscheidung,
String-Konstruktion,
Dictionary.
Fallen euch noch andere Varianten ein? Dann kann ich mal deren Laufzeit testen.
Gerade die Stringkonstruktion (potenz2) kann man sicher noch besser machen.
Gruß
Paul