0

0

Excel函数学习之LOOKUP函数的二分法原理

青灯夜游

青灯夜游

发布时间:2022-08-10 20:10:14

|

4297人浏览过

|

来源于部落窝教育

转载

在之前的文章《excel函数学习之lookup函数的5种用法》,我们了解了lookup函数的5种用法,估计有很多小伙伴都没看懂,今天给大家细致的讲解一下lookup的二分法原理,了解原理后,再返回去看昨天的教程,相信你会对lookup有别样的理解。

Excel函数学习之LOOKUP函数的二分法原理

在之前的文章中,咱们学习了LOOKUP函数的各种套路,也多次提到了LOOKUP函数的查找是根据二分法来进行的,那么到底什么是二分法,今天就来聊聊这个问题。

还是用昨天的例子:按序号查找成绩,序号是升序排列的,公式=LOOKUP(J2,A2:D19)的结果正确。

1.png

一、二分法查找原理

二分法查找是把查找范围中的数据按照个数一分为二找到位于中间位置的一个数据,中间值,然后用我们的查找值和中间值做比较。当中间值等于查找值时,直接去获取结果;当中间值小于查找值时,则向下继续进行二分法查找比较(也就是在不含中间值在内的下方的那一半数据中继续进行二分法查找);当中间值大于查找值时,则向上继续进行二分法查找比较(也就是在不含中间值在内的上方的那一半数据中继续进行二分法查找)。如果如此二分到最后一个数据都未找到等于查找值的数据:最后一个数据小于查找值的,那就以最后一个数据的位置去获取结果值;最后一个数据大于查找值的,那就再向上找一个位置最靠近最后一个数据的小于或等于查找值的数据,再以这个数据的位置去获取结果。

只是这样解释估计很多朋友都会犯迷糊,我们结合上面的例子,具体看看如何通过序号5,找到语文成绩79的。

第一次比较:查找范围A2~A19一共18个数据,中间位置是18÷2=9,即中间值是A10单元格的9。显然查找值5小于9,所以继续向上在A2~A9中查找;

提示:如果查找范围数据个数是单数,中间位置就是(个数+1)÷2,例如11行的话,中间位置就是(11+1)÷2=6;如果数据个数是偶数,中间位置就是(个数)÷2。

2.png

第二次比较:只有8个数据,中间位置是8÷2=4,中间值是A5单元格的4,查找值5大于4,所以继续向下在A6~A9中找。注意此时下面只有四个数,第一次查找时直接将9下面的数据都排除了。

3.png

第三次比较:4个数据,中间值是A7的6,查找值5小于6,所以向上找。此时只剩下一个数据A6单元格的5,与查找值一致,因此就得到5所对应的D列数据79。

4.png

仅仅通过这样一个例子要想明白二分法是很困难的,我们再看一个例子。将上表中的数据按照成绩降序排列,还是按序号5查找语文成绩,公式不做修改。因为序号这一列的顺序乱了,不是升序排列,结果就出现了错误,实际是79,公式得到的是94,这是怎么回事呢?还是通过二分法来看看吧。

第一次查找:中间值(第9个数据)是18,查找值5小于18,因此向上在A2~A9中找;

5.png

第二次查找:上面的8个数据,中间值(第4个数据)是8,查找值5小于8,继续向上在A2~A4中找;

6.png

第三次查找:上面的3个数据,中间值是1,查找值5大于1,向下找:

7.jpg

第四次查找:现在只有A4单元格一个数据7,查找值5小于7,因此以7为参考,向上找一个位置最靠近7,同时数值小于5或者等于5的数据,即A3单元格的1,由此获得对应的语文值就是94。

通过这两个例子,我想大家对于二分法应该有了一定的认识,关于这个原理,在函数说明里只有一句话的介绍:

8.png

在实际应用中,我们可以不用去纠结二分法到底是怎么回事,中间位置是什么,该往下还是往上找,这都是函数的工作,我们只需要记住一点:数据一定要升序排列,如果不能升序排列,那么就按照LOOKUP的精确查找套路去设计公式

二、LOOKUP实现数据的四舍五入

