我什么时候需要使用二分搜索而不是线性搜索?

时间:2016-05-17 07:54:47

标签: algorithm search

需要在n-element表中执行多少次二进制搜索才能回购对表格进行排序所需的预处理时间?

2 个答案:

答案 0 :(得分:1)

这是一个棘手的问题,因为它取决于您用于排序的算法,二进制搜索实现细节等等。

在不了解具体实现的情况下,我们可以根据Big-O表示法开始分析 (但它不准确,因为算法O(2n)的复杂度等于O(n),但是大概多走两倍)

<强>分析

Binary search = O(logn)
Sorting       = O(nlogn)
Linear search = O(n)

您需要执行K次搜索。因此,对于不同搜索的原始未排序数组a[n],您需要

二进制搜索

  1. 排序
  2. 搜索k

    TOTAL(BS)= O(logn)+ k * O(logn)

  3. 线性搜索

    1. 只需搜索k

      TOTAL(LS)= k * O(n)

    2. 现在,通过比较kn

      ,尝试解决方程
      nlogn + klogn < kn
      log(n^n) + log(n^k) < kn
      log(n^(n+k)) < kn
      n^(n+k) < 2^kn
      2^kn - n^(n+k) > 0
      

      (我不是数学家,这是我能得到的最简单的)

      现在,当您输入算法NK时,只需评估最后一个表达式,找到最小K以通过二分搜索获胜。

      示例

      假设n = 1000

      2 ^(1000k)-1000 ^(1000 + k)> 0

      当k> 0时,该表达式成立。 10, 对于n = 10000,当k> 1时,表达式成立。 9

      <强>结论

      如果数组比1000个元素更好,则需要执行至少10次二进制搜索才能返回排序投资

答案 1 :(得分:-1)

当您按排序顺序排列数据时,将使用二进制搜索。二进制搜索将为您提供O(logn)的性能。如果您有更多搜索而不是插入,那么二分搜索将提高性能。线性搜索是O(n)。当数据不是订单时,可以使用线性搜索。