还剩26页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
对分查找算法欢迎参加对分查找算法复习课程本课程将深入探讨这一高效的搜索方法,帮助您掌握其核心概念和应用概念介绍定义特点对分查找是一种在有序数组中查它通过将搜索区间反复对半分割找特定元素的搜索算法,快速缩小目标范围效率对分查找的时间复杂度为,效率远高于线性搜索Olog n应用场景数据库搜索字典查找快速定位大型数据库中的记录在电子词典中查找单词电话簿搜索在电话簿应用中查找联系人算法流程初始化1设置左右边界指针计算中点2找出左右边界的中间位置比较中点3将目标值与中点元素比较调整边界4根据比较结果缩小搜索范围重复或结束5重复步骤,直到找到目标或确定不存在2-4时间复杂度分析最坏情况最好情况平均情况,每次查找都需要缩小一半搜索,第一次比较就找到目标元素,与最坏情况相同Olog nO1Olog n范围伪代码实现function binarySearcharr,target:left=0right=arr.length-1while left=right:mid=left+right/2if arr[mid]==target:return midelifarr[mid]target:left=mid+1else:right=mid-1return-1代码示例实现实现实现Python C++Java利用的简洁语法实现对分查找使用的高效性能实现对分查找借助的面向对象特性实现对分查找Python C++Java算法优化防止整数溢出使用mid=left+right-left/2递归实现采用递归方式简化代码结构二分搜索树使用二叉搜索树数据结构优化搜索二分查找变体标准二分查找1左边界二分查找2右边界二分查找3插入位置二分查找4寻找第一个最后一个目标值/第一个目标值最后一个目标值找到目标值后,继续向左搜索,直到找到第一个出现的位置找到目标值后,继续向右搜索,直到找到最后一个出现的位置寻找目标值的左右边界/左边界右边界12找到第一个大于等于目标值的找到最后一个小于等于目标值元素位置的元素位置应用3常用于处理重复元素或范围查询寻找第一个最后一个大于等于目/标值的元素初始化1设置左右指针比较2中点元素与目标值比较更新边界3根据比较结果调整搜索范围记录结果4更新潜在结果寻找第一个最后一个小于等/于目标值的元素算法思路应用场景类似于寻找大于等于目标值的元在有序数组中找到最接近但不超素,但比较条件相反过目标值的元素注意事项需要考虑边界情况,如目标值小于所有元素寻找旋转有序数组中的目标值判断旋转点确定数组的旋转位置选择子数组决定在哪一部分进行搜索执行二分查找在选定的子数组中进行标准二分查找寻找旋转有序数组中的最小值特点方法最小值是旋转点,将数组分为两个递增子数组比较中点与右端点,确定最小值在哪一侧寻找峰值元素定义思路峰值元素大于其相邻元素比较中点与其右侧元素,向较大值方向移动特点不需要数组有序,总能找到一个峰值寻找重复元素二分计数快慢指针+使用二分查找结合计数技巧定位重复将问题转化为环检测问题元素哈希表使用哈希表记录出现次数寻找众数排序1对数组进行排序二分查找2使用二分查找定位可能的众数验证3检查候选众数的出现次数返回结果4如果满足条件,返回众数寻找缺失数字二分查找法数学方法位运算在排序数组中二分查找第一个不等于下标计算理想和与实际和的差值利用异或运算的特性查找缺失数字的元素寻找交集排序双指针哈希集合+对两个数组排序后,使用双指针使用哈希集合记录一个数组的元遍历找交集素,然后遍历另一个数组查找共同元素二分查找对较长数组排序,然后在其中二分查找较短数组的元素寻找差集排序双指针比较记录不同元素对两个数组进行排序使用双指针遍历两个数组将仅在一个数组中出现的元素加入结果集寻找并集合并数组排序12将两个数组合并到一起对合并后的数组进行排序去重3使用双指针或集合去除重复元素寻找中位数排序法1快速选择法2二分查找法3分治法4寻找第大小元素K/排序法快速选择排序后直接返回第个元素使用类似快速排序的分区方法K堆方法维护一个大小的堆K习题练习课程总结基础概念1掌握对分查找的核心思想和实现方法变体应用2学习各种二分查找变体及其应用场景实践技巧3通过习题练习提升实际编程能力算法优化4了解如何优化二分查找以提高效率环节QA互动讨论难点解析可视化演示鼓励学生提出问题,深入探讨二分查找的应针对学生在练习中遇到的困难进行详细讲解使用可视化工具展示二分查找的过程,加深用和挑战理解课下作业51编程题算法设计完成道二分查找相关的编程题,巩固设计一个二分查找的变体算法,解决5所学知识实际问题3优化挑战尝试优化个给定的二分查找实现,提3高效率。
个人认证
优秀文档
获得点赞 0