【发布时间】:2013-10-26 15:04:34
【问题描述】:
几周前我用python编写了erathhostenes算法,它看起来像下面这样:
def erathostenes(n):
A = range(2,n+1)
B = []
i = 0
while A[i] < math.sqrt(n):
B.append(A[i])
j = i
aux = A[i]
while j < len(A):
if A[j]%aux == 0:
A[j] = 0
j += aux
i += 1
while A[i] == 0:
i += 1
for i in range(len(A)):
if A[i] != 0:
B.append(A[i])
i += 1
return B
经过一番思考(我是编程菜鸟),我只是对我的算法进行了一些修改,现在看起来像:
def erathostenes(n):
A = range(2,n + 1)
B = []
i = 0
raiz = math.sqrt(n)
lenA = len(A)
rangeLenA = range(lenA)
while A[i] < raiz:
B.append(A[i])
j = i
aux = A[i]
while j < lenA:
A[j] = 0
j += aux
i += 1
while A[i] == 0:
i += 1
for i in rangeLenA:
if A[i] != 0:
B.append(A[i])
i += 1
return B
如果我使用 n=10.000.000 执行算法,则第一个代码的执行时间约为 7 秒,而第二个代码的执行时间约为 4 秒。
对我的算法进行更多优化有什么想法吗?谢谢!
【问题讨论】:
-
这是非常好的代码审查。
-
还有其他算法,例如en.wikipedia.org/wiki/Sieve_of_Atkin
标签: python optimization