假设我有一个未排序的实数数组,长度为N
。我想找到最大的非正数y
,然后找到数组中小于x
的第一个数字y
,并且第一个数字z
大于y
}。
我想理论上将顺序搜索与二次搜索非渐近地(即不仅仅是用大的Os)进行比较以找到这些值。陈述是否合理:
0
进行排序比较,3*N
搜索比较(三次连续搜索)。2*N*ln(N) ≈ 1.39*N*log_2(N)
排序比较(quicksort, average)
,log_2(N)
次搜索比较(只有一次搜索,因为数组已排序,因此我们可以查看排序数组中的相邻值,以便在找到x
和z
之后找到y
)。因此,如果
,我可以说二进制搜索会更快1.39*N*log_2(N) + log_2(N) < 3*N
<=>
0 < N < 3.44779
即。仅适用于极小的阵列?
答案 0 :(得分:2)
是的,你的结论是正确的。但是,通常使用排序数组(或任何其他有组织的结构)的意义在于,只执行一次或很少执行预处理步骤 - 与频繁查询相反。经过多次查询后,预处理成本得到了回报。
答案 1 :(得分:1)
不,由于几个原因,这不是一个有效的结论。