1. 插值查找:在介绍插值查找之前,首先考虑一个新问题,为什么上述算法一定要是折半,而不是折四分之一或者折更多呢?打个比方,在英文字典里面查“apple”,你下意识翻开字典是翻前面的书页还是后面的书页呢?如果再让你查“zoo”,你又怎么查?很显然,这里你绝对不 会从中间开始查起,而是有一定目的的往前或往后翻。同样的,比如要在取值范围1~10000之间100个元素从小到大均匀分布的数组中查找5,我们自然会考虑从。数组下标较小的开始查找。
经过以上分析,折半查找这种查找方式,不是自适应的(也就是说是傻瓜式的)。二分查找中查找点计算如下:mid = (low + high ) / 2,即mid = low + 1 / 2 * ( high - low )。
通过类比,我们可以将查找的点改进为如下:mid = low + ( key-a[low] ) / ( a[high]-a[low] ) = ( high-low )。
2. 插值查找的的时间复杂度:插值查找的的时间复杂度为O( log( logn ) )。
3. 插值查找的要点:

插值查找是一种改进的查找算法,适用于有序且元素均匀分布的数组。它根据目标值与数组边界值的关系,计算出更接近目标的查找点,从而提高查找效率。相比于折半查找,当数据分布均匀时,插值查找平均性能更优,但若数据分布不均,其效果可能不如折半查找。该算法的时间复杂度为O(log(logn))。
最低0.47元/天 解锁文章
288

被折叠的 条评论
为什么被折叠?



