我有一个n个元素的数组。这些元素是数字。我现在要做的是在我的阵列中找到很多它们。我将不得不进行sqrt(n)
次搜索。
从效率的角度来看,对我来说什么是更好的选择?
O(logn)
我有一些直觉,但我不知道如何检查和证明它。线性搜索成本(在最坏的情况下):O(n) * O(sqrt(n)
)。排序后的二进制搜索将是O(n) + O(logn) * O(sqrt(n))
。
答案 0 :(得分:1)
正如您所说,您有两种选择:
sqrt(n)
次。费用为O(n * sqrt(n))
。O(n)
中对数组进行排序,然后二次搜索sqrt(n)
次
费用为O(n + log(n) * sqrt(n))
。对于所有正面n
,log(n) * sqrt(n)
大于n
。 Proof。O(n + log(n) * sqrt(n)) = O(n)
排序部分占主导地位,这是瓶颈。因此,对于大n
,第二种方法应该更快 - 近似线性。
答案 1 :(得分:1)
您有两种方法可以解决您的问题:
制作复杂的表格,您将获得解决方案。 也许您可以使用像http://rechneronline.de/function-graphs/这样的工具来比较两个复杂性。
你有不同的案例:
第二个似乎是最有希望的。