一、概念
大 O 本是一个数学概念。
大 O 记法可用来描述一个函数的增长率的上限”,或者“如果函数 g(x)的增长速度不比函数 f(x)快,那么就称 g 属于 O( f )。
大 O 记法不只是用固定的数字来表示算法的步数,而是基于要处理的数据量来描述算法所需的步数。或者说,大 O 解答的是这样的问题: 当数据增长时,步数如何变化?
二、几种典型描述
1、O(1)
O(1)意味着一种算法无论面对多大的数据量,其步数总是相同的。就像无论数组有多大,读取元素都只要 1 步。
O(1)算法无论面对多大的数组,其步数都不变,也被称为常数时间。
O(1)就是用来表示所有数据增长但步数不变的算法。
2、O(N)
若用大 O记法来描述一种处理一个 N元素的数组需花 N步的算法的效率,很简单,就是 O(N)
O(N)算法所需的步数等于数据量,意思是当数组增加一个元素时, O(N)算法就要增加 1 步。
O(N)也被称为线性时间
3、O(logN)
归于此类的算法,它们的时间复杂度都叫作对数时间。简单来说, O(log N)意味着该算法当数据量翻倍时,步数加 1。
二分查找的大 O 记法就是O(log N)。
4、线性查找最好情况与最坏情况
线性查找的最好情况是 O(1), 最坏情况是 O(N)。
但若无特别说明,大 O 记法一般都是指最坏情况。因此尽管线性查找有 O(1)的最好情况,但大多数资料还是把它归类为 O(N)。