清华学弟函数攻略:一文讲透WPS表格函数二分法(上)
创作者俱乐部成员
今天我们开启一个新的系列,探究一下WPS表格函数二分法的计算原理与实际应用。
我们之前的帖子中有用到XLOOKUP函数,该函数有6个参数,其中包括3个必要参数和3个选用参数(函数说明中带有"[ ]"标记的即为选用参数)。鉴于该函数的强大,我们只是使用了XLOOKUP的3个必要参数就解决了案例问题,那么3个选用参数又有什么奥秘呢?
[匹配模式]和[搜索模式]两个参数帮助我开启了一闪大门,让我知道了“二分法”的概念。
XLOOKUP函数中提供了非常全面的搜索方式,我们先来看一个相对基础的函数LOOKUP。这个函数相对来说有一些“呆板”,而这正好为我们研究“二分法”提供了便利。等大家学完(上、下)两部分教程以后,自然就会体会到XLOOKUP的多个模式的功能强大啦。
LOOKUP函数的语法结构很简单,就是根据在指定数组中查找某个值(1个或多个),返回被查找的数组值(第三参数忽略)或相应的其他数组值(第三参数写内容),是一个基础的查找函数。LOOKUP最吸引人的地方在于,它的[匹配模式]为“返回小于等于查找值的最大值”,它的[搜索模式]为“二分法(升序排序)”。
有点绕?我们来看一个基础案例:
我们是某组织的会员(饭店储值卡、游戏练级,甚至是WPS社区),根据不同的经验值,匹配一定的等级。假设我们当前的经验值是98,那么我们的等级就应该是第9级(因为升级到第10级需要100经验值,98<100)。我们可以写这样的公式:
=LOOKUP(E3,C3:C17,B3:B17)
回车后,我们发现结果为“第9级”。
****(正片开始)****
接下来我们看一下LOOKUP是怎么使用“二分法(升序排序)”“找”到这个第9级的。
首先我们确认等级数是升序排序的,这一点非常非常重要!
然后介绍一下中位数的概念:
中位数=INT((被查找数组的个数+1)/2)
例如:
数组数为10个,那么中位数=取整(10+1)=取整(5.5)=5
数组数为11个,那么中位数=取整(11+1)=取整(6)=6
速算方法:
数组数为偶数,那么中位数为一半对应的值;
数组数为奇数,那么中位数为最中间的值。
LOOKUP历经四轮二分法,找到了81这个数,然后返回对应的“第9级”。
是不是很神奇,哈哈!一定要确认,被查找的数组要升序排序,我前面说LOOKUP函数“呆板”就呆板在这里,它只认“升序数组”!
因此,像下图这种绩效发放、个税扣除、阶梯电价、会员等级、游戏经验值、出租车计时收费等“分段的常数函数”,LOOKUP都能很好地解决:
即使是精确匹配,LOOKUP函数也严格按照二分法的流程来进行:
这里面有个很有趣的现象,即使后台找到了36,算法也没有结束。
大家可以试着做一个小练习:当有源数据表中有好几个36的时候,会返回那个等级?
你的答案是:___________。
思路分析:
大家前两轮二分法应该没有问题了吧?
第3轮和第4轮,尽管已经“找到了”查找值,但都是不断地在向下继续尝试找到那个“最大的”,而把当前的查找值“待定”,一旦找到了比“待定”值“更大的”精确匹配值,就会把之前“待定”的值丢弃。
因此,正确答案是:第7级。你答对了吗?
大家发现了吗?利用这个原理,我们可以大胆推测:
当有众多精确匹配的查找值时,LOOKUP函数将返回“最下方”的那个精确匹配值。
所以,我们也可以利用这一点,在学生成绩单中,找到某个学生最后一次考试的分数:
是不是特别酷炫!
好了,以上就是教程(上)集的全部内容,在(下)集中,我们继续对二分法的原理进行探讨,我还会为大家分析为什么要使用这种“二分法”。链接请点击:
清华学弟函数攻略:一文讲透WPS表格函数二分法(下)
https://home.wps.cn/topic/8769
下面是今天练习文档的链接:
【金山文档】 一文讲透WPS表格函数二分法
https://kdocs.cn/l/cnmNsFwMn87y
(上、下)集的文档是同一个,大家下载一个即可。
为不影响社区其他用户查看初始文件,我关闭了在线协作的功能。大家可以将文档下载到本地,自由操作练习哦!
如果你觉得今天的教程对你有帮助,欢迎在下方为我点一颗小红心💖💖💖哦!
同时,你也可以将感悟或者收获在下方留言,或者在评论区留下你的困惑,我会挑选有代表性的问题,推出更多的教程跟大家分享哦!
祝大家国庆节快乐!
欢迎大家阅读我的其他文章:
✅【动态数组灰度测试】系列
动态数组行业案例:使用SEQUENCE/FILTER函数 × 动态数组 搞定三大高频场景
动态数组行业案例:使用SORTBY函数 × 动态数组 制作多功能成绩单
动态数组行业案例:使用UNIQUE函数 × 动态数组 多场景全能应用
动态数组行业案例:使用SEQUENCE函数 × 动态数组 生成动态序号
动态数组行业案例:使用XLOOKUP × 动态数组 实现金牌查找(上)
动态数组行业案例:使用XLOOKUP × 动态数组 实现金牌查找(下)
动态数组行业案例:使用RANDARRAY × 动态数组 解决授课案例问题
动态数组行业案例:使用INDIRECT函数 × 动态数组制作二级下拉菜单
✅【WPS AI办公】系列
✅【菁培班-函高一期PK赛】系列
✅【学习感悟】系列
WPS函数专家
社区优秀创作者
WPS函数专家