App Inventor 2 算法之二分算法(Binary Search)实现,快速查找定位

简介: 二分算法(Binary Search)是生活中非常常用的折半算法,能解决快速查找、快速定位的问题,主要用到数学和逻辑代码块。本示例程序演示了采用普通遍历的方式和二分的方式分别需要几次能够猜中随机给出的数字。

应用介绍

二分算法(Binary Search)是生活中非常常用的折半算法,能解决快速查找、快速定位的问题,主要用到数学和逻辑代码块。

本示例程序演示了采用普通遍历的方式和二分的方式分别需要几次能够猜中随机给出的数字。
截图

二分算法(Binary Search)教程(难度系数:★★☆)

教程入口:App Inventor 2 中文网(fun123.cn) -> 登陆 -> “项目指南” -> 二分算法(BinarySearch)"开始学习"。

App基本逻辑设计

  1. 设计一个普通遍历算法,从 1 开始逐个往上猜,这也是最笨的一种方式,当然最终能够猜对,当随机数是100时,最多需要猜100次。
  2. 再设计一个二分算法,每次猜中间折半的结果,比如第一次猜50,如果小了则再猜75,如此直到不能再折半为止,也定能猜中。至于需要几次猜中,大家可以利用本示例程序进行验证,本教程最后会给出答案。

准备工作

  1. 界面简单布局,如下:

界面布局

  1. 让App程序从 1 ~ 100 中随机生成一个数字,定义一个空列表,设置到“列表显示框”组件中:

随机数及列表显示

普通遍历算法

普通遍历方式很简单,设计一个 1 ~ 100的循环,每次比对一下是否和上面的随机数相等,相等就是猜中了,就不用继续猜了。代码如下:

普通遍历方式

二分算法

二分方式代码如下:

二分方式

原理示意图如下:

binary search原理示意图

注意点:计算中间二分数字的时候,需要向下取整,否则计算出来的是小数,当然不是我们想要的,我们的前提是猜整数数字。

举个例子:

App随机给出的数字是17,我们依次猜的是:

  1. (1 +100)/2 = 50(大了) 1 50 100
  2. (1 +50)/2 = 25(大了) 1 25 50
  3. (1 +25)/2 = 13(小了) 1 13 25
  4. (13+25)/2 = 19(大了) 13 19 25
  5. (13+19)/2 = 16(小了) 13 16 19
  6. (16+19)/2 = 17(猜中) 16 17 19

开始测试

点击按钮开始测试,列表中会显示两种方式猜中需要的次数,二分的话还会输出每次猜的具体是哪个数字。

后记

测试下来,我们会发现,都是7次或7次之内就能猜中,其中的原理是什么呢?

算法复杂度是O(logN)。2^7 = 128 > 100,因此最多7次能猜中。大家可以思考并尝试一下将100改为1000,这时最多需要几次猜中?

不仅如此,在计算机科学中,二分算法(Binary Search)也是非常基础的算法,使用场景非常的多,有序表的检索、数据库索引技术等。

