大O表示法
2009-08-06 15:58
183 查看
大O表示法是一种粗略试题算法效率的方法。了解大O表示法之前先看一组公式:
无序数组的插入是与数组中数据项个数无关的算法,由于插入时不必考虑排序,新数据项总是被放在下一个有空的地方。我们可以说向一个无序数组中插入一个数据项的时间T是一个常量K(K值与cpu运行速度、编译程序生成程序代码的效率等有关),得出:
T = K
在数据项的线性查找中,最好的情况下比较次数只有1次(数组第1个数据项就是所要查找目标的情况);最坏的情况下比较次数有N(数组长度)次(数组最后一个数据项是查找目标)。平均次数为N/2次,搜索时间T与N/2成正比,也就是与N成正比:
T = K*N
二分查找法……先反过来思考一个问题:只给5次比较机会,能搜索到目标的最大范围数组长度是多少?1次能比较2个,2次能比较4个,3次能比较8个,4次16个,5次32个。设数组长度为N,比较次数为X,N是2的X次方,也就是说X是以2为底N的对数即log2(N)。由此得出二分查找法在最坏情况下花费的时间T为比较次数log2(N)乘以单次比较所花费的时间K,即:
T = K*log2(N)
也就是T与log2(N)成正比。由于任何对数都和其他对数成比例,我们也可以说T与log(N)(以10为底N的对数)成正比,即:
T = K*log(N)
大O表示法同上面的公式比较类似,但它省去了常数K。因为比较算法时不需要在乎硬件设备等。大O表示法使用大写字母O,可以使用大O表示法来描述线性查找使用了O(N)级时间,二分查找使用了O(log N)级时间,向一个无序数组插入数据使用了O(1)(或常数)级时间。
无序数组的插入是与数组中数据项个数无关的算法,由于插入时不必考虑排序,新数据项总是被放在下一个有空的地方。我们可以说向一个无序数组中插入一个数据项的时间T是一个常量K(K值与cpu运行速度、编译程序生成程序代码的效率等有关),得出:
T = K
在数据项的线性查找中,最好的情况下比较次数只有1次(数组第1个数据项就是所要查找目标的情况);最坏的情况下比较次数有N(数组长度)次(数组最后一个数据项是查找目标)。平均次数为N/2次,搜索时间T与N/2成正比,也就是与N成正比:
T = K*N
二分查找法……先反过来思考一个问题:只给5次比较机会,能搜索到目标的最大范围数组长度是多少?1次能比较2个,2次能比较4个,3次能比较8个,4次16个,5次32个。设数组长度为N,比较次数为X,N是2的X次方,也就是说X是以2为底N的对数即log2(N)。由此得出二分查找法在最坏情况下花费的时间T为比较次数log2(N)乘以单次比较所花费的时间K,即:
T = K*log2(N)
也就是T与log2(N)成正比。由于任何对数都和其他对数成比例,我们也可以说T与log(N)(以10为底N的对数)成正比,即:
T = K*log(N)
大O表示法同上面的公式比较类似,但它省去了常数K。因为比较算法时不需要在乎硬件设备等。大O表示法使用大写字母O,可以使用大O表示法来描述线性查找使用了O(N)级时间,二分查找使用了O(log N)级时间,向一个无序数组插入数据使用了O(1)(或常数)级时间。
相关文章推荐
- 算法的时间复杂度(大O表示法)
- 大O表示法
- 2.1 数学基础、大O表示法、洛必达法则相对增长率、T(N) = O( f(N) )、Ω( g(N) )、Ω( h(N) )、o( p(N) )
- 数据结构学习笔记(1.大O表示法和顺序表)
- 算法概念:大O表示法/小o表示法/Ω/Θ
- 数据结构与算法(2)-大O表示法
- 木其工作室(专业程序代写服务)[原]数据结构学习笔记(1.大O表示法和顺序表)
- 《数据结构与算法》学习笔记4 存储对象的数组和大O表示法
- 【算法】二分查找法&大O表示法
- (译)算法之美(3)--大O表示法
- 数据结构 大O表示法和顺序表
- 大O表示法
- 大O表示法
- 算法的时间复杂度(大O表示法,其中O是个常量)
- 通过简单排序理解大O表示法
- 大O表示法
- 数据结构学习笔记(1.大O表示法和顺序表)
- 算法初探——大O表示法
- 大O表示法
- 算法的时间复杂度(大O表示法)