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)也是非常基础的算法,使用场景非常的多,有序表的检索、数据库索引技术等。

相关文章
|
4月前
|
搜索推荐 算法 Java
现有一个接口DataOperation定义了排序方法sort(int[])和查找方法search(int[],int),已知类QuickSort的quickSort(int[])方法实现了快速排序算法
该博客文章通过UML类图和Java源码示例,展示了如何使用适配器模式将QuickSort类和BinarySearch类的排序和查找功能适配到DataOperation接口中,实现算法的解耦和复用。
49 1
现有一个接口DataOperation定义了排序方法sort(int[])和查找方法search(int[],int),已知类QuickSort的quickSort(int[])方法实现了快速排序算法
|
4月前
|
机器学习/深度学习 算法 文件存储
【博士每天一篇文献-算法】 PNN网络启发的神经网络结构搜索算法Progressive neural architecture search
本文提出了一种名为渐进式神经架构搜索(Progressive Neural Architecture Search, PNAS)的方法,它使用顺序模型优化策略和替代模型来逐步搜索并优化卷积神经网络结构,从而提高了搜索效率并减少了训练成本。
61 9
|
4月前
|
网络协议 物联网 测试技术
App Inventor 2 MQTT拓展入门(保姆级教程)
本文演示的是App和一个测试客户端进行消息交互的案例,实际应用中,我们的测试客户端可以看着是任意的、支持MQTT协议的硬件,通过订阅及发布消息,联网硬件与我们的App进行双向数据通信,以实现万物互联的智能控制效果。
216 2
|
7月前
|
缓存 算法 C语言
【C++ 标准查找算法 】C++标准库查找算法深入解析(In-depth Analysis of C++ Standard Library Search Algorithms)
【C++ 标准查找算法 】C++标准库查找算法深入解析(In-depth Analysis of C++ Standard Library Search Algorithms)
105 0
|
4月前
|
存储 算法 调度
基于和声搜索算法(Harmony Search,HS)的机器设备工作最优调度方案求解matlab仿真
通过和声搜索算法(HS)实现多机器并行工作调度,以最小化任务完成时间。在MATLAB2022a环境下,不仅输出了工作调度甘特图,还展示了算法适应度值的收敛曲线。HS算法模拟音乐家即兴创作过程,随机生成初始解(和声库),并通过选择、微调生成新解,不断迭代直至获得最优调度方案。参数包括和声库大小、记忆考虑率、音调微调率及带宽。编码策略将任务与设备分配映射为和声,目标是最小化完成时间,同时确保满足各种约束条件。
|
5月前
|
JSON API 数据格式
App Inventor 2 天气预报App开发 - 第三方API接入的通用方法
通过调用第三方天气api,填入必要的参数,通过Web客户端请求url。返回json格式的数据结果,使用AppInventor2解析json结果,显示到App上即可。
150 5
|
5月前
|
机器学习/深度学习 搜索推荐 算法
利用机器学习算法增强IAA广告定位和预测:实现个性化广告投放以最大化收益
【7月更文第30天】在当今高度竞争的移动应用市场中,应用内广告(IAA)是许多开发者获取收入的重要途径之一。然而,传统的广告推送方式往往忽略了用户的个体差异性,导致广告效果不佳。通过运用机器学习技术,我们可以更准确地理解用户偏好,从而实现个性化的广告推送。
343 0
|
5月前
|
存储 物联网 数据库
App Inventor 2 低功耗蓝牙 BlueToothLE 拓展中文文档(完整翻译加强版)
低功耗蓝牙,也称为蓝牙LE 或简称 BLE,是一种类似于经典蓝牙的新通信协议,不同之处在于它旨在消耗更少的功耗和成本,同时保持同等的功能。 因此,低功耗蓝牙是与耗电资源有限的物联网设备进行通信的首选。
180 0
|
6月前
|
搜索推荐
App Inventor 2 列表排序,函数式编程轻松实现高级排序算法
本文探讨了列表的函数式编程高级用法,允许根据自定义逻辑进行排序。不仅支持基本数据类型(文本和数字)的升序和降序排序,还能处理复杂结构类型中特定元素的排序。通过示例展示了如何定义比较函数来实现升序和降序,简化了排序操作。
68 0
|
6月前
|
存储 算法 Java
Java查找算法概览:二分查找适用于有序数组,通过比较中间元素缩小搜索范围;哈希查找利用哈希函数快速定位,示例中使用HashMap存储键值对,支持多值关联。
【6月更文挑战第21天】Java查找算法概览:二分查找适用于有序数组,通过比较中间元素缩小搜索范围;哈希查找利用哈希函数快速定位,示例中使用HashMap存储键值对,支持多值关联。简单哈希表实现未涵盖冲突解决和删除操作。
63 1