[Tutor] Can my code be optimized any further (speed-wise)?
Kent Johnson
kent37 at tds.net
Sun Oct 8 15:23:26 CEST 2006
Geoframer wrote:
> Hi everyone,
>
> The problem is to compute the number of trailing zero's in factorials
> (n! = 1*2*3*4*.......*n). with n <= 1000000000
>
> My solution is as follows (a = times to read a number (b) to process) :
>
> ---------------------------------------------------------------------------
>
> a = input()
> for i in range(a):
> lst = (5, 25, 125, 625, 3125, 15625, 78125, 390625, 1953125,
> 9765625, 48828125, 244140625)
> ans = 0
> b = input()
> for i in lst:
> if i <= b:
> ans += b//i
> print ans
>
> ----------------------------------------------------------------------------
>
> Please, if you have suggestions to improve the speed of this algorithm
> give an argumentation as to why a certain something is faster.
> That would allow me to learn to program faster algorithms in Python al
> together instead of just in this problem.
Try putting the actual computation into a function. Make any variable
that is used more than once a local variable of the function (ans, b,i).
Accessing local variables is faster than accessing global variables.
This gives about 40% speedup in my tests.
Use psyco if it is available in your contest, for me that shaved off
another 30-50%; you will get more benefit from psyco the more iterations
you have, because psyco introduces some compilation overhead that has to
be made up by the faster code.
http://psyco.sourceforge.net/
You really aren't doing much so there's not a lot to optimize that I can
see. You could try asking on comp.lang.python, lots of people there are
good at optimization.
Kent
More information about the Tutor
mailing list