当你理解了查找的原理,你就可以更好地使用它。二分法原理,共同学习。
从一个例子开始:
[示例]在下图中,只有两个表的第五行中的成员名称不同。搜索b的消费金额时,显示结果不同,而a的消费金额直接出现在左侧。
公式显示:
B11=LOOKUP(A11,A2:B8)
E11=LOOKUP(D11,D2:E8)
当你理解了二分法,你就能理解为什么会出现上面的结果。
1.什么是二分法?
依次一个一个搜索是遍历的方法。二分法与之不同。顾名思义,它从二进制位置开始搜索,如果找不到,就从下一个二进制位置开始搜索,直到找到一个与它大小相同或更小的数字。
二、基本原则。
有两个原则。
1.二元位置的判断。
当总数为奇数时,二进制数字容易判断,中间数字就足够了。如果有7个数字(即函数的第二个参数),那么第4个数字就是中间的数字。
=LOOKUP(A11,A2:B8)
如果有12个数字,那么第六位是二进制的。有一个公式可以计算。
=INT((总行数1)/2)
2.确定搜索方向。
在二进制位置找不到接下来该怎么办?
如果最后一个二进制值大于搜索到的值,向上搜索并找出新的二进制值,直到找到相应的值。下图。
同样,如果该值小于搜索值,则继续向下搜索。
如果二进制值等于搜索到的值,则逐个向下检查,直到相邻且相等的值满足条件。
三.查找示例分析。
1.区间搜索。
【例1】下图是常用的区间搜索公式。350对应的佣金率是7%。
通过显示屏:
第一步:从第一个二进制位置(对应A4)开始,然后往下看200350。
第二步:如果第二个二进制位置(对应A6)的值是400350,查一下,只有A5的值是300。因为这个值小于350,所以B5是最终的搜索结果。
2.找到最后一个。
[示例2]如下所示,找出a的最后消耗量。
分析:
不能在这里直接用Lookup找b,否则按二进制搜索,结果可能不是最后一个。因此,合格的通过除以0变为0,不合格的变为误差值:
=0/(A2:A8=A11)
结果是
{0;0;#DIV/0!#DIV/0!0;#DIV/0!#DIV/0!}
因为lookup会过滤掉错误的值,所以在lookup看来,上面的数组是这样的:
{0;0;0}
然后用1找到最后一个0的位置。
=查找(1,0/(A2:A8=A11),B2:B8)
1是大于0的任何值。因为大于0,所以在二分法搜索时,总是向下搜索到最后一个值0。
Lookup的二分法搜索是跳转搜索。它总是认为要搜索的一组值是从小到大排列的。遇到小的就往下找大的,遇到大的就往上找小的。