首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么counter = counter /2;有O(log(n))?

为什么counter = counter /2;有O(log(n))?
EN

Stack Overflow用户
提问于 2011-03-22 01:07:17
回答 5查看 343关注 0票数 2

我知道以下代码的复杂度为O(log(n)):

代码语言:javascript
复制
while (n>1)
{
    counter++;
    n/=2;
}

我知道在这里,n在每次迭代中被一分为二,这意味着如果n是1000,那么它将需要10轮才能走出循环。这是如何导致O(log(n))的?

对于这个简单的问题,我真的很抱歉,我真的尽力在我问之前得到它。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-03-22 01:14:57

每次循环时,都要除以2(粗略地说,这将忽略四舍五入,因为它是渐近参数)。因此,如果n=N,在k次迭代之后,n=N/(2^k)。要得到N = 1,你必须满足2^k =N,即k= log(N)。

票数 6
EN

Stack Overflow用户

发布于 2011-03-22 01:13:55

递归关系为

代码语言:javascript
复制
 T(n) = T(n/2) + O(1)

尝试使用Master's theorem来解决它,会得到T(n)的运行时间为O(log )(类似于您在二进制搜索中得到的结果)。

票数 2
EN

Stack Overflow用户

发布于 2011-03-22 01:12:25

假设n是2^x (例如2^5=32、2^10=1024等),因此计数器在循环中递增x倍。根据定义,x是以2为底的log。

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

https://stackoverflow.com/questions/5381081

复制
相关文章

相似问题

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