【问题标题】:counts iteration in a nest for-loop计算嵌套 for 循环中的迭代次数
【发布时间】:2016-05-20 22:40:30
【问题描述】:

这是伪代码:

for i=1 to n
   for j=1 to n
     for k=1 to j
       x = x+1

我必须计算这两件事(i)精确计算(ii)找到它大O

在(i)中,我的最终答案是n^4+2n^3+5n^2+4n+2。 (ii)中,因为有三个循环,所以是O(n^3);

似乎 (i) 或 (ii) 肯定有错误,因为 (i) 提高到 4 次方,而大 O 只是 3。

这是我计算迭代次数的步骤:

for(i=1; i <=n; i++)

算作 1+(n+1)+n 即 (2n+2)。

所以,(2n+2)+n(2n+2)+n(4+6+8+...+2n+2)+n^2(1+2+3+...+n )(2) 最终得到 n^4(参见最后一项,AS * n 的总和)。

【问题讨论】:

  • 您在 (i) 中的计算不正确。它是O(n^3),所以它不能有n^4 术语

标签: loops for-loop iteration big-o counting


【解决方案1】:

对于像这样的嵌套循环计算内部循环的迭代次数,Sigma 表示法是一个方便的工具

由于我们通过相等来计算内循环的迭代次数(即,确切地说,没有不等式),我们可以为算法的渐近行为声明更强的 big-Θ 属性。这是在我们将x = x + 1 定义为您的算法的基本操作的假设下(此处适用)。

对于您的算法---比如说T---自然T ∈ Θ(n^3) 意味着渐近上限和下限,分别为T ∈ O(n^3)T ∈ Ω(n^3)

【讨论】:

    猜你喜欢
    • 2012-10-27
    • 1970-01-01
    • 2013-05-09
    • 2015-09-25
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    • 2018-05-23
    • 2013-10-11
    相关资源
    最近更新 更多