在考试中,我看到一个问题:
以下哪一项属实?
- 对于二进制搜索,当目标项位于搜索列表的开头时,会出现最佳情况。
- 对于二进制搜索,当目标位于搜索列表的末尾时,会出现最佳情况。
- 对于二进制搜索,最坏的情况是目标项目不在搜索列表中。
- 对于二进制搜索,最糟糕的情况是在搜索列表中间找到目标。
醇>
在我看来, 1。和 3。都是正确的,但它只是要求一个选项。我错过了什么?
答案 0 :(得分:4)
3。确实是正确的,因为您需要通过算法并终止于最差的" stop子句,列表为空,需要log(n)
次迭代。
1。不正确。最好的情况是当第一个元素是目标时,它是中间元素是目标时,比较中间元素和目标,而不是第一个元素,所以如果中间元素是目标 - 算法将在一次迭代中完成。
答案 1 :(得分:0)
我认为 1。不正确。对于每次迭代,我们将当前搜索列表的中间项与目标进行比较。因此,如果目标项目位于搜索列表的开头,我们需要最长的搜索时间。
答案 2 :(得分:0)
如果我们假设搜索列表已排序,那么选项3将是正确的,因为每次我们将列表分成两部分而我们将两部分中的一部分分开。有了这个,我们得到log n
级别。如果找不到元素,则需要O(log n)
来检查哪个是二进制搜索的最坏情况。
如果列表没有排序,我们想要应用二进制搜索,那么首先我们必须对列表进行排序。 我们可以通过插入排序来搜索元素。在那种情况下1& 3都是正确的。
选项1的正确性:
当我们从列表中插入第一个元素时,我们检查这是否与给定元素匹配 - 如果匹配则最好是O(1)
。
选项3的正确性:
如果我们通过排序和搜索遍历列表中的所有元素,但仍未找到该元素,那么它将是麦芽汁案例O(n²)
。