清华学弟函数攻略:一文讲透WPS表格函数二分法(上)

清华学弟任泽岩
清华学弟任泽岩

2024年03月优秀创作者

今天我们开启一个新的系列,探究一下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办公】系列

教你一句话找到本次成绩的班级前三名的同学

教你一句话规范身份证号和手机号填写

WPS AI版本体验测评(表格篇)

【菁培班-函高一期PK赛】系列

排序功能平替,等你来设计!

兄弟们,抽奖啦~!

标记正确选项

快来绘制你的专属圣诞树啪

【学习感悟】系列

梦想金山,生生不息——民航小哥的KCT认证备战日记

【我和WPS那些事儿】生生不息,再造未来——一位打工人读者的思考

辽宁省
浏览 1005
收藏
12
分享
12 +1
4
+1
全部评论 4
 
任泽岩
感谢大家的支持!
· 中国
1
回复
 
张俊
张俊

社区优秀创作者

泽岩师兄厉害,把二分法讲的如此通俗易懂!
· 贵州省
回复
 
阿滨
阿滨

社区优秀创作者

我出3个6
· 江苏省
1
回复
张俊
张俊

社区优秀创作者

滨哥,我出3个9,管上!救救我吧,二分法太难了,我学不会啊!
· 贵州省
回复