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

本文介绍了二分算法的概念及其在解决快速查找问题上的优势。通过一个猜数字的游戏示例,展示了普通遍历和二分搜索的区别,其中二分算法最多7次即可猜中100以内的数字,其时间复杂度为O(logN)。此外,文章鼓励读者思考二分算法在更大规模问题(如1000)中的应用,并提到该算法在计算机科学中的广泛用途,如有序表检索和数据库索引。
摘要由CSDN通过智能技术生成

应用介绍

二分算法(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的循环,每次比对一下是否和上面的随机数相等,相等就是猜中了,就不用继续猜了。代码如下:

二分算法

二分方式代码如下:

原理示意图如下:

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

举个例子:

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AI2中文网

真诚赞赏,手留余香

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值