金衡数据 · 学习练习

从快递柜找号码,理解二分查找

大学计算机练习:按闭区间边界与向下取整规则选取中点。包含主问题、四层提示、答案、图解与一道举一反三练习,可按自己的节奏完整阅读。

大学计算机

先尝试回答主问题,再逐层阅读提示并核对答案。完成后,用举一反三检验方法能否用于另一组条件。学段仅供选题参考。

主问题:读条件,找方法

问题

快递柜的取件编号已按从小到大排列且互不重复,位置从1开始计数。目前候选范围是第 1 项到第 16 项,左右端点都包含。二分查找规定中间位置取 (左端点+右端点)÷2 后向下取整。第一轮应比较第几项?

候选位置区间:左右端点都包含116⋯ 中间位置? ⋯位置从1开始编号;居中位置有小数时向下取整。
图中标注:候选位置区间:左右端点都包含;1;16;⋯ 中间位置? ⋯;位置从1开始编号;居中位置有小数时向下取整。。(宽图可横向滑动查看。)

四层提示

  1. 第0层 零基础救生圈

    二分查找先找候选范围的中间位置。题目规定位置从1开始,两个端点相加后除以2,再向下取整。

  2. 第1层 生活场景建模

    想象一排按顺序排好的快递柜,先找到这排的中间一格;如果中间夹在两格之间,按题目规则选靠左的那格。

  3. 第2层 防坑雷达

    题目问的是第几项的位置,不是柜子上写的取件号码;不要从0开始数,也不要把小数往上取整。

  4. 第3层 解题实操

    第一步:把左右位置相加再除以2:(1+16)÷2=8.5。 第二步:按题目规定向下取整,得到8。 第三步:因此第一轮比较第8项。

答案与核对

8项

举一反三:换一组条件再试

问题

一个升序且元素互不相同的数组有 13 个元素,下标从 0 到 12。二分查找当前候选闭区间为 [0,R],R 是 0 到 12 的整数。若按 m=⌊(L+R)/2⌋ 取中点,已知中点 m=4,R 可能是哪几个整数?请列出全部可能。

从中点反推右端点左端 L = 0;右端 R = ?中点 m = ⌊(L + R) / 2⌋ = 4 01234567891011120 ≤ R ≤ 12,R 是整数满足条件的右端点有哪些?橙色格表示已知中点;非答案标记
数组下标为0至12;当前闭区间左端为0、右端R未知,中点按端点平均后向下取整为4,求R所有可能值。

四层提示

  1. 第0层 零基础救生圈

    向下取整等于 4,表示原数大于或等于 4,且小于 5。

  2. 第1层 生活场景建模

    像在尺子上找一个位置:只要原位置落在从 4 到不到 5 的范围里,向下取整都会得到 4。

  3. 第2层 防坑雷达

    4 是取整后的中点下标,不代表右端点只能是 8;必须把所有可能整数都找出来。

  4. 第3层 解题实操

    第一步:L=0,⌊R/2⌋=4,故 4≤R/2<5。第二步:两边同乘 2 得 8≤R<10。第三步:R 为整数,只有 8、9。代回验证 ⌊8/2⌋=4、⌊9/2⌋=4。

答案与核对

R 可以是 8 或 9。

继续学习

进入知识库练习