这些循环的大哦有什么区别?

时间:2016-01-27 19:05:00

标签: time-complexity

The Three for Loops:

Three for loops

我对这个Big-Oh的东西相当新,我很难看到这三个循环之间的复杂性差异。

它们似乎都小于O(n ^ 2),但大于O(n)。

有人可以向我解释如何评估这些循环的复杂性吗?

谢谢!

2 个答案:

答案 0 :(得分:2)

  

有人可以向我解释如何评估这些循环的复杂性吗?

首先明确定义问题。链接的图像很少继续,所以让我们开始编写东西:

  • 变化的参数是整数n。
  • C是大于1的常数正整数值。
  • 循环变量是整数
  • 整数不会溢出
  • 添加,比较,赋值,乘法和索引的成本都是不变的。
  • 我们希望找到复杂性的成本是最内层循环的常量操作的成本;我们忽略了循环变量实际计算中的所有添加和诸如此类的东西。
  • 在每种情况下,最里面的陈述是相同的,并且具有不变的成本,所以让我们称这个成本为“一个单位”的成本。

第一个循环的成本是多少?

内部陈述的成本是一个单位。

包含它的“j”循环的成本每次都是十个单位。

“i”循环运行了多少次?大约n除以C倍。

因此“i”循环的总成本为10 * n / C,即O(n)。

现在可以进行第二次和第三次循环吗?更清楚地说明你遇到麻烦的地方。从:

开始
  • 第一次运行“j”循环的成本是1个单位。
  • 第二轮“j”循环的成本是C单位
  • 第三轮“j”循环的成本是C * C单位
  • ...

然后从那里开始。

请记住,您不需要计算完全成本函数。您只需要弄清楚支配成本。提示:我们对外部循环的 last 运行中的C * C * C ...了解了什么?

答案 1 :(得分:0)

您可以使用Sigma表示法分析循环。注意,为了研究循环(a)的渐近行为,常量C只描述循环中的线性增量,我们可以在分析中自由选择C的任何值(因为内循环只是固定数量的迭代)但是假设C>0(整数)。因此,对于循环(a),选择C=1。对于循环(b),我们将包括C,并且假设C > 1(整数)。如果在循环(b)中C = 1,它永远不会终止,因为i永远不会递增。最后将所有循环中最内层的操作定义为基本操作,成本为O(1)

Sigma符号分析如下:

Sigma notation

因此

(a) is O(n)
(b) is O(n)
(c) is O(n*log(n))