O(n)
其没有特定的单位,它可以让我们比较操作次数,指出算法运行时间的增速。
一、举例理解
想要在一张纸上得到16个矩形
1、方法一:画
图片引自《算法图解》(如侵权删)
很明显可以看出该方法需要操作16次,该方法一次只能完成一个矩形,操作效率为 1, 所以为了得到16个矩形需要操作16 / 1 = 16
次。当将需求放大至n时,其操作次数为n,用大O表示为O(n)
。
1、方法二:折
图片引自《算法图解》(如侵权删)
可以看出该方法仅需要操作4次,比画的方法操作次数减少很多,该方法一次只能完成二个矩形,操作效率为 2^n
, 所以为了得到16个矩形需要操作2^n = 16
即n = log2(16) = 4
。当将需求放大至n时,其操作次数为log2(n)
,用大O表示为O(log(n))
(大O里忽略系数)。
二、常见大O运行时间
O
(
l
o
g
n
)
O(log n)
O(logn) : 常见的二分查找
O
(
n
)
O(n)
O(n) :常见的简单查找
O
(
n
∗
l
o
g
n
)
O(n*logn)
O(n∗logn) :常见的有快速排序
O
(
n
2
)
O(n^2)
O(n2):常见的有选择排序
- 列表n个元素
- 每次查找一个元素,总共查找
n^2
次
O ( n ! ) O(n!) O(n!):常见的有旅行商问题
通过下图可以简单看下,相同的目标数,不同算法所需要的操作次数