二分法原理就介绍这么多,接下来需要解决之前遗留的两个问题。

在5月12日的文章中,我们用LOOKUP解决了一个四舍五入的问题,结果大家纷纷留言要个解释:

9.png

Article Forge
Article Forge

行业文案AI写作软件,可自动为特定主题或行业生成内容

下载

那么引起大家热议的这个公式到底是什么呢?看下图:

10.png

原来这个公式是用LOOKUP函数将一个数字百位以下全部舍去,实现了百分位取整。

在了解过二分法原理以后,是时候让LOOKUP还大家一个解释了。首先说明ROW(A:A)*100这部分。它其实就是得到了一组数字。为了让大家看明白,把A:A范围给小一点,我们用=ROW(A1:A31)*100作说明:

11.jpg

虽然单元格中只能看到一个100,实际上是31个数字,我们可以用f9功能键来看看具体内容:

12.jpg

ROW函数用于获取单元格的行号,ROW(A1:A31)*100就是用A1到A31单元格的行号分别乘以100,得到一组百位取整的数据{100;200;300;……3000;3100}。

然后LOOKUP上场了。它要在上述得到的已经百位取整的数组中查找A1。因为数组是按升序排列的,所以查找A1的实质就是在数组中找小于等于A1的最大值。

以2517.32为例,唯有2500是小于它的最大值,因此结果就是2500。有兴趣的朋友可以自己用二分法原理去试试,看看对不对。

其他数字的查找方式都是如此。这个公式之所以巧妙,就是把一个四舍五入的问题变成了查找引用的问题,真是妙!

三、LOOKUP进行数据提取

我们又利用LOOKUP进行数据的提取,因此有了一个5000字的约会:

13.jpg

这次又是什么问题呢?原题如图所示提取学号:

14.png

咱们用上图的第一个数据来解释。在N1单元格中输入“10张勇a”,然后在O1单元格中输入公式=-LOOKUP(1,-LEFT(N1,ROW(1:9)))提取学号。

15.jpg

LOOKUP不是引用函数吗,怎么又可以提取数字了?

LEFT函数的第二个参数使用了一个数组,ROW(1:9)相当于{1;2;3;4;5;6;7;8;9}。LEFT是把第一参数指定的数据从左边开始提取,提取的长度由第二参数来确定。 LEFT按照数组{1;2;3;4;5;6;7;8;9}提取,得到9个结果:

16.jpg

也就是从左边开始提取1位,2位……一直到9位。因为LEFT提取的结果都是文本类型,在LEFT前面加上负号,就可以把其中的文本型数字转为数值,文字变成错误值:

17.jpg

错误值被LOOKUP忽略,现在就变成了在{-1; -10}中找1。1比这组数据都大,根据二分法查找原理,二分后只能向下找,直到最后一位小于1的数据。因此,我们可以简单理解成:当查找值大于查找范围中所有数据(不管是否是升序排列)时,LOOKUP的实质就是在找最后一个数据。

其实将公式中的1变成0也是可以的,因为0也比所有的负数大:

18.jpg

当前最后一个数是-10,所以我们在LOOKUP前面再加个负号,就变成10了,也就是我们需要提取的数字。

对于初学者来说,以上两个案例中LOOKUP的用法过于高级,即便是通过这些介绍,估计也是一知半解,其实学习函数是有一个过程的,从不认识到了解,从了解再到掌握,这里需要大量的练习和思考。只要大家保持积极乐观的心态,能够体会到学习函数的乐趣的时候,就离成功不远了。

相关学习推荐:excel教程

相关文章

WPS零基础入门到精通全套教程!
WPS零基础入门到精通全套教程!

全网最新最细最实用WPS零基础入门到精通全套教程!带你真正掌握WPS办公! 内含Excel基础操作、函数设计、数据透视表等

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
C# ASP.NET Core微服务架构与API网关实践
C# ASP.NET Core微服务架构与API网关实践

本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

16

2026.03.11

Go高并发任务调度与Goroutine池化实践
Go高并发任务调度与Goroutine池化实践

