线性搜索优化 - 减少计算次数

Posted

技术标签:

【中文标题】线性搜索优化 - 减少计算次数【英文标题】:linear search optimization - cutting number of calculations 【发布时间】:2018-04-01 12:26:59 【问题描述】:

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

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

i <- 1
while i<=length[a] && a[i]!=v
     do i <- i+1
if i>length[a]
     then return NIL
      else return i

现在,如果它已排序,据我所知,我们可以使用二进制排序或使用上限函数进行大约一半的计算。但是如果给定数组的算法没有排序——我们可以做大约一半的计算吗?

如果我计算正确,预期的计算次数是 (n-1)(n+2)/2n,而最坏的情况是 n-1

是否可以将计算次数减少一半左右?

注意:使用哨兵可能会改善一点,但仍不会将其减少到大约一半的计算量

非常感谢您的帮助

【问题讨论】:

【参考方案1】:

首先,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 次比较。如果从底层宇宙中提取的数组中的元素不均匀,则分析可能会很复杂。

【讨论】:

以上是关于线性搜索优化 - 减少计算次数的主要内容,如果未能解决你的问题,请参考以下文章

搜索引擎优化 TF_IDF之Java实现

性能优化小册 - React 搜索优化:防抖缓存LRU

搜索引擎优化中的代码优化怎么做?

线性规划(LP)基本概念和搜索算法

网站性能优化

SPFA算法