借鉴自生活中“较大”、“较小”、“偏快”、“偏慢”等粗略的度量概念,在计算机科学中有一种粗略的度量方法称之为“大O”表示法
这是一种可以描述算法的速度如何与数据项的个数相联系的比较。
无序数组的插入:常数
无序数组中新的数据项总是被放在下一个有空的地方,无论数据项个数有多大,一次插入总是用相同的时间,这个时间可以表示为一个常数,即用如下式子表示
T=K;(T用来表示时间,K用来表示常数)
其中K与以下因素有关:处理器效率、编译程序生成程序代码的效率等等;
线性查找:与N成正比
线性查找寻找特定数据项所需的比较次数平均为数据项总数的一半。用N表示数据项总数,搜索时间T与N的一半成正比:
T=K*N/2
二分查找:与Log(N)成正比
二分法对于有序数组查询,时间T与以2为底N的对数成正比
由于二分法的特性,S次查找所能容纳的最大数据量D=2^S;所以
T=K*log2(N)
由于所有对数都与其他对数成比例,故此可以将底数也并入K中即
T=K*log(N)
不要常数的写法
大O表示法注重比较的是对应不同的N值,T是如何变化的,而不是具体的数字,所以将常数省略
大写字母O可以理解为“Order of”(大约是)
总结
线性查找:O(N)
二分查找:O(logN)
有序数组的插入:O(N)
无序数组的插入:O(1)
有序数组的删除:O(N)
无序数组的删除:O(N)
通过比较不同的大O值,O(1)优秀,O(logN)良好,O(N)一般,O(N^2)欠缺。