当前位置: 首页 > news >正文

折半查找的核心逻辑是基于“数组有序”的前提,通过不断将查找区间缩小一半来高效定位目标值

折半查找的核心逻辑是基于“数组有序”的前提,通过不断将查找区间缩小一半来高效定位目标值。其基本步骤如下:

  1. 定义查找范围的边界lowhigh,初始为数组首尾下标。
  2. 在每一步中计算中间位置mid = low + (high - low) // 2(避免整数溢出)。
  3. 比较目标值key与中间元素arr[mid]
    • key == arr[mid],查找成功,返回mid
    • key < arr[mid],说明目标在左半区,更新high = mid - 1
    • key > arr[mid],说明目标在右半区,更新low = mid + 1
  4. 重复上述过程,直到low > high时结束循环,表示未找到,返回-1

两种实现方式

(1)迭代版(Bsearch)
defbsearch(arr,key):low,high=0,len(arr)-1whilelow<=high:mid=low+(high-low)//2ifarr[mid]==key:returnmidelifkey<arr[mid]:high=mid-1else:low=mid+1return-1
  • 使用循环控制流程,空间复杂度为O(1)
  • 更适合大规模数据或对栈空间敏感的环境。
(2)递归版(Bsearch_rec)
defbsearch_rec(arr,key,low,high):iflow>high:return-1mid=low+(high-low)//2ifarr[mid]==key:returnmidelifkey<arr[mid]:returnbsearch_rec(arr,key,low,mid-1)else:returnbsearch_rec(arr,key,mid+1,high)
  • 利用函数调用自身实现分治,代码更简洁易懂。
  • 空间复杂度为O(log n),因递归深度约为 log₂n。

折半查找的特点总结

特性描述
前提条件数组必须有序且支持随机访问
时间复杂度O(log n) —— 显著优于顺序查找的 O(n)
空间复杂度迭代:O(1),递归:O(log n)
适用结构数组等连续存储结构;不适用于链表
动态操作不适合频繁插入/删除的场景(维护有序成本高)

折半查找要求数据必须是有序的,是因为其核心逻辑依赖于通过比较中间元素来判断目标值位于左半部分还是右半部分。这种“决策依据”只有在数据有序的前提下才成立。

详细解释:

假设我们有一个数组arr和一个目标值key,折半查找每次都会取中间元素arr[mid]进行比较:

  • 如果key == arr[mid],查找成功;
  • 如果key < arr[mid],则认为key应该出现在mid左侧 ——但这仅在数组有序时才正确
  • 如果key > arr[mid],则认为key应该出现在mid右侧 —— 同样依赖于顺序排列。
举个例子:

无序数组:[5, 2, 9, 1, 7],我们要找key = 3
中间元素是9,由于3 < 9,算法会去左边[5, 2]查找,但实际上3并不在数组中,即使存在也可能被错误地“跳过”。

而如果是有序数组:[1, 2, 5, 7, 9],中间是53 < 5→ 正确进入左半部分[1, 2],继续查找可得结果或确认不存在。

✅ 所以:只有当数组有序时,“小于中间值就一定在左边,大于就在右边”这一推理才成立,否则查找过程将失去正确性。


此外,有序性还保证了以下几点:

  • 每次都能安全地排除一半的数据,确保时间复杂度为 O(log n);
  • 不会出现遗漏或误判的情况。

类比理解:

就像查字典时,你是按字母顺序翻页的。如果字典的单词被打乱了,你就无法通过“当前词太大”来决定往前翻还是往后翻。


http://www.jsqmd.com/news/183183/

相关文章:

  • Sonic数字人适合哪些行业?虚拟客服、网课讲师、短视频主角皆可
  • 有向网是一种带权的有向图,其中每条边都有一个非负的权值表示从一个顶点到另一个顶点的代价或距离
  • 实战NLP解决方案设计
  • AI健康智慧体检管理系统:用技术把体检变成“私人健康指挥中心”
  • Sonic模型License协议解读:可商用但需署名
  • Sonic模型License协议解读:可商用但需署名
  • qt AbstractTableModel
  • 迪杰斯特拉(Dijkstra)算法和弗洛伊德(Floyd)算法是图论中最经典的两种最短路径算法
  • AI试验数据综合分析管理系统:数据价值的技术解码器
  • AWS WAF Rate Limit 与 Shield DDoS 防护最佳实践
  • Springboot基于Web的绿色环保网站0z5t9(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
  • 032.有序表之AVL树
  • 微PE官网启动盘制作+Sonic环境部署一体化方案
  • 信号与系统综述
  • Sonic数字人前端表格展示可用VXETable官方组件实现
  • HuggingFace镜像网站对比:哪家更适合拉取VoxCPM-1.5-TTS-WEB-UI?
  • 1.2.1 - f
  • 删除具有大量部署的cloudflare pages项目
  • 文本转语音新突破:VoxCPM-1.5实现高效标记率6.25Hz
  • 20260102 之所思 - 人生如梦
  • UltraISO制作U盘启动盘同时部署VoxCPM-1.5-TTS-WEB-UI运行环境
  • 输电杆塔绝缘子红外测温图像检测数据集VOC+YOLO格式420张1类别
  • Blender动画协作?为3D角色赋予真实声音
  • Sonic支持1080P输出?关键在于min_resolution设为1024
  • 导师推荐!8款AI论文软件测评:本科生写论文还能这么快
  • 水务集团停水通知自动化语音外呼系统
  • 对比主流TTS模型:VoxCPM-1.5的优势与性能表现
  • 知识库建设:沉淀常见Sonic使用问题的答案
  • VoxCPM-1.5-TTS-WEB-UI与Git Commit版本控制协同工作流程
  • 公交移动电视:车载屏幕配合VoxCPM-1.5-TTS-WEB-UI播报站点周边信息