算法——复杂度

1. 算法复杂度

  • 时间复杂度: 执行算法所需要的计算工作量
  • 空间复杂度: 执行算法所需要的内存空间

举一个例子:

  • 求:从数组中查找一个数
  1. 如果数组有 10 个元素?
  2. 如果数组有 1000 个元素?
  3. 如果数组有 100000 个元素?

以上三种情况,若用for循环查找,则最优解都为第一个元素就找得到,那么就都只需要循环1次即可。

但若需要查找的元素在最后一个那么需要循环的次数就为数组的长度n。

2. 时间复杂度

  • 在计算机科学中,算法的时间复杂度是一个函数,它定量描述了
    该算法的运行时间。
  • 以算法输入值规模 n 为自变量的函数:


    image.png

其中:

  • 大 O 符号 O < (Big O) 【小于某一临界值】
  • 大 Ω 符号 Ω > (Big Omega (Ω )) 【大于某一临界值】
  • 大 Θ 符号 Θ = (Big Theta (Θ))【介于某一临界值】

大 O 符号 Example:

image.png
  1. n = 1 时 4*n^2 项是 2n 项的 2 倍大
  2. n = 500 时 4*n^2 项是 2n 项的 1000 倍大
  • 因此,当n非常之大的时候,2n项的怎么也大不过n^2,故2n 项对表达式值的影响可忽略不计

结论:
image.png

快速排序

  • Best case:数组内各元素均相等,故 T(n)=O(1)

  • Worst case: T(n)=O(n^2)

  • Expected Case: T(n)=O(nlogn)

一般情况下,Expected Case == Worst case ,快速排序除外

3. 时间复杂度比较

越小越好!!!!
O(1)永远是最优解!!!

算法——复杂度_第1张图片
image.png

计算时间复杂度 一般问题 –

  • 基本操作的时间复杂度
    • 丢弃常数项
    • 丢弃次要项


      算法——复杂度_第2张图片
      image.png
  • 基本操作被执行了多少次( For / While 循环)
  • 复合操作:加还是乘


    算法——复杂度_第3张图片
    image.png

你可能感兴趣的:(算法——复杂度)