本帖最后由 chrisfang 于 2014-3-13 15:01 编辑
LOOKUP函数遵循二分法的查找算法进行运算已经是许多人都了解的知识,提到二分法的具体算法时,经常会引用下面这张流程图:
流程图比较抽象,不太容易理解,所以尝试用其他方法再进一步阐释一下二分法算法。
首先是对算法的文字总结:
1, 将查找值与目标向量中的“中位值”进行对比 2, 大于中位值时,以中位作为边界,继续在其右侧取新的中位值继续对比 3, 小于中位值时,以中位作为边界,继续在其左侧取新的中位值继续对比 4, 等于中位值时,依次判断其右侧数值是否继续相等,直到不相等时返回最后一个相等的数值 5, 当中位位置与边界重叠时,中止对比,此时如果查找值大于中位值,则返回中位值;如果查找值小于中位值,则返回中位左侧数值。如果左侧数值不存在,返回#N/A 6, 当目标向量中包含错误值时,忽略错误值,在其右侧继续对比
注:上面提到的“中位值”指的是目标数组中位置居中的数据(数据个数为偶数时,中位等于个数除以2;数据个数为奇数时,中位等于<个数+1>除以2),与统计学上传统意义上的中位值不完全相同
再配合下面两张运算过程图加深理解:
最后再附上一个自动演示查找运算过程的Excel文档:
希望通过以上这些方式,能够更方便大家理解二分法查找策略。
|