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

标签 python algorithm time-complexity

我需要计算由以下组成的可能整数列表

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,所以我需要一个更好的版本/替代版本。我对想法持开放态度。如果有不明白的地方请询问。

最佳答案

由于没有人发布线性解(我确信有一个),所以我将发布一个二次解:

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)。

关于python - 嵌套 for 循环时间更快的替代方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59228959/

相关文章:

python - 在 Python 正则表达式 split() 中访问定界符

python - Pyspark 中的向量汇编器正在创建多个向量的元组而不是单个向量,如何解决这个问题?

python - 使用python在 Elasticsearch 中自动完成

algorithm - 用大数求大数的模

algorithm - 给定 RNG 算法和一系列数字,是否有可能确定产生该系列的种子?

time-complexity - 循环的时间复杂度

python - Boost Threads 相当于Python 的threading.Event?

algorithm - 使用神经网络估计图像中的距离

c++ - 当一个std::vector对象在栈中,另一个在堆中时,vector的swap函数的时间复杂度是O(1)还是O(n)?

algorithm - 如何找到 O(n) 内总和最大的顺序子数组