Algorithm sentinel线性搜索是否比普通线性搜索更好?

Algorithm sentinel线性搜索是否比普通线性搜索更好?,algorithm,search,Algorithm,Search,在传统的线性搜索中, 有n个比较用于与所需数量进行比较 循环条件为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 l

在传统的线性搜索中, 有n个比较用于与所需数量进行比较 循环条件为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')
def sentinelSearch(ar、n、l):
#ar:阵列
#n:要搜索的项目
#l:数组的大小
last=ar[l-1]#保存其他变量中的最后一个元素
ar[l-1]=n#根据需要分配最后一个元素
i=0
而阿尔[我]=n:
i+=1
ar[l-1]=最后一次

如果(i你必须对它进行基准测试。 但影响结果的因素有多种,如:

  • 分支预测。检查某些条件比其他条件花费更少
  • 编译器优化。很多时候,数组上的循环被展开,实际上,对循环条件的比较不到n次

另外,正如人们在评论中提到的,您的算法必须对数组进行变异(通常不好),并且必须为sentinel保留特殊值(并非总是可能的)。因此,优化的真正好处实际上可以忽略不计。

是的,但并不总是可能有一个哨兵,因此它不是一个普遍适用的算法。你能给我建议这样的情况吗?无聊的实际原因。以这种方式修改多线程上下文中的共享数组不安全。或者该数组实际上可能是只读的有些原因。