一般:在算法中搜索时间

时间:2012-02-26 12:44:30

标签: java sorting

我有一个普遍的问题(取自某些计算机科学测试)我想得到一个解释,问题是:

给定特定大小的排序数组,并假设我们使用计算机科学中最快的方法来查找数组中的值。在此方法中,任何元素的搜索时间不超过N秒。现在我们乘以数组的大小。数组中任何元素的搜索时间最多为:

答案:N + 1。

任何人都可以给我一个完整的解释,为什么这是答案?为什么不是2 * N?

感谢。

2 个答案:

答案 0 :(得分:3)

我认为句子“在这种方法中,任何元素的搜索时间不超过N秒”只是让你迷惑。

我将忽略秒并将其视为O(N)步。

有一种算法可以在log(x)步骤中找到元素(二进制搜索 - 参见其他的回答)。所以

log2(x)= N

log2(2 * x)= N + 1

(我知道这不是非常精确和正式,但我希望你明白这一点。)

答案 1 :(得分:1)

我认为它们意味着binary search算法是在排序数组中搜索的最快方法。它是“分而治之”类型的算法,因此对于这种算法的一步,我们将搜索区域减少了一半。

实施例: 让我们在算法中定义一步,花费1个时间单位

array = [1 2 3 4 5 6 7 8], to find = 7
We test our value as the last element in first array.
1 step: divide into [1 2 3 4] and [5 6 7 8], 4 < 7, our value in second array
2 step: divide into [5 6] and [7 8], 6 < 7, our value in second array
3 step: divide into [7] and [8], 7 = 7, we found it.

这是二元搜索的工作方式,耗时3个单位。 现在假设我们将数组加倍到[1..16],我们需要再增加一步以将数组减少到前一个,所以我们需要4个单位的时间。