Big O 标记法,大O标记法
O(1)
O(n)
忽略常数项,数据量扩大n
倍,时间扩大2n
倍,则忽略2n
中的常数2
,计为O(n)
忽略低次项,复杂度计算为n^2+n
,通常只计算最高次项的n^2
,而忽略低次项n
,计为O(n^2)
,即n的平方
举例:
两个数据结构数组和链表,求获取最后一个元素的时间复杂度:
- 数组:由于数组的元素是紧密相连的排列,所以第n个元素是可以通过计算得到确切的偏移量,而读取第n个元素就变成了一次内存读取即可,所以跟数据量的大小没有必然联系,所以时间复杂度是一个常数,用O(1)来表示常数复杂度
- 链表:由于链表的元素不是紧密相连的排列,所以第n个元素需要先取到n-1个元素,换句话说,需要从第1个元素开始取下一个元素,直到取到最后一个元素,每一次取下一个元素都需要cpu执行相应的指令,n越大,cpu执行的指令就越多,并且是线性关系,所以时间复杂度是一个线性值,用O(n)来表示