0
在传统的线性搜索中, 与比较所需的数字 和n + 1的循环条件进行比较,总计进行2n + 1比较。但是,如果我们遵循以下过程,我们可以在最大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)。只是减少了一些比较,这是否使这个'哨兵线性搜索'更好的算法搜索未经排序的数组或不?
是的,但它并不总是可能有一个标记,所以它不是一个普遍适用的算法。 – harold
你能告诉我这种情况吗? –
无聊的实际原因。在多线程上下文中修改共享数组并不安全。或者由于某种原因数组可能实际上是只读的。 – harold