[英]Faster alternative for nested for loop time wise
我需要计算/从由
i + 2j + k ,其中 1 <= i,j,k <= N。
我知道它将是从 4 到 4N 的所有整数,但我也需要它们的频率,因此必须制定一个列表。 我也找不到频率模式。 我的蛮力方法是:
对于 n = 2,列表将类似于:[4,5,6,5,7,6,7,8]
for i in range(N+1):
for j in range(N+1):
for k in range(N+1):
#creating a list
否则有什么规律吗? 就像如果 i+2j+k = P,P 的频率 = 一些 P 形式的方程。据我尝试,没有找到任何线性或二次方程。
它的复杂度是 O^3,所以我需要一个更好的版本/替代品。 我乐于接受各种想法。 如果您有什么不明白的地方,请询问。
由于 noboding 发布了一个线性解决方案(我确定有一个),我将发布一个二次解决方案:
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}
至少从 O(N^3) 到 O(N^2) 的改进。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.