本专题围绕 Go 语言在高并发任务处理场景中的实践展开,系统讲解 Goroutine 调度模型、Channel 通信机制以及并发控制策略。内容包括任务队列设计、Goroutine 池化管理、资源限制控制以及并发任务的性能优化方法。通过实际案例演示,帮助开发者构建稳定高效的 Go 并发任务处理系统,提高系统在高负载环境下的处理能力与稳定性。

23

2026.03.10

Kotlin Android模块化架构与组件化开发实践
Kotlin Android模块化架构与组件化开发实践

本专题围绕 Kotlin 在 Android 应用开发中的架构实践展开,重点讲解模块化设计与组件化开发的实现思路。内容包括项目模块拆分策略、公共组件封装、依赖管理优化、路由通信机制以及大型项目的工程化管理方法。通过真实项目案例分析,帮助开发者构建结构清晰、易扩展且维护成本低的 Android 应用架构体系,提升团队协作效率与项目迭代速度。

75

2026.03.09

JavaScript浏览器渲染机制与前端性能优化实践
JavaScript浏览器渲染机制与前端性能优化实践

本专题围绕 JavaScript 在浏览器中的执行与渲染机制展开,系统讲解 DOM 构建、CSSOM 解析、重排与重绘原理,以及关键渲染路径优化方法。内容涵盖事件循环机制、异步任务调度、资源加载优化、代码拆分与懒加载等性能优化策略。通过真实前端项目案例,帮助开发者理解浏览器底层工作原理,并掌握提升网页加载速度与交互体验的实用技巧。

95

2026.03.06

Rust内存安全机制与所有权模型深度实践
Rust内存安全机制与所有权模型深度实践

本专题围绕 Rust 语言核心特性展开,深入讲解所有权机制、借用规则、生命周期管理以及智能指针等关键概念。通过系统级开发案例,分析内存安全保障原理与零成本抽象优势,并结合并发场景讲解 Send 与 Sync 特性实现机制。帮助开发者真正理解 Rust 的设计哲学,掌握在高性能与安全性并重场景中的工程实践能力。

218

2026.03.05

PHP高性能API设计与Laravel服务架构实践
PHP高性能API设计与Laravel服务架构实践

本专题围绕 PHP 在现代 Web 后端开发中的高性能实践展开,重点讲解基于 Laravel 框架构建可扩展 API 服务的核心方法。内容涵盖路由与中间件机制、服务容器与依赖注入、接口版本管理、缓存策略设计以及队列异步处理方案。同时结合高并发场景,深入分析性能瓶颈定位与优化思路,帮助开发者构建稳定、高效、易维护的 PHP 后端服务体系。

420

2026.03.04

AI安装教程大全
AI安装教程大全

2026最全AI工具安装教程专题:包含各版本AI绘图、AI视频、智能办公软件的本地化部署手册。全篇零基础友好,附带最新模型下载地址、一键安装脚本及常见报错修复方案。每日更新,收藏这一篇就够了,让AI安装不再报错!

168

2026.03.04

Swift iOS架构设计与MVVM模式实战
Swift iOS架构设计与MVVM模式实战

本专题聚焦 Swift 在 iOS 应用架构设计中的实践,系统讲解 MVVM 模式的核心思想、数据绑定机制、模块拆分策略以及组件化开发方法。内容涵盖网络层封装、状态管理、依赖注入与性能优化技巧。通过完整项目案例,帮助开发者构建结构清晰、可维护性强的 iOS 应用架构体系。

222

2026.03.03

C++高性能网络编程与Reactor模型实践
C++高性能网络编程与Reactor模型实践

本专题围绕 C++ 在高性能网络服务开发中的应用展开,深入讲解 Socket 编程、多路复用机制、Reactor 模型设计原理以及线程池协作策略。内容涵盖 epoll 实现机制、内存管理优化、连接管理策略与高并发场景下的性能调优方法。通过构建高并发网络服务器实战案例,帮助开发者掌握 C++ 在底层系统与网络通信领域的核心技术。

33

2026.03.03

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Excel 教程
Excel 教程

共162课时 | 21.1万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.9万人学习

NumPy 教程
NumPy 教程

共44课时 | 3.7万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号