【问题标题】:What is the total number of nested loop execution?嵌套循环执行的总数是多少?
【发布时间】:2011-10-31 02:44:41
【问题描述】:

Q1 - 在下面的双嵌套循环中,如果循环对n 执行,m 中的最终值将是什么。 当然不希望循环并查看m 是什么!因为n 可以很大!

米 = 0 对于 i = 1 到 n-2 对于 j = i+1,n-1 对于 k = j+1,n m += 1

Q2 -您是如何找到答案的?我的意思是你用来解决问题的算法/技术是什么?

Q3 -您对解决类似问题有什么建议?


这是我一直在寻找的答案:

答案:

定义ntn(n,k): """返回 k 个嵌套依赖循环的迭代次数(n)""" 返回 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

【问题讨论】:

  • 这真的是一道数学题。 sum(1 ≤ i ≤ n-2) sum(i+1 ≤ j ≤ n-1) sum(j+1 ≤ k ≤ n) 1。下一步是查阅您最喜欢的离散数学教科书。解决类似问题的第一个建议是出现在教授的办公时间。
  • @everybody:我解决了问题并找到了我正在寻找的答案并将其放在问题的上方。它是用 Python 语言编写的。无论如何都可以不受限制地使用它!

标签: loops for-loop nested-loops


【解决方案1】:

Q3:找到问题的模式。

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:你自己解决这个问题。提示:这是总和的总和......

【讨论】:

  • 问题被提问者解决了,答案可以在问题中找到。
  • @Cambium 您完全误解了,因为您所做的答案是开箱即用的。
【解决方案2】:

答案:

组合公式如下:

可用于此目的。 在 Python 中,scipy 包中的 comb() 函数也可以使用。 然而,以下解决方案更加灵活和快速,并且生成的数字更长。

将 numpy 导入为 np 定义ntn(n,k): """返回 k 个嵌套依赖循环的迭代次数(n)""" 返回 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

【讨论】:

    猜你喜欢
    • 2015-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多