408考研逐题详解:2010年第9题——折半查找

2010年第9题

已知一个长度为 16 的顺序表 L,其元素按关键字有序排列。若采用折半查找法查找一个 L 中不存在的元素,则关键字的比较次数最多的是( )

A. 4 \qquad B. 5 \qquad C. 6 \qquad D. 7

解析

本题主要考查折半查找(二分查找)中的判定树模型以及查找过程中的比较次数。

  1. 折半查找(二分查找)算法:

    • 折半查找是一种在有序顺序表中查找特定元素的算法。它通过将目标关键字与顺序表中间元素的关键字比较,根据比较结果将查找范围缩小到左半部分或右半部分,重复此过程直到找到目标或确定目标不存在。
    • 算法过程:
      • 初始化查找范围:设 low = 1(或 low = 0,取决于索引起始,但结果相同),high = n(n 为表长)。
      • 循环条件:while low <= high
      • 计算中间位置:mid = (low + high) // 2(整数除法,向下取整)。
      • 比较目标关键字与 L[mid] 的关键字:
        • 若相等,查找成功。
        • 若目标小于 L[mid],则 high = mid - 1
        • 若目标大于 L[mid],则 low = mid + 1
      • 重复直到 low > high,此时查找失败。
    • 特点:每次比较将查找范围减半,因此算法效率较高,时间复杂度为 O ( log ⁡ 2 n ) O(\log_2n) O(log2n)
  2. 判定树:

    • 折半查找过程可以建模为一棵二叉决策树,即判定树,如下图所示:

在这里插入图片描述

 如果查找成功,则停留在“圆圈”结点,即顺序表中存在的关键词;如果查找失败,则停留在“方形”结点。
  • 对于长度 n 的顺序表,判定树有 n 个内部结点(查找成功时停留的结点)和 n+1 个外部结点(查找失败时停留的结点,对应 n+1 个可能失败区间:小于最小值、大于最大值、元素之间)。

  • 具有 n n n 个内部结点(圆圈表示,即顺序表的长度为 n n n)的判定树的高度为 ⌊ log ⁡ 2 n ⌋ + 1 \lfloor\log_2n\rfloor+1 log2n+1

  1. 最坏情况时间复杂度与比较次数:

    • 比较次数:指算法中目标关键字与顺序表元素关键字进行比较的总次数。本题关注“关键字的比较次数”,即元素关键字与目标关键字的比较。
    • 最坏情况:当目标元素不存在时,算法需要尽可能多的比较次数才能确定失败。对于长度为 n 的顺序表,最坏情况比较次数取决于查找过程的最大深度。最坏情况比较次数为 ⌊ log ⁡ 2 n ⌋ + 1 \lfloor \log_2 n \rfloor + 1 log2n+1,即将某条路径上的所有内部结点对应的顺序表中元素都比较了一遍,也没有找到该目标元素。最终停留在外部结点(方形结点,但不需要跟方形结点中的元素比较)

对于本题,顺序表的长度为 16 ,即 n = 16 n=16 n=16 。根据前述 分析可知,由这些元素构成的判定树高度是 ⌊ log ⁡ 2 16 ⌋ + 1 = 4 + 1 = 5 \lfloor\log_2 16\rfloor+1 = 4+1=5 log216+1=4+1=5,所以,当查找失败时,关键字最多比较次数是 5。

本题答案:B

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

CS创新实验室

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

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

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

打赏作者

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

抵扣说明:

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

余额充值