Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用python计算嵌套和_Python_Python 3.x - Fatal编程技术网

用python计算嵌套和

用python计算嵌套和,python,python-3.x,Python,Python 3.x,我对编程和python都是新手,所以我想问你们一个通过编程计算双西格玛的简单方法 (∑ni=1)(∑mk=1)(i+k) 我正试图解决这个问题,但我被困在需要初始化p的部分,任何提示都会被忽略 这是我到目前为止试过的 p = 1 sum = 0 N,M=[int(i) for i in input().split()] for i in range(1,N+1): for i in range(i+1,i+M+1): p=p*i sum += p print(

我对编程和python都是新手,所以我想问你们一个通过编程计算双西格玛的简单方法

(∑ni=1)(∑mk=1)(i+k)

我正试图解决这个问题,但我被困在需要初始化p的部分,任何提示都会被忽略

这是我到目前为止试过的

p = 1
sum = 0

N,M=[int(i) for i in input().split()]
for i in range(1,N+1):
    for i in range(i+1,i+M+1):
        p=p*i
    sum += p

print(sum)
按照您的方法(不是运行时优化的),您需要在每次运行sum时重置表示内积的
p
变量;因此,在每个外部循环的开始处将其设置为
1

使用此方法和练习中给出的域,您将无法在给定的时间限制内计算更高的数字。您可能需要对此进行优化。

按照您的方法(未优化运行时),您需要重置表示每次求和的内积的
p
变量;因此,在每个外部循环的开始处将其设置为
1


使用此方法和练习中给出的域,您将无法在给定的时间限制内计算更高的数字。您可能需要对此进行优化。

考虑以下几点:

这意味着您天真的二次O(m*n)算法可以用线性O(m+n)解决方案代替:

In [1]: from hypothesis import strategies as st
   ...: from hypothesis import given, settings
   ...: 
   ...: 
   ...: def linear(n, m):
   ...:     return n * sum(range(1, m+1)) + m * sum(range(1, n+1))
   ...: 
   ...: 
   ...: def quadratic(n, m):
   ...:     total = 0
   ...:     for i in range(1, n+1):
   ...:         for j in range(1, m+1):
   ...:             total += i + j
   ...:     return total
   ...: 
   ...: 
   ...: @given(st.integers(1, 50), st.integers(1, 50))
   ...: @settings(max_examples=1000)
   ...: def test(n, m):
   ...:     assert linear(n, m) == quadratic(n, m)
   ...: 
   ...:     

In [2]: test()

In [3]: %timeit linear(10, 10)
852 ns ± 15.8 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)

In [4]: %timeit quadratic(10, 10)
7.93 µs ± 165 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
由于您是一名初学者,我添加了一个简单的自动属性测试:1)强调测试工作中的天真解决方案与优化的替代方案的重要性,2)演示等效性。还有一些小型
n
m
的基准测试

由于算术级数(即M和N)的和有一个封闭形式的方程,你可以进一步将其归结为一个常数时间O(1)解(我在这里做了一些简化):

附言


如果没有很好的理由,您决不能在全局名称空间中隐藏内置名称(例如,
sum=0
)。

请考虑以下几点:

这意味着您天真的二次O(m*n)算法可以用线性O(m+n)解决方案代替:

In [1]: from hypothesis import strategies as st
   ...: from hypothesis import given, settings
   ...: 
   ...: 
   ...: def linear(n, m):
   ...:     return n * sum(range(1, m+1)) + m * sum(range(1, n+1))
   ...: 
   ...: 
   ...: def quadratic(n, m):
   ...:     total = 0
   ...:     for i in range(1, n+1):
   ...:         for j in range(1, m+1):
   ...:             total += i + j
   ...:     return total
   ...: 
   ...: 
   ...: @given(st.integers(1, 50), st.integers(1, 50))
   ...: @settings(max_examples=1000)
   ...: def test(n, m):
   ...:     assert linear(n, m) == quadratic(n, m)
   ...: 
   ...:     

In [2]: test()

In [3]: %timeit linear(10, 10)
852 ns ± 15.8 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)

In [4]: %timeit quadratic(10, 10)
7.93 µs ± 165 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
由于您是一名初学者,我添加了一个简单的自动属性测试:1)强调测试工作中的天真解决方案与优化的替代方案的重要性,2)演示等效性。还有一些小型
n
m
的基准测试

由于算术级数(即M和N)的和有一个封闭形式的方程,你可以进一步将其归结为一个常数时间O(1)解(我在这里做了一些简化):

附言


如果没有很好的理由,您永远不应该在全局名称空间中隐藏内置名称(例如,
sum=0
)。

您能给出预期的输入和输出示例吗?我想了解双重求和背后的概念。原始问题在@UtkarshKulshrestha上,您发布的链接与您的代码(即,您的代码不计算您发布的数学表达式)的“双重求和”无关对不起,我已经知道我只是不想要这个问题的答案,因为让别人替我解决竞争性编程问题在道德上是错误的。这就是为什么我修改了问题,但忘记了相应地修改代码。你能给出预期的输入和输出示例吗?我想学习双重求和背后的概念。原始问题在@UtkarshKulshrestha上,您发布的链接与您的代码(即,您的代码不计算您发布的数学表达式)的“双重求和”无关对不起,我已经知道我只是不想要这个问题的答案,因为让别人替我解决竞争性编程问题在道德上是错误的。这就是为什么我更改了问题,但忘了相应地更改代码。我不想得到原始问题的答案,所以我发布了一个不同的方程式,并忘了相应地更新代码。愚蠢的我,我的错误被相应地编辑了。我不想得到原始问题的答案,所以我发布了一个不同的方程式,并忘了更新代码相应地更新我的代码。愚蠢的我,我的错误被相应地编辑了。哎呀,我差点忘了要点。我会记住的。我会记住那个线性解。@UtkarshKulshrestha你应该使用常数时间解。整个过程只是一个例子。哎呀,我差点忘了重点。我会记住的。我会记住那个线性解。@UtkarshKulshrestha你应该使用常数时间解。整个过程只是一个例证。
In [5]: def constant(n, m):
   ...:     return n * m * (2 + m + n) / 2
   ...: 
   ...: 

In [6]: %timeit constant(10, 10)
151 ns ± 1.4 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)