在有序数组中,通常更快找出一个项目不在数组中而不是找出它?

时间:2015-11-19 18:48:33

标签: arrays sorted

在有序数组中,找出一个项目不在数组中通常比找出它更快吗?

我们的老师问了这个问题,大多数时候我们说不,但他说的答案是肯定的,它更快。我真的不知道怎么会有可能。毕竟,要发现该项目不在数组中,我们必须进行最多的比较,但如果它在数组中,我们可能会在此之前找到它。

任何人都可以解释一下吗?提前谢谢。

1 个答案:

答案 0 :(得分:1)

考虑以下结构:让我们在数组中定义一个目标区域,其中包含所讨论元素的位置。当搜索算法开始时,目标区域就是整个数组,因为我们还没有查看数组中的任何内容。

现在假设您进行二分搜索(最适合有序数组)。你会看到数组中间的元素。如果该元素小于您要查找的元素,则您知道您要查找的元素必须位于其右侧。因此,目标区域已减少到阵列的右半部分。相反的情况也是如此:如果您查看的元素较大,则新目标区域是数组的左半部分。

如您所见,搜索算法的每一步都会以某种方式缩小目标区域,以便您越来越接近答案。这适用于每种搜索算法。例如,如果您要在元素中线性迭代,那么您将在每个步骤中将目标区域减少一个元素。

无论您是在检查是否包含(项目是否在数组中)或排除(是否在数组中),您的算法都会在以下两种情况之一停止:

  1. 在尝试缩小搜索范围时,您碰巧从数组中选择一个元素,这个元素就是您要查找的项目。此时,包含测试将返回true,否则排除测试将返回false
  2. 目标区域耗尽(即,缩小为空集)。在这种情况下,包含率为false,排除量为true
  3. 根据这个推理,包含和排除测试是完全对称的,因此我同意你的“不”。但请,请您的老师解释他的推理并在此发布。