进行二进制搜索时,我们将对数组的搜索范围逐步划分为一半,并寻找所需元素。如果排序数组中不存在该元素,则仅在将数组的最后一个剩余元素与之进行比较之后才能得到结果。为什么不使用简单的语句,如:
def binarySearch(array,element):
maxIndex=len(array)-1
if(array[maxIndex]<element):
return -1
if(array[0]>element):
return -1
[基本上,为什么不先与已排序数组的最小值和最大值进行比较,以检查数组中元素的存在。
它甚至可能甚至不存在于数组中,但是如果元素大于或小于数组的任何元素,我们仍然节省了大量搜索。
在二进制搜索中,比较的次数约为1 + log 2 n,假设一种算法每次迭代仅执行一次比较(因此不进行相等性检查),并且进行最后一次比较以查看是否只有剩余的候选者值是一个匹配项。
如果确实搜索到的值超出了数据集的外部限制,那么您的建议会将比较次数减少到1或2(取决于离群值在哪一边-假设概率是均匀分布的)。不利的一面是,对于小于或等于这些限制的值,现在您将比较的数量<2增加了<2。因此,可能会发现,在average上,您实际上损失的多于所获得的。这取决于获得搜索值在限制范围内(不一定是匹配项)的可能性。让我们打电话P获得 outside 标准算法:1 + log
P的实际值,就可以检查哪种算法平均只会执行较少的比较。