繁体   English   中英

嵌套 for 循环时间的更快替代方案

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM