我需要帮助来计算“大O”

时间:2011-03-25 23:31:42

标签: big-o

第一个问题;

sum = 0;

for i = 1 to n; i++
 {   
 for j = 1 to i * i; j++
    {
    for k = 1 to j; k++
       sum ++;
    }
 }

第二个问题;

sum = 0;

for i = 1 to n
  {  
  for j = 1 to i * i
    {
    if j mod i == 0
      {  
      for k = 1 to j
           sum ++;
      }
    }
  }

您好我是IT新手,我需要帮助(实际上是两个:D)

前几天我遇到了“大o”,当我正在研究它的时候,我找到了这个地址,实际上我从这里学到了许多东西......

但大多数关于“大o”的例子只是为了解释它,这里我有两个问题。经过我的计算,我发现第一个的大o为O(n ^ 5),第二个为O(n ^ 3)。但这些价值太大了......

因此我在这里,我需要你的帮助...(即使你可以写下结果没有解释但请帮助我解决这些问题)

先谢谢...

1 个答案:

答案 0 :(得分:2)

好的,big-O的定义是函数 g(x) O(f(x))如果 g(x)< / em>≤ kf(x)表示某些常数 k

换句话说,big-O告诉你一个函数增长有多快的一些想法;如果它是$ O(n)*,它会与输入的长度成比例增长。您计算的内容以及计算的详细信息都隐藏在常量中。

以下是一些例子:

for i from 1 to n {
  do something 
}

O(n)。您可以分别浏览 n 项目。

for i from 1 to n {
}
for i from 1 to n {
}

依次两次 O(n),因为您正在查看每个 n 项目两次。那是 2n ,它仍然是 O(n)

另一方面,

for i from 1 to n {
   for j from 1 to n {

   }
 }

O(n 2 ,因为对于 i 的每一步,您都要经过 1-n 对于 j

理顺你的代码缩进,这样我们就可以确定你在做什么了,看看这些例子是否有帮助。

更新

这些都是非常有趣的问题,想一想。

  • i*i期限

考虑i*i的值,即i 2 的值。在最坏的情况下,i == n,因此j是1,4,9,16...(n*n)。对于从1到n的x,x 2 的总和是多少? (提示:1/6(...)(...),现在填写空白。)

  • if ... mod term

该术语什么时候会成立?