插值算法的公式 mid=low+(key-a[low])/(a[high]-a[low])*(high-low) 是怎么来的

插值算法起始也算是二分法,只不过二分法是从中间分开,而插值算法的分开位置相较于中间更偏前或偏后一些。

有一个已排序好的数组array:low,high分别代表该数组的最初和最末的下标

二分法的中间数字的值:int middle = array[low] + array[(high+low)/2]

插值法的中间数字的值:

// 插值法:找到key的位置
int middle=array[low] + (key/(array[high]-array[low])) * (high - low)
/* array[high]-array[low]是这个数组的最高位和最低位的差
key/(array[high]-array[low])是这个key大约在这个数组的某个位置
因为array[high],array[low],key都是一个具体的数字
然后*(high-low),是因为high-low是这个数组的具体长度,乘以这个长度的结果就是key大约在这个数组的哪个位置,然后加上arry[low],就是这个
*/

相通这个就知道插值法的中间数字的下标的算法是怎么来的了。

原文地址:https://www.cnblogs.com/woyujiezhen/p/14517786.html