了解大O.

时间:2010-02-01 23:30:30

标签: complexity-theory big-o

鉴于以下代码, 3。的复杂性是什么?如何表示具有以下复杂性的简单算法?

O(N²+ n)的
O(N²+ 2N)
O(LOGN) O(nlogn)

var collection = new[] {1,2,3};
var collection2 = new[] {1,2,3};

//1.
//On
foreach(var i in c1)
{
}

//2.
//On²
foreach(var i in c1)
{
  foreach(var j in c1)
  {
  }
}

//3.
//O(nⁿ⁺ᵒ)?
foreach(var i in c1)
{
  foreach(var j in c2)
  {
  }
}

5 个答案:

答案 0 :(得分:6)

如果两个集合的大小相同,则

3为O(n * m)或O(n ^ 2)。

O(n ^ 2 + n)是没有意义的,因为n小于n ^ 2。只需写O(n ^ 2)。

大多数体面的comparison sort算法都在O(n * log(n))处运行。如果您不知道,请查看维基百科。

binary search是O(log(n))。

答案 1 :(得分:5)

外部foreach执行n = | c1 | times(其中| x |是c1的大小),而内部foreach被执行m = | c2 |倍。那是总共O(n * m)次。


  

我如何表示具有以下复杂性的简单算法?

  • O(N²+ n)的

这与O(n ^ 2)相同。花费O(n ^ 2)时间的东西会在聚会上与其他所有人一起喝酒,假设在敬酒中总有两个人,并且一次只有一个人敬酒。

  • O(N²+ 2N)

同上; O(n ^ 2)项占主导地位。 O(n ^ 2)努力的另一个例子是在长度为n的方形花园中种植树木,假设种植每棵树需要一定时间,并且一旦种植树木,其他树木就会被排除在附近

  • O(logn)时间

这方面的一个例子是通过反复选择下一个需要搜索的页面区域的中点来在字典中查找单词。 (换句话说,二元搜索。)

  • O(nlogn)

使用上述算法,但现在您必须在字典中找到每个字。

答案 2 :(得分:2)

没有O(n²+ n)或O(n ^ 2 + 2n)。撇开算法复杂性的大多数数学基础,你至少需要知道它是“渐近的”。当N接近无穷大时,n ^ 2 + n的值由n ^ 2项支配,因此这是n ^ 2 + n的渐近复杂度。

3的复杂度为O(I * J),其中I和J是c1和c2中输入的大小。

答案 3 :(得分:2)

说实话O(n²+ n)& O(n²+ 2n)是相同的。

答案 4 :(得分:1)

3的复杂度是O(m * n)。 没有复杂度O(n 2 + n)或O(n 2 + 2n)。它只是O(n 2 )。这是因为n是o(n 2 )。

O(log(n))的示例是二分搜索。

O(n * log(n))的示例是合并排序。