algorithm - 复杂度时间 O(n) 或 O(n(n+1)/2)

标签 algorithm big-o time-complexity

循环 n 个项目(如数组)然后循环 (n-1) 然后循环 (n-2) 等等的算法的复杂性如何:

Loop(int[] array) {
  for (int i=0; i<array.Length; i++) {
     //do some thing

  }
}
Main() {
   Loop({1, 2, 3, 4}); 
   Loop({1, 2, 3}); 
   Loop({1, 2}); 
   Loop({1}); 
//What the complexity of this code.
}

前面程序的复杂度是多少?

最佳答案

假设你在循环中做的事情是O(1),它的复杂度是O(n+(n-1)+(n-2)+... +1) = O(n(n+1)/2) = O(0.5n^2 + 0.5n) = O(n^2)

  • 第一个=是算术级数和。
  • 第二个=是由于开乘。
  • 第三个 = 是因为给定 O() 中的多项式,您可以简单地将其替换为 x^highest_power

关于algorithm - 复杂度时间 O(n) 或 O(n(n+1)/2),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28966072/

相关文章:

algorithm - 有没有不依赖于 n(输入的大小)的算法?

java - 什么是 Java 中的测试驱动开发 (TDD) 以及如何自动化测试用例

javascript - 如何修改 Elo 评级以获得更大的分差?

php - 将灯切换到 N 的算法是什么?

java - 如何系统地确定函数的big-O?

java - 查找字符串中与 Big O 相关的第一个非重复字符

java - Big O 表示法的复杂性

c++ - 渲染大量立方体的剔除技术

algorithm - 找到元素小于 S 的子集

java - 在 Java 中获取 TreeSet 的 headSet 的时间复杂度是多少?另外,如果我调用 headSet 方法 'n' 次怎么办?