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

2024-04-24 05:36:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要计算/从一个由

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,所以我需要一个更好的版本/替代品。我乐于接受各种想法。如果你不明白什么,请问我。你知道吗


Tags: 方法inltcreating列表for模式range
1条回答
网友
1楼 · 发布于 2024-04-24 05:36:11

由于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)的改进。你知道吗

相关问题 更多 >