出个小题考考你,看你能做对几道?

人物速写

前言

LOOKUP函数有两种形式,一种是向量形式,一种是数组形式

函数 LOOKUP 的向量形式是在单行区域或单列区域(向量)中查找数值,然后返回第二个单行区域或单列区域中相同位置的数值;

函数 LOOKUP 的数组形式在数组的第一行或第一列查找指定的数值,然后返回数组的最后一行或最后一列中相同位置的数值。

向量形式:公式为 = LOOKUP(lookup_value,lookup_vector,result_vector)

数组形式:公式为= LOOKUP(lookup_value,array)

不管是那种形式,都要求第二个参数LOOKUP_vector 或ARREY的数值必须按升序排序:...、-2、-1、0、1、2、...、A-Z、FALSE、TRUE;否则,函数 LOOKUP 不能返回正确的结果。文本不区分大小写。

那么第二个参数不按升序排列会返回什么结果呢?为什么前几期讲的取最后符合条件的值或把中英文分开并没有按升序排序,却会得到正确的结果,这里面到底存在哪些不为人知的秘密?会产生什么严重的后果?它的内部运行机制是什么?

我们先通过几个选择题看看大家的判断?

如下图所示:A2:A7为班级,B2:B7为数量,用LOOKUP函数求D2对应的数量,公式见下图:E2=LOOKUP(D2,A2:A7,B2:B7)

先不看答案,经过多次研究和查证,LOOKUP查找使用的是二分法技术。

二分法简介:

二分法是一种快速查找技术,基本思想是:假设数据是按升序排序的,对于给定值x,从序列的中间位置开始比较,如果当前位置值等于x,则查找成功;若x小于当前位置值,则在数列的前半段中查找;若x大于当前位置值则在数列的后半段中继续查找,以此类推,每次排除一半,直到找到为止。

举例:如果在1到100之间猜某个数字,我们会问:大于50,还是小于50,如果大于50,可以继续问大于75,还是小于75,如果小于75,可以继续问,直到找到答案。

因此如果不按从小到大的顺序排列,返回的结果,真的不一定是我们所需要的。但查找一个很大的数值时,肯定会返回最后一个数值,大家可以证明一下!

你的答案是多少?欢迎留言!


END

(0)

相关推荐