在传统的线性搜索中, 与所需数字进行比较时,有n个比较 和n + 1表示循环条件,总计进行2n + 1次比较。 但是,如果我们遵循以下程序,我们可以在最多<+ p>的n + 2次比较中得到答案
def sentinelSearch(ar,n,l):
# ar : array
# n : item to be searched
# l : size of array
last = ar[l-1] # saving last element in other variable
ar[l-1] = n # assigning last element as required
i = 0
while ar[i]!=n:
i+=1
ar[l-1] = last
if (i<l-1) or n==ar[l-1]:
print('Item found at',i)
else:
print('Item not Found')
尽管两种算法的最坏情况时间复杂度都是O(n)。只是减少了比较次数,这是否会使这种'哨兵线性搜索'更好的算法用于搜索未排序的数组?
答案 0 :(得分:1)
你必须对它进行基准测试。 但是有多种因素会影响结果,如:
正如人们在评论中提到的,你的算法必须改变数组(通常不好),你必须为sentinel保持特殊值(并不总是可能)。因此,优化的真正好处实际上可以忽略不计。