首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >计算成本

计算成本
EN

Stack Overflow用户
提问于 2010-06-27 19:00:59
回答 2查看 584关注 0票数 2

有人知道这两段代码的计算成本是多少吗?

代码语言:javascript
复制
while (n > 2)
   n = sqrt(n);

while (n > 2)
   n = log(n);
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-06-27 19:24:50

第二个是O(log* n),其中log *iterated logarithm

分析第一个得到的结果如下所示:

代码语言:javascript
复制
sqrt(n) = n ^ (1/2)
sqrt(sqrt(n)) = n ^ (1/4)
sqrt(sqrt(sqrt(n))) = n ^ (1/8)
...
sqrt applied k times = n ^ (1/2^k)

考虑第一个算法执行k的次数(基本上就是在n <= 2之前我们必须应用sqrt的次数)。

考虑一下这样的推理:

代码语言:javascript
复制
n ^ (1/2^k) = p (p <= 2) | ^ (2^k)
n = p ^ (2^k) | log
log n = (2^k) log p | log
log log n = log (2 ^ k) + log log p
log log n = klog2 + log log p
=> k ~= log log n

所以第一个算法是O(log log n)

票数 9
EN

Stack Overflow用户

发布于 2010-06-27 19:25:43

如果在对数域中重新转换,第一个问题的答案应该会变得显而易见:

代码语言:javascript
复制
n = log2(n);
while (n > 1)
    n = n / 2;

你需要将一个数字减半多少次才能达到1?O(log )。

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

https://stackoverflow.com/questions/3127145

复制
相关文章

相似问题

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