在有序数组中,找出一个项目不在数组中通常比找出它更快吗?
我们的老师问了这个问题,大多数时候我们说不,但他说的答案是肯定的,它更快。我真的不知道怎么会有可能。毕竟,要发现该项目不在数组中,我们必须进行最多的比较,但如果它在数组中,我们可能会在此之前找到它。
任何人都可以解释一下吗?提前谢谢。
答案 0 :(得分:1)
考虑以下结构:让我们在数组中定义一个目标区域,其中包含所讨论元素的位置。当搜索算法开始时,目标区域就是整个数组,因为我们还没有查看数组中的任何内容。
现在假设您进行二分搜索(最适合有序数组)。你会看到数组中间的元素。如果该元素小于您要查找的元素,则您知道您要查找的元素必须位于其右侧。因此,目标区域已减少到阵列的右半部分。相反的情况也是如此:如果您查看的元素较大,则新目标区域是数组的左半部分。
如您所见,搜索算法的每一步都会以某种方式缩小目标区域,以便您越来越接近答案。这适用于每种搜索算法。例如,如果您要在元素中线性迭代,那么您将在每个步骤中将目标区域减少一个元素。
无论您是在检查是否包含(项目是否在数组中)或排除(是否在数组中),您的算法都会在以下两种情况之一停止:
true
,否则排除测试将返回false
。false
,排除量为true
。根据这个推理,包含和排除测试是完全对称的,因此我同意你的“不”。但请,请您的老师解释他的推理并在此发布。