【问题标题】:Asymptotic Analysis for nested loop嵌套循环的渐近分析
【发布时间】:2015-02-15 18:34:18
【问题描述】:

我想更好地理解渐近分析,因为我相信我对此没有扎实的理解。如果有人能强调一种更好的方法,我将不胜感激。举两个例子

for (int i = 1; i <= n; i *= 2) { for (int j = 0; j < n; j++) { count++; } }

这个问题来自 Quiz,答案是 O(n log n)

我看了一个斯坦福大学的讲座,下面是它的例子

for i = 1 to n
  for j = i + 1 to n
   if A[i] == A [j] return TRUE otherwise
   return FALSE 

第二个给定问题的渐近分析是二次 O(n^2)

我怎么知道 O(n log n) 或 O(n^2) 什么时候它们都嵌套了 for 循环?

非常感谢任何答案。先谢谢了

【问题讨论】:

    标签: algorithm asymptotic-complexity


    【解决方案1】:

    第一个示例是O(nlogn),因为外循环重复log(n) 次,并且它的每个重复都需要内循环的O(n) 重复 - 所以这总计在O(log(n) * n) = O(nlogn)

    但是,在第二个示例中 - 外部循环需要 O(n) 迭代,并且对于每次迭代 i - 它需要内部循环的 O(n-i) 迭代。这意味着它将花费n + (n-1) + (n-2) + ... + 2 + 1 总时间。这是算术级数,总和在O(n^2)

    如果不了解发生的一些情况,就没有“简单的方法”来了解复杂性 - 复杂性分析取决于具体情况。
    但是,有一些提示可能对您有所帮助,例如 - 如果迭代计数器与每次迭代相乘 - 这强烈表明复杂性函数中将涉及对数,就像在您的第一个示例中一样。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-28
      • 1970-01-01
      • 2021-09-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多