我需要计算由以下组成的可能整数列表
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/