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),而之前你说1def 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}