Algorithm 线性搜索优化-切割计算数量

Algorithm 线性搜索优化-切割计算数量,algorithm,linear-search,Algorithm,Linear Search,我想知道-是否有可能改进线性搜索算法(在数组上,而不是列表上),这样它可以完成大约一半的计算 例如,这是基本的线性搜索算法: i <- 1 while i<=length[a] && a[i]!=v do i <- i+1 if i>length[a] then return NIL else return i i首先,n/2仍然是O(n)。其次,如果搜索的元素在一个数组中,并且数组中的所有数字都是不同的(如果存在重复,比

我想知道-是否有可能改进线性搜索算法(在数组上,而不是列表上),这样它可以完成大约一半的计算

例如,这是基本的线性搜索算法:

i <- 1
while i<=length[a] && a[i]!=v
     do i <- i+1
if i>length[a]
     then return NIL
      else return i
i首先,n/2仍然是O(n)。其次,如果搜索的元素在一个数组中,并且数组中的所有数字都是不同的(如果存在重复,比较的次数甚至更小),那么比较的次数:

1/(n-1)*1 + 1/(n-1)*2 +...+ 1/(n-1)*n-1 = 1/(n-1)*(1+2+...+n-1) = 1/n*(n*(n-1)/2) = (n-1)/2
但如果搜索的元素不在数组中,则需要使用数组中不同元素的数量除以所有可能对象/数量,而不是1/n因子。如果比率非常小,则很可能需要遍历整个数组以检查它是否为数组,因此需要进行几乎n次比较。在这里,如果从底层宇宙中提取的数组中的元素不一致,分析可能会变得复杂