Q1 - 在以下双嵌套循环中,如果m
循环,n
中的最终值将是什么。
当然不希望做循环,看看m
是什么!由于n
可能非常大!
m = 0 for i = 1 to n-2 for j = i+1,n-1 for k = j+1,n m += 1
Q2 - 您是如何找到答案的?我的意思是你用来解决这个问题的算法/技术是什么?
Q3 - 您有什么建议解决类似的问题?
以下是我要找的答案:
答案:
def ntn(n,k): """returns the number of iterations for k nested dependent loops(n)""" return long(np.prod(n-np.arange(k,dtype=float)) / np.prod(np.arange(k,dtype=float)+1))
示例:
>>> ntn(1000,4) 41417124750L >>> ntn(1e20,3) 166666666666666650797607483335462097315368077619447843520512L
答案 0 :(得分:1)
问题3:找到问题的模式。
Q2:假设n:=10
请注意,i
将从1 to 8
因此,j
将从
2 to 9
3 to 9
...
9 to 9
因此,k
将从
loops value index
3 to 10, 4 to 10, 5 to 10, ..., 10 to 10 8 + 7 + 6 + ... + 1 8
4 to 10, 5 to 10, ..., 10 to 10 7 + 6 + ... + 1 7
5 to 10, ..., 10 to 10 6 + ... + 1 6
... ... ... ...
10 to 10 1 1
注意这里的模式:如果我们从底部数字(1)开始索引,要获得序列中的m
数字,只需将1加到m。
Q1:你自己想出这个。提示:这是总结的总和......
答案 1 :(得分:0)
答案:
组合配方如下:
可用于此目的。
在Python中,comb()
包中有scipy
个函数,也可以使用。
但是,以下解决方案更灵活,更快速,结果数字更长。
import numpy as np def ntn(n,k): """returns the number of iterations for k nested dependent loops(n)""" return long(np.prod(n-np.arange(k,dtype=float)) / np.prod(np.arange(k,dtype=float)+1))
<强>示例:强>
>>> ntn(1000,4) 41417124750L >>> ntn(1e20,3) 166666666666666650797607483335462097315368077619447843520512L