Python 嵌套for循环时间方面的更快替代方案
我需要计算/从一个由Python 嵌套for循环时间方面的更快替代方案,python,algorithm,time-complexity,Python,Algorithm,Time Complexity,我需要计算/从一个由 i+2j+k,其中1因为没有人发布线性解决方案(我确信有一个),所以我将发布二次解决方案: def ways(n,N): s=0 s1 = 0 s2 = 0 for j in range(1,N+1): if n - 2*j < 2: break if n - 2*j > 2*N: continue s1+= min(n-2*j -
i+2j+k,其中1因为没有人发布线性解决方案(我确信有一个),所以我将发布二次解决方案:
def ways(n,N):
s=0
s1 = 0
s2 = 0
for j in range(1,N+1):
if n - 2*j < 2:
break
if n - 2*j > 2*N:
continue
s1+= min(n-2*j - 1,N) +1
s2+= max(n-2*j-N, 1)
return s1 - s2
N=2
print({ i: ways(i,N) for i in range(4, 4*N+1) })
至少从O(N^3)到O(N^2)有一个改进。反过来试试,给定一个值,你能想出一个公式来指定它将成为列表的一部分的次数吗?为什么是指数?你能指定“创建列表”中的内容吗?也许对于一些(小的)N值,你期望什么样的输入/输出?因此,本质上,你需要3个整数元组的所有组合,整数在4到N之间?为什么你的循环限制是(4,4*N),而之前你说1
def ways(n,N):
s=0
s1 = 0
s2 = 0
for j in range(1,N+1):
if n - 2*j < 2:
break
if n - 2*j > 2*N:
continue
s1+= min(n-2*j - 1,N) +1
s2+= max(n-2*j-N, 1)
return s1 - s2
N=2
print({ i: ways(i,N) for i in range(4, 4*N+1) })
{4: 1, 5: 2, 6: 2, 7: 2, 8: 1}