Big-O Analysis家庭作业:数据结构

时间:2015-08-23 03:17:14

标签: algorithm data-structures big-o

我是数据结构课程的新手,在我以前的CS课程中只略微触及了Big-O的主题。我仍然在网上学习它,但我只是想确保我这样做。关于Big-O分析有一些功课问题,我只是想和你们一起仔细检查。

以下是让我感到困惑的一些问题,以及我所做的分析:

//Part (a)
int x = 0;
for(int i = n; i >= 0; i--)             //N times
  if((i % 3) == 0) break;               //Executed O(N) times
    else x += n;                        //Executed O(N) times
Analysis: O(n)

//Part (b)
int x = 0;
for(int i = 0; i < n; i++)              //N times
  for(int j = 0; j < (n * n /3); j++)   //N^2 times
     x += j;                            //Executed O(N^3) times
Analysis: O(N^3)

//Part (c)
int x = 0;
for(int i = 0; i <= n; i++)             //N times
  for(int j = 0; j < (i * i); j++)      //N^2 times
     x += j;                            //Executed O(N^3) times
Analysis: O(N^3)

我很抱歉,如果我的分析错误或者到处都是,我仍然对这个概念不熟悉!任何输入和/或解释将不胜感激。谢谢!

1 个答案:

答案 0 :(得分:3)

部分a:循环最多执行三次。三是恒定的上限,因此复杂性是恒定的(aka O(1))。

b部分:你对此是正确的。

c部分:在脑海中执行此循环,并根据x += j的值考虑i运行的次数。如果i为零,则内循环将运行0次,如果i为1,则内循环将运行1次 - 通常,内循环将运行i^2(我平方时间。当我们计算整个事物(包括外部循环)时,x += j行将运行的总次数为:

  

0 2 + 1 2 + 2 2 + 3 2 + ... +(n - 1) 2 + n 2

此数学表达式等于(1/6)n(n + 1)(2n + 1)see here),O((1/6)n(n + 1)(2n + 1))等于O(n^3)。所以你得到了正确答案,但错误的方法。