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

算法复杂度分析
EN

Stack Overflow用户
提问于 2014-03-26 12:42:06
回答 4查看 156关注 0票数 1

下面列出的两种方法的大O时间复杂度是多少?

是方法1 O(log n²)还是O(log n)

方法2是O(n²)还是别的什么?

代码语言:javascript
复制
public static void method1(int n) {
    int k = 0;      
    for (int i = 1; i <= n; i = i*2)
       for (int j = n; j > 1; j = j/2)
           k++;     
}               

public static void method2(int n) {             
    for (int i = 1; i <= n; i = i + 1)
       for (int j = i; j <= n; j++)
          method1(n);
}
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-03-26 12:49:47

method1的复杂性是O((log )2),因为我们有一个嵌套循环,每个循环运行O(log )次。

Method2中,我们执行Method1的时间为三角图数,即执行O(n平方)次。由于我们执行O((log )2)函数O(N 2)次,因此Method2的复杂性为O(n平方⋅(log )2)。

票数 1
EN

Stack Overflow用户

发布于 2014-03-26 12:44:46

在第一个示例中,外部循环执行logn次数,第二个循环也执行log n次。其复杂性为O(Log 2 n)。

在第二个示例中,第一循环执行n次,第二循环执行I次,其中i是第一循环的当前索引。因此,它执行1+ 2 +3+.+n次,之和为n⋅(n - 1) /2,计算复杂度为O( (n 2-n)n)=O(N 2 2)。在这里阅读更多1+2+3.系列

因此,为了结束它,method2执行method1 n 2次,给出了O(n平方⋅日志n)的总复杂性。

票数 2
EN

Stack Overflow用户

发布于 2014-03-26 12:51:05

在第一个方法中,有两个嵌套循环,每个循环都是log(n),所以是的,这会将它们转化为O((logn)^2)。

对于第二个方法,如果我们专注于第二个循环,我们可以看到

  • I=1 =>运行n次
  • I=2 =>运行n-1次
  • ..。
  • I=n =>运行1次

这是一个算术级数,它的和等于n * (n+1) / 2,这将它转化为O((nlogn)^2),因为我们大约调用method1 n^2次。

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

https://stackoverflow.com/questions/22661416

复制
相关文章

相似问题

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