首先,这里还有两种编写函数的方法。在# this one's about the same speed
import itertools
def build_substrings_2(s):
return [''.join(r) for r in itertools.product(*(['',ch] for ch in s))]
# this one's about 4 times faster
def build_substrings_3(s):
res = [""]
for ch in s:
res += [r+ch for r in res]
return res
以下是测量速度的方法:
^{pr2}$
(y轴是以秒为单位的运行日志,x轴是以字符为单位的输入字符串长度)
下面是如何找到最佳多项式拟合:import numpy
data = [numpy.log10(r[1]) for r in res] # take log of data
best = [numpy.polyfit(xs[5:], dat[5:], 1) for dat in data] # find best-fit line
big_o = [10**(b[0]) for b in best] # convert slope back to power
(感谢DSM的这种简化方法!)在
结果是[2.0099844256336676, 2.0731239717002787, 2.0204035253442099]
。。。你的函数是关于O(n**2.00998)