假设我有一个未排序的实数数组,长度为N
。我想找到最大的非正数y
,然后是数组中x
小于的第一个数,以及大于的第一个数。y
z
y
我想在理论上将顺序搜索与二进制搜索进行非渐近比较(即不仅仅是使用大 Os)以找到这些值。是否合理地陈述:
- 顺序搜索需要
0
排序比较,3*N
搜索比较(三个顺序搜索)。
- 二分查找需要
2*N*ln(N) ≈ 1.39*N*log_2(N)
排序比较(快速排序,平均),- 直到
log_2(N)
比较搜索(只有一次搜索,因为数组是排序的,因此我们可以查看排序数组中的相邻值来查找x
,z
一旦我们找到y
)。
因此,我可以说二分查找会更快吗?
1.39*N*log_2(N) + log_2(N) < 3*N
<=>
0 < N < 3.44779
即仅适用于极小的阵列?