相关文章
|
2月前
|
机器学习/深度学习 传感器 算法
基于不变扩展卡尔曼滤波器RI-EKF的同时定位与地图构建SLAM算法的收敛性和一致性特性研究(Matlab代码实现)
基于不变扩展卡尔曼滤波器RI-EKF的同时定位与地图构建SLAM算法的收敛性和一致性特性研究(Matlab代码实现)
104 2
|
5月前
|
前端开发 定位技术
《仿盒马》app开发技术分享-- 定位获取(25)
上一节我们实现了地址管理页面的数据查询和展示,接下来我们要实现的功能是地址添加相关的,我们想实现的功能是地图选点,那么在地图选点之前我们要做的就是先获取用户当前的定位。获取定位后我们拿到经纬度和其他信息,然后在对应的地图上展示。
131 0
|
7月前
|
监控 C#
【Function App】如果一个拥有多个Function App的Plan遇见了High CPU问题? 如何方便定位是哪一个Function App引发的呢?
在Azure Function App测试中,若多个Function App共用同一App Service Plan资源,当出现High CPU问题时,由于Function App公开指标无法直接观测CPU状态,可通过启用Application Insights解决。其Live Metrics功能可过滤并查看每个Function App的CPU使用情况。具体步骤为:将所有Function App连接至同一Application Insights资源,进入Live Metrics页面按Role筛选监控数据。附有三段C#代码示例,分别展示占用CPU、Memory及普通功能的实现方法。
217 36
|
8月前
|
算法 数据安全/隐私保护 计算机视觉
基于sift变换的农田杂草匹配定位算法matlab仿真
本项目基于SIFT算法实现农田杂草精准识别与定位,运行环境为Matlab2022a。完整程序无水印,提供详细中文注释及操作视频。核心步骤包括尺度空间极值检测、关键点定位、方向分配和特征描述符生成。该算法通过特征匹配实现杂草定位,适用于现代农业中的自动化防控。
|
11月前
|
算法 物联网 5G
UWB定位的7种算法
UWB定位系统基于超宽带技术,通过纳秒级脉冲实现高精度厘米级甚至毫米级定位。其7种主要算法包括:1) TOA(到达时间),利用信号传播时间计算距离;2) TDOA(到达时间差),通过多个基站的时间差确定位置;3) RSSI(接收信号强度),估算距离但精度较低;4) AOA(角度到达),测量信号入射角度;5) 混合算法,结合多种算法提高精度;6) 最小二乘法,处理多基站数据减少误差;7) 卡尔曼滤波,动态跟踪目标位置;8) 粒子滤波,适应复杂非线性环境。这些算法各具特点,适用于不同场景,如工业制造、智能仓储和室内定位等。
862 11
|
11月前
|
机器学习/深度学习 前端开发 算法
婚恋交友系统平台 相亲交友平台系统 婚恋交友系统APP 婚恋系统源码 婚恋交友平台开发流程 婚恋交友系统架构设计 婚恋交友系统前端/后端开发 婚恋交友系统匹配推荐算法优化
婚恋交友系统平台通过线上互动帮助单身男女找到合适伴侣,提供用户注册、个人资料填写、匹配推荐、实时聊天、社区互动等功能。开发流程包括需求分析、技术选型、系统架构设计、功能实现、测试优化和上线运维。匹配推荐算法优化是核心,通过用户行为数据分析和机器学习提高匹配准确性。
816 4
|
搜索推荐 算法 Java
现有一个接口DataOperation定义了排序方法sort(int[])和查找方法search(int[],int),已知类QuickSort的quickSort(int[])方法实现了快速排序算法
该博客文章通过UML类图和Java源码示例,展示了如何使用适配器模式将QuickSort类和BinarySearch类的排序和查找功能适配到DataOperation接口中,实现算法的解耦和复用。
191 1
现有一个接口DataOperation定义了排序方法sort(int[])和查找方法search(int[],int),已知类QuickSort的quickSort(int[])方法实现了快速排序算法
|
机器学习/深度学习 算法 文件存储
【博士每天一篇文献-算法】 PNN网络启发的神经网络结构搜索算法Progressive neural architecture search
本文提出了一种名为渐进式神经架构搜索(Progressive Neural Architecture Search, PNAS)的方法,它使用顺序模型优化策略和替代模型来逐步搜索并优化卷积神经网络结构,从而提高了搜索效率并减少了训练成本。
317 9
|
网络协议 物联网 测试技术
App Inventor 2 MQTT拓展入门(保姆级教程)
本文演示的是App和一个测试客户端进行消息交互的案例,实际应用中,我们的测试客户端可以看着是任意的、支持MQTT协议的硬件,通过订阅及发布消息,联网硬件与我们的App进行双向数据通信,以实现万物互联的智能控制效果。
940 2
|
存储 算法 调度
基于和声搜索算法(Harmony Search,HS)的机器设备工作最优调度方案求解matlab仿真
通过和声搜索算法(HS)实现多机器并行工作调度,以最小化任务完成时间。在MATLAB2022a环境下,不仅输出了工作调度甘特图,还展示了算法适应度值的收敛曲线。HS算法模拟音乐家即兴创作过程,随机生成初始解(和声库),并通过选择、微调生成新解,不断迭代直至获得最优调度方案。参数包括和声库大小、记忆考虑率、音调微调率及带宽。编码策略将任务与设备分配映射为和声,目标是最小化完成时间,同时确保满足各种约束条件。

热门文章

最新文章

下一篇
oss云网关配置