algorithm - 确定时间复杂度

标签 algorithm performance time-complexity complexity-theory

给定数组 A 的以下伪代码

x = 0
  for i = 0 to n - 1
    for j = i to n - 1
       if A[i] > A[j]:
          x = x + 1
  return x

如何确定运行时间? 我会说它是 (n - 1)*(n - 1) = n^2 - 2n - 1 = O(n^2)。

虽然我不太确定如何使用 if 循环。

最佳答案

是的 O(n^2),只是将内循环中的迭代次数相加:

n + (n - 1) + (n - 2) + ... 1 = [ n x (n + 1) ] / 2

if 不是一个循环,它是一个控制结构。通常你只计算条件被检查的次数而不考虑条件。如果 if 主体中还有另一个循环,则该条件可能很重要。

如何计算内循环的迭代次数:

  • i = 0 时,内部循环运行 n 次,然后结束
  • 然后 i = 1 内部循环运行 n - 1 次,然后结束
  • 然后 i = 2 内部循环运行 n - 2 次,然后结束
  • ....
  • i = n - 2 内循环运行 1
  • i = n - 1 内循环运行 0

所以我们需要做的就是添加内循环的迭代次数:

n + (n - 1) + (n - 2) + ... 1 = [ n x (n + 1) ] / 2

关于algorithm - 确定时间复杂度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39455109/

相关文章:

algorithm - 使用(递归)动态规划的交替子串

c# - 指数分布柏林噪声的实现问题

performance - 在 MongoDB 中删除一项昂贵的操作吗?

javascript - 我是否向带有 javascript 循环的页面写入了太多数据?

python - 为什么在 collections.deque 中间添加或删除比在那里查找慢?

javascript - 使用两个循环进行更改的时间复杂度 - javascript

algorithm - 计算 split 点的数量

svn - TortoiseSVN 1.7 提交和检查网络共享修改速度极慢

arrays - 通过连接两个递增子数组构成的最大长度递增 super 数组

c - 该函数的时间复杂度