首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >算法分析

算法分析
EN

Stack Overflow用户
提问于 2014-02-04 06:59:37
回答 4查看 275关注 0票数 4

所以我理解了一些算法分析,但是我完全不知道如何做这个。有人能给我解释一下吗?这会是O(logn)吗?

代码语言:javascript
复制
for (int i=1; i < n; i*=2)
for (int j=0; j < i; j++)
// do simple operation
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-02-04 07:32:55

要找到嵌套循环的大O,需要执行如下步骤。

例如,让:

代码语言:javascript
复制
n = 10

现在,外部循环执行3次,即:

代码语言:javascript
复制
i=2,4 and 8

内部循环在每次迭代中执行3次,如下

代码语言:javascript
复制
i=2 it iterates 2 times
i=4 it iterates 4 times
i=8 it iterates 8 times

因此,迭代的总次数小于2*n,使得它成为O(2n),我们可以忽略常数因子,所以它的大O是

代码语言:javascript
复制
O(n)
票数 5
EN

Stack Overflow用户

发布于 2014-02-04 07:13:13

那实际上是O(n)

您可以如下所示:

  • 操作数为系列2、4、8、16、32、.就在n之前。
  • 这个几何级数的和大约在从n2n的范围内。
  • 因此,整个算法是O(n),因为您可以忽略常量因子。
票数 1
EN

Stack Overflow用户

发布于 2014-02-04 08:36:08

我将首先计算小-o,让你了解整个过程,然后我们从它得到大-O

让我们把它分成几部分:

代码语言:javascript
复制
for (int i=2; i < n; i*=2)

首先,我们从i=2得到了一个绑定

如果i*=2然后i ={2,4,8,16,32,64.} so i增量在2^x之后,那么:

我们正在寻找i > n为真,所以2^x > n必须是真的,做一些数学运算:

log2(2^x) = log2(n)

x=log2(n) //这里我们发现i需要log2(n)循环来满足条件语句。

因为在for中,我们有比较和界,所以对于这个for,它将是2log2(n)+1操作。

注意:由于这是一个嵌套链,下面的for中的每个操作都将乘以2log2(n)+1次数

代码语言:javascript
复制
for (int j=0; j < i; j++)

j=0 1界

因此,j={0,1,2,3,4,5,6,7,8....} j++ j=n,然后是2n+1,用于这个for

最后,我们有一个小o等于:

(2n+1)*(2log2(n)+1)

4 2log2 2(N)+ 2n +2log 2(N)+ 1

log2(n)(4n+2) +2n +1

结果表明,o(log2(n)(4n+2) +2n +1),为了得到大O,我们可以减少这个表达式,忽略一些因素,然后:

O(log2(n)n)

希望这是足够清楚的理解。

致以问候。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21545927

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档