首页 文章

将顺序搜索与二进制搜索进行比较

提问于
浏览
0

假设我有一个未排序的实数数组,长度为 N . 我想找到最大的非正数 y ,然后在数组中找到小于 y 的第一个数字 x ,并且第一个数字 z 大于 y .

我想理论上将顺序搜索与二进制搜索非渐近地比较(即不仅仅是用大的Os)来找到这些值 . 陈述是否合理:

  • 顺序搜索需要

  • 0 排序比较,

  • 3*N 搜索比较(三次连续搜索) .

  • 二进制搜索需要

  • 2*N*ln(N) ≈ 1.39*N*log_2(N) 排序比较(quicksort, average),

  • 高达 log_2(N) 搜索比较(只有一次搜索,因为数组已排序,因此我们可以查看排序数组中的相邻值,找到 xz 一旦找到 y ) .

因此,我可以说如果二进制搜索会更快

1.39*N*log_2(N) + log_2(N) < 3*N 
<=> 
0 < N < 3.44779

即仅适用于极小的阵列?

2 回答

  • 2

    是的,你的结论是正确的 . 但是,通常使用排序数组(或任何其他有组织的结构)的意义在于,只执行一次或很少执行预处理步骤 - 与频繁查询相反 . 经过多次查询后,预处理成本得到了回报 .

  • 1

    不,由于几个原因,这不是一个有效的结论 .

    • 您只考虑比较的成本(这是次要的),而不是分支和掉期的成本 .

    • 您正在使用由quicksort执行的平均比较次数的近似值,该比率仅是渐近有效的 .

    • 你're using 2705419 as a stand-in for 2705420 . Real processors do not take a constant time to execute a given operation, and the total time they spend on a procedure is not the sum of each operation'的执行时间 .

相关问题