族谱网 头条 人物百科

二分搜索算法

2017-10-16
出处:族谱网
作者:阿族小谱
浏览:375
转发:0
评论:0
算法步骤给予一个包含n个带值元素的数组A或是记录A0...An−1,使得A0≤...≤An−1,以及目标值T,还有下列用来搜索T在A中位置的子程序。令L为0,R为n−1。如果L>R,则搜索以失败告终。令m(中间值元素)为“(L+R) / 2”加上下高斯符号。如果AmT,令R为m-1并回到步骤二。当Am=T,搜索结束;回传值m。这个迭代步骤会持续通过两个变量追踪搜索的边界。有些实际应用会在算法的最后放入相等比较,让比较循环更快,但平均而言会多一层迭代。大致匹配以上程序只适用于完全匹配,也就是查找一个目标值的位置。不过,因为有序数组的顺序性,将二分搜索算法扩展到能适用大致匹配并不是很重要。举例来说,二分搜索算法可以用来计算一个赋值的排名(或称秩,比它更小的元素的数量)、前趋(下一个最小元素)、后继(下一个最大元素)以及最近邻。搜索两个值之间的元素数目的范围查询(英语:Rangequery(da...

算法

步骤

给予一个包含 n 个带值元素的数组 A 或是记录 A 0 ... A n −1 ,使得 A 0 ≤ ... ≤ A n −1 ,以及目标值 T ,还有下列用来搜索 T 在 A 中位置的子程序。

令 L 为0, R 为 n − 1。

如果 L > R ,则搜索以失败告终。

令 m (中间值元素)为“( L + R ) / 2”加上下高斯符号。

如果A m < T ,令 L 为 m + 1并回到步骤二。

如果A m > T ,令 R 为 m - 1并回到步骤二。

当A m = T ,搜索结束;回传值 m 。

这个迭代步骤会持续通过两个变量追踪搜索的边界。有些实际应用会在算法的最后放入相等比较,让比较循环更快,但平均而言会多一层迭代 。

大致匹配

以上程序只适用于完全 匹配,也就是查找一个目标值的位置。不过,因为有序数组的顺序性,将二分搜索算法扩展到能适用大致匹配并不是很重要。举例来说,二分搜索算法可以用来计算一个赋值的排名(或称秩,比它更小的元素的数量)、前趋(下一个最小元素)、后继(下一个最大元素)以及最近邻。搜索两个值之间的元素数目的范围查询(英语:Range query (data structures))可以借由两个排名查询(又称秩查询)来运行 。

排名查询可以使用调整版的二分搜索来运行。借由在成功的搜索回传 m ,以及在失败的搜索回传 L ,就会取而代之地回传了比起目标值小的元素数目 。

前趋和后继查询可以借由排名查询来运行。一旦知道目标值的排名,其前趋就会是那个位于其排名位置的元素(因为它是小于目标值的最大元素)。其后继是(数组中的)下一个元素,或是(非数组中的)前趋的下一个元素 。目标值的最近邻可能是前趋或后继,取决于何者较为接近。

范围查询也是直接了当的。一旦知道两个值的排名,不小于第一个值且小于第二个值的元素数量就会是两者排名的差。这个值可以根据范围的端点是否算在范围内,或是数组是否包含其端点的对应键来增加或减少1 。

复杂度分析

应用

除直接在一个数组中查找元素外,可用在插入排序中。

 


免责声明:以上内容版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。感谢每一位辛勤著写的作者,感谢每一位的分享。

文章来源:内容词条
——— 没有了 ———
编辑:阿族小谱

更多文章

更多精彩文章
评论 {{commentTotal}} 文明上网理性发言,请遵守《新闻评论服务协议》
游客
发表评论
  • {{item.userName}} 举报

    {{item.content}}

    {{item.time}} {{item.replyListShow ? '收起' : '展开'}}评论 {{curReplyId == item.id ? '取消回复' : '回复'}}

    回复评论
加载更多评论
打赏作者
“感谢您的打赏,我会更努力的创作”
— 请选择您要打赏的金额 —
{{item.label}}
{{item.label}}
打赏成功!
“感谢您的打赏,我会更努力的创作”
返回
打赏
私信

关于我们

关注族谱网 微信公众号,每日及时查看相关推荐,订阅互动等。

APP下载

下载族谱APP 微信公众号,每日及时查看
扫一扫添加客服微信