我需要计算/从中形成的可能整数列表
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,所以我需要一个更好的版本/替代版本。我愿意接受想法。然后请问您是否不懂。
答案 0 :(得分:0)
由于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)。