时间复杂度和空间复杂度

时间复杂度

  • 用大 \(O\) 表示。
  • 去掉系数和常数,如果有两个常数项,择取最大值。如:

\[F(N)=2*N+N^2+10=O(N^2) \]

\[F(N)=a+b=O(max(a,b)) \]

  • 在现实中,一般用程序运行的最坏情况来计时间复杂度。
  • 另外,如果程序的运行次数是一个常数(与 \(n\) 无关),那记为 \(O(1)\) .
  • 在时间复杂为 \(O(\log_xN)\) 时,当底数 \(x\) 为常数时,表达式可省略成 \(O(\log N)\) .
  • 二分查找时间复杂度推导:
    • \(\mathrm{begin=1,ned=}\ N\) ,则在最坏情况下,要查找到 \(\mathrm{begin=end}\) 时结束。设要查找的数始终在 \(\mathrm{mid}\) 前面。所以(设除了 \(x\)\(2\) ):

      \[N/2/2/2/2/.../2=1(\mathrm{begin=end}) \]

      \[2^x=N \]

      \[x=\log_2N \]

      所以二分查找的时间复杂度为:

      \[O(\log N) \]

  • 调和级数的时间复杂度为 \(O(n\ \log N)\) ;
  • 全排列函数的时间复杂度为 \(O(n!)\) ;
  • 二进制拆分的时间复杂度是 \(𝑂(𝑙𝑜𝑔 \ 𝑛)\)
\(O(1)\) \(O(n)\) \(O(n \log\ n)\) \(O(n^2)\) \(O(n!)\) \(O(n\sqrt n)\)
无敌 \(1e7\) \(1e6-5e6\) \(5000\) \(13\) \(1e5\)
posted @ 2024-10-25 21:57  M1_Byte  阅读(24)  评论(0)    收藏  举报