NO.2 二分法猜数字

二分法


第2篇个人博客
在这里插入图片描述


在这里插入图片描述
2023/10/16


1. 如何理解二分法

a.死板的解释

二分法,也称为二分查找,是一种在有序数据集中查找特定值的快速方法。它的思想是将数据集分成两半,然后确定目标值可能在哪一半,从而将搜索范围减半。这个过程不断重复,直到找到目标值或者确定它不存在。

b.通俗易懂的例子

假设你有一本电话号码的电话簿,你想查找其中一个特定的名字。你可以使用二分法来进行查找。

  • 打开电话簿的中间页,看名字的第一个字母。现在,你知道你要找的名字是在这个字母之前还是之后。

  • 如果名字在这个字母之前,你将把电话簿的后半部分撕掉,只保留前半部分。

  • 如果名字在这个字母之后,你将把电话簿的前半部分撕掉,只保留后半部分。

重复这个过程,不断缩小查找范围,直到你找到了名字,或者确定名字不在电话簿中。

二分法的工作方式:将问题分成两半,然后根据你找到的信息继续缩小搜索范围,直到找到答案或确定答案不存在。

2.二分法的使用条件:

a.有序数据集:

二分法只适用于有序的数据集,无论是升序还是降序。因为它利用了数据的有序性质,可以快速缩小搜索范围。

b.可比性:

元素之间必须具有可比性。这意味着你可以比较两个元素,确定一个是否大于、小于或等于另一个。

c.单一目标:

二分法适用于查找单一目标,即要么目标存在于数据集中,要么不存在。它不适用于查找多个目标或范围。

d.随机访问能力:

二分法通常要求能够随机访问数据集中的元素,这意味着你可以直接访问数据集中的任何元素,而不需要按顺序逐个查找。

e.不适用于频繁插入/删除:

如果你的数据集需要频繁插入或删除元素,二分法可能不是最佳选择。因为插入/删除操作可能会破坏数据的有序性,需要维护数据集的有序性。

f.适用于大数据集:

二分法在大型数据集中特别有用,因为它可以在较少的比较操作中快速找到目标,相对于线性搜索(逐个查找)来说效率更高。

3.来写代码

题目:

二分查找猜数字游戏

其中你要猜测一个介于某个范围内的数字。这个游戏的目标是在最少的猜测次数内猜到正确的数字。
(假设要猜的数字范围是1到100)

策略

1.初始化数字范围:最开始,假设数字在1到100之间。

**2.猜测数字:**取当前范围的中间值作为猜测的数字。

3.检查猜测结果:

  • 如果猜测的数字正确,游戏结束。
  • 如果猜测的数字比目标数字小,更新范围为中间值加一到当前范围的最大值。
  • 如果猜测的数字比目标数字大,更新范围为当前范围的最小值到中间值减一。
  • 重复步骤2和3,直到猜中目标数字。

C语言示例

#include <stdio.h>

int main() {
    int low = 1;          // 最小范围
    int high = 100;       // 最大范围
    int targetNumber = 73; // 要猜的目标数字
    int guess;

    printf("猜数字游戏开始!\n");

    while (1) {
        // 二分查找
        guess = (low + high) / 2;

        // 输出猜测的数字
        printf("我猜数字是: %d\n", guess);

        // 判断猜测结果
        if (guess == targetNumber) {
            printf("猜中了,目标数字是: %d\n", guess);
            break;
        } else if (guess < targetNumber) {
            low = guess + 1;
        } else {
            high = guess - 1;
        }
    }

    return 0;
}


在这里插入图片描述


  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

于舟YUZHOU

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值