嵌套循环执行的总数是多少?

时间:2011-10-31 02:44:42

标签: loops for-loop nested-loops

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

2 个答案:

答案 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)

答案:

组合配方如下:

f

可用于此目的。 在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