二分法详解:用生活例子 + 图示

二分法详解:用生活例子 + 图示

一、什么是二分法?

核心思想 :不断"对半砍",缩小范围,快速定位目标。

生活比喻:

就像猜数字游戏(1~100之间):

你猜50,对方说"大了",就砍掉后半部分(51->100),在1~49继续猜。

每次排除一半的错误答案,快速逼近正确数字。

二、二分法工作原理(看图说话)

前提条件 :数据必须排好顺序(从小到大或从大到小)

步骤分解:

确定搜索范围 :初始化左(left)、右(right)边界。

取中间值 :mid = (left + right) // 2。

判断方向 :

如果 mid 是目标,直接返回。

目标值 > mid → 扔掉左半边 (left = mid + 1)

目标值

重复切分:在剩下的半区继续对半分,即重复以上步骤 , 直到找到目标或范围为空。

图示过程(找数字7):

python

复制代码

初始范围: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], 目标=7

第1步: mid=5 → 5<7 → 砍左半边 [6,7,8,9,10]

第2步: mid=8 → 8>7 → 砍右半边 [6,7]

第3步: mid=7 → 找到目标!

代码示例:

python

复制代码

def binary_search(arr, target):

left, right = 0, len(arr) - 1

while left <= right:

mid = (left + right) // 2

if arr[mid] == target:

return mid # 找到目标,返回索引

elif arr[mid] < target:

left = mid + 1 # 砍左半边

else:

right = mid - 1 # 砍右半边

return -1 # 未找到

# 示例

arr = [1, 3, 5, 7, 9]

print(binary_search(arr, 7)) # 输出: 3

三、实际生活案例

案例1:网购筛选

你想买100-200元的运动鞋:

按价格排序所有鞋子

先看中间价150元的鞋子

觉得贵了 → 只看100-150元的

再看125元的 → 正好合适!

省去翻看几百件商品的麻烦

案例2:猜价格

商场"猜商品价格"活动(价格0-1000元):

你猜500 → 主持人说"高了"

猜250 → "低了"

猜375 → "中了"

每次砍掉一半错误选项,最快6次必中(2^10=1024>1000)

四、常见应用场景

场景

具体例子

优势

有序数据查找

电话簿找联系人/字典查单词

比逐页翻快10倍

数值计算

求平方根(如√2=1.414...)

精确到小数点后10位仅需30步

故障诊断

Git二分定位bug/软件版本排查

1小时解决需1天的问题

日常决策

找合适房价/确定旅行预算范围

避免盲目尝试

游戏开发

地形生成/碰撞检测

实时处理百万级数据

计算机科学

在有序数组中快速查找数据

10亿数据只需30步就能找到

金融投资

确定合理股价区间

避免盲目猜测,科学决策

五、二分法的强大之处

效率对比:

暴力搜索:1000个数据最多查1000次

二分查找:1000个数据最多查10次(2^10=1024)

10亿数据:仅需30次!(2^30≈10亿)

注:数据量越大越高效

生活类比:

暴力搜索:像在没分类的衣柜里找一件衣服 → 可能翻遍整个衣柜

二分法:像在整理好的衣柜里找衣服 → 先排除所有非目标区域

六、使用前提

必须有序:就像图书馆的书要按编号排好

可比较大小:数据能判断"大于/小于"关系

不适合场景:

未排序的数据(如杂乱的书桌)

模糊匹配(如"找长得像明星的人")

数据量很小(3-5个元素)

七、动手实践:猜数字游戏

游戏规则:

我想一个1-100的数字(比如73)

使用二分法猜

我会提示"大了"或"小了"

游戏过程:

python

复制代码

你猜50(中间值) → 我说"小了"(73>50) → 范围缩小到51-100

你猜75(51-100中间) → 我说"大了"(73<75) → 范围缩小到51-74

你猜62(51-74中间) → 我说"小了"(73>62) → 范围缩小到63-74

你猜68(63-74中间) → 我说"小了"(73>68) → 范围缩小到69-74

你猜71(69-74中间) → 我说"小了"(73>71) → 范围缩小到72-74

你猜73 → 正确!

只需6步就猜中,最多也只需7步!

总结

二分法 = 有序数据 + 对半排除

核心价值:把大海捞针变成游泳池捞针

适用场景:任何需要"快速定位"的场景

最大优势:数据量越大,效率优势越惊人!

记住这个口诀:"排好序,取中间,砍一半,重复干"

相关文章

lol一个炮车多少钱
365bet注册送35元

lol一个炮车多少钱

📅 12-21 👀 308
数据恢复最多能恢复多久的?
365提款不到账的吗

数据恢复最多能恢复多久的?

📅 06-30 👀 5610