元素搜索成本

时间:2013-01-13 16:34:42

标签: algorithm sorting

我有一个n个元素的数组。这些元素是数字。我现在要做的是在我的阵列中找到很多它们。我将不得不进行sqrt(n)次搜索。

从效率的角度来看,对我来说什么是更好的选择?

  1. 线性搜索
  2. 数组排序(比如说,在线性时间,我们可以使用RadixSort),然后使用二进制搜索搜索元素 - O(logn)
  3. 我有一些直觉,但我不知道如何检查和证明它。线性搜索成本(在最坏的情况下):O(n) * O(sqrt(n))。排序后的二进制搜索将是O(n) + O(logn) * O(sqrt(n))

2 个答案:

答案 0 :(得分:1)

正如您所说,您有两种选择:

  1. 线性搜索sqrt(n)次。费用为O(n * sqrt(n))
  2. O(n)中对数组进行排序,然后二次搜索sqrt(n)次 费用为O(n + log(n) * sqrt(n))。对于所有正面nlog(n) * sqrt(n)大于nProof
    多亏了这一点,我们可以写O(n + log(n) * sqrt(n)) = O(n) 排序部分占主导地位,这是瓶颈。
  3. 因此,对于大n,第二种方法应该更快 - 近似线性。

答案 1 :(得分:1)

您有两种方法可以解决您的问题:

  1. 排序然后搜索
  2. 只是搜索
  3. 制作复杂的表格,您将获得解决方案。 也许您可以使用像http://rechneronline.de/function-graphs/这样的工具来比较两个复杂性。

    你有不同的案例:

    1. 线性搜索sqrt(n)次= O(n * sqrt(n))。
    2. 线性排序然后二元搜索sqrt(n)次= O(n)+ O(log(n)* sqrt(n)= O(n)
    3. 第二个似乎是最有希望的。