You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

二分查找最坏情况下的比较次数计算疑问

二分查找最坏情况下的相等比较次数(针对123456个元素)

结论

你指定统计A[i] = E这类相等比较的话,123456个元素的数组,二分查找最坏情况下的相等比较次数是17次。

为啥不同资料结果差这么多?

不同公式的差异根源是对“比较次数”的定义完全不同,还有部分是计算失误:

  • 说log₂(n+1)得到25次的:纯计算错误。log₂(123456+1)≈16.91,向上取整是17,根本到不了25,大概率是混淆了对数底数(比如误用以10为底的对数后乱换算)。
  • 用2logn+1或2logn-1得到50次的:这类公式统计的是所有比较操作(包括判断大小的A[i] < E/A[i] > E,再加相等比较),而且就算按这个定义,计算结果也不对——按123456算,所有比较次数撑死34次,50次明显是公式套用错误或者底数搞混了,完全不符合你要的“只统计相等判断”的要求。

正确的计算逻辑

只算A[i] = E的话,本质就是算二分查找的循环迭代次数——因为每次进循环都会做一次相等判断:

  1. 最坏情况是目标元素不存在,或者要到最后一个可能的位置才找到目标,这时候循环会执行到搜索区间为空才停。
  2. 循环次数k满足:2^(k-1) < n ≤ 2^k,n是数组元素数。
    • 代入123456:2^16=65536,2^17=131072,显然65536 < 123456 ≤ 131072,所以k=17。
  3. 也就是说,最坏情况下会执行17次相等比较。

额外说明:不同比较定义的区别

如果要统计所有比较操作(相等+大小判断),最坏情况次数大概是34次(每次循环先做相等判断,不等再做一次大小判断,17次循环就是17*2=34),但这和你问题里的要求无关。

内容的提问来源于stack exchange,提问作者BlackPearl

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 02:01:28