我目前正在创建一个强力算法,并且想知道是否有一种方法可以优化我的程序以更快地运行并花更少的时间来生成所有可能的组合。
if(N<2)
// No prime numbers
if(N==2)
// Print 2
if(N>2)
//print 2
Create a list(or any resize able data structure) and add 2 to it.
now,
run a loop from i= 3 to i<=n
{
count how many numbers in the list are able to divide i completely(Let c
denotes it)
if(c==0)
//print the number as it is prime
}
有没有办法优化这个?
答案 0 :(得分:1)
你可以使用一些itertools
权力:
from itertools import product
list(product(chars, chars, chars))
当需要计时时:
28.2 ms ± 1.21 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
答案 1 :(得分:1)
你的工作台没有实际意义,因为大部分时间是在print
声明&amp;控制台操作。
也就是说,您可以使用itertools.product
和string
模块简化代码:
import itertools,string
chars = string.ascii_letters+string.digits
for t in itertools.product(chars,repeat=3):
c = "".join(t)
# do whatever you want with c string
但是使用3长度的字符串,我的运行速度并不快。
使用4长度字符串开始变得有趣,其中4个嵌套的python循环在我的机器上花费4秒,而itertools.product(chars,repeat=4)
只需要3秒。
这是因为itertools.product
在主流平台上使用本机代码,这比经典的python循环快得多(如果长度足够大,c = "".join(t)
也比char-by-char连接快)