首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >计算FOR循环标记如何影响复杂性?

计算FOR循环标记如何影响复杂性?
EN

Stack Overflow用户
提问于 2016-04-08 05:02:52
回答 4查看 107关注 0票数 2

假设我们有一个FOR循环

代码语言:javascript
复制
int n;

for (int i = 0; i < sqrt(n); i++)
{
    statement;
}

计算i的sqrt会增加循环的O(n)复杂度吗?在我的例子中,Java中的sqrt函数的时间复杂度为O(log ),这对循环的时间复杂度有什么影响?sqrt函数是应用于循环的每个序列,还是只应用一次,然后将该值存储并再次使用?

EN

回答 4

Stack Overflow用户

发布于 2016-04-08 05:09:10

我认为这可能取决于语言,但通常情况下,每次循环迭代后都会运行i < sqrt(n)检查,因此您可以将其称为sqrt(n)时间。好主意是将sqrt(n)结果存储在变量中,并将其与i进行比较,因此

代码语言:javascript
复制
int n;
double sn = sqrt(n);

for (int i = 0; i < sn; i++)
{
    statement;
}
票数 2
EN

Stack Overflow用户

发布于 2016-04-08 05:18:04

sqrt函数应用于循环的每个序列。不过,n的用法有所不同。sqrt的O(logn)的复杂度是n是值中的位数,但是循环的O(n)是实际值n。有了n的定义,sqrt就更像O(loglogn)了。

对于这样的循环,像sqrt这样的数字操作的复杂性可以看作是恒定的时间。比特的数量是有限的,因此与更大的循环相比,时间是微不足道的。

票数 0
EN

Stack Overflow用户

发布于 2016-04-08 05:21:03

对于问题中给出的变量n,

O(日志(d=bits of variable) * sqrt(n=number in the loop))

假设找到n位(位)数‘sqrt是log(D),如'fgb’首先所说的。

假设n的位数在整个计算过程中对于所有硬件都是恒定的,所以:

O(log(常量)* sqrt (n))

O(常量* sqrt(n))

O(sqrt(n))

但是如果它不是强类型的,并且如果n的比特逐渐增加(例如从64比特到128到256比特到1024,但是具有相同的值),那么它将是

O(log(d)*sqrt(n))

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

https://stackoverflow.com/questions/36487149

复制
相关文章

相似问题

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