(一) Java数据结构与算法(第二版)笔记——大O表示法

来源:互联网 发布:yii2 商城源码 编辑:程序博客网 时间:2024/05/17 01:32

大O表示法

汽车按尺寸被分为若干类:微型,小型,中型等等。在不提及具体尺寸的情况下,这些分类可以为我们所涉及到车的大小提供一个大致概念。我们同样也需要一种快捷的方法来评价计算机算法的效率。在计算机科学中,这种粗略的度量方法被称作“大O”表示法。

我所需的是一个可以描述算法的速度是如何与数据项的个数相联系的比较。

无序数组的插入:常数

向一个无序数组中插入一个数据项的时间T是一个常数K:T = K。

线性查找:与N成正比

设N为数据项总数,搜索时间T与N的一半成正比:T = K*N/2.

将2并入K可以得到一个更方便的公式。新K的值等于原先的除以2。新公式:T = K*N。

二分查找:与log (N)成正比

T = K*log2(N)。实际上,由于所有的对数都和其他对数成比例,我们可以将这个为常数的底数也并入K,由此不必指定底数:T = K*log(N)。

不要常数

大O表示法同上面的公式比较类似,但它省去了常数K。

大O表示法使用大写字母O,可以认为其含义是“order of”(大约是)。我们可以使用大O表示法来描述线性查找使用了O(N)级时间,二分查找使用了O(logN)级时间。向一个无序数组中插入使用了O(1),或常数级时间。

大O表示法的实质并不是对运行时间给出实际值,而是表达了运行时间是如何受数据项个数所影响的。