java - 算法复杂度分析

标签 java big-o complexity-theory time-complexity

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

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

方法 2 O(n²) 还是其他?

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);
}

最佳答案

在第一种方法中你有 2 个嵌套循环,每个循环都是 log(n) 所以是的,这会将它们变成 O((logn)^2)

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

  • i = 1 => 运行 n 次
  • i = 2 => 运行 n-1 次
  • ...
  • i = n => 运行 1 次

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

关于java - 算法复杂度分析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22661416/

相关文章:

time-complexity - 嵌套循环的 Big O (int j = 0; j < i * i;++j)

big-o - 如何比较指数复杂度?

Java - 创建长度递增的字符串列表的时间复杂度

java - LinkedHashMap 的实现与 HashMap 有何不同?

java - Scala 中的 @remote 注解类型不匹配

algorithm - big-O 表示法是对算法进行最佳、最差和平均情况分析的工具吗?

java - 如何在 Big-O(N) 时间内将 3 个排序数组合并为 1 个排序数组?

java - 该方法只能设置 public/protected/private 之一

java - 如何在 javafx 中快照整个场景?

java - 如何使用日历将日期字符串转换为不同格式