博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
折半搜索法 - 递归
阅读量:4672 次
发布时间:2019-06-09

本文共 572 字,大约阅读时间需要 1 分钟。

今天开始准备学习搜索相关的算法,首先从折半搜索【也叫二分搜索binary search】开始,这个也是比较简单比较容易理解的,先来看下它的定义:

 光文字有些抽象,下面用图来表示整个折半查找的全过程:

       

对于这样一组数列,比如要查询7这个元素,它的过程如下:

于是乎数据就变成了:

      

从这一步是不是就能体现出折半搜索的效率,顺意就将数据砍掉剩一半了,也就是数据范围一下就缩小了,所以查找效率就高了。下面则继续以此规则进行进一步递归【所以用递归实现是首先能想到的实现办法】

这时再从剩下的元素【7、9、11】中取出中间元素【9】继续类比:

                

 

                 

只剩最后一个7了,取中间还是它,最后发现跟7相等于是乎就找到了该数,整个查询结束。 

有了上面的思想之后,下面来具体实现一下,比较简单,这里就不多解释了,基础代码:

具体折半的实现如下:

编译运行:

下面更改一下测试用例,测一下其它情况看程序是否完美:

看结果:

可见程序是完美的,下面来看一下它的时间复杂度:

 

而方法中其它的一些语句木有要所数组循环的东东,所以是O(1)级别的,所以:

T(n) = T(n/2) + O(1),根据主定理可以得出它其实是O(log n),非常高效了~

转载于:https://www.cnblogs.com/webor2006/p/7182756.html

你可能感兴趣的文章
第五章上 首次登陆
查看>>
第5堂:看到词句就会读-上
查看>>
Phpcms V9全站伪静态设置方法
查看>>
POJ 2176 Folding(区间DP)
查看>>
Dynamic Clock in Terminal.
查看>>
C# 中的委托和事件
查看>>
SHT30 Linux标准 i2c-dev 读取程序
查看>>
wpf TabControl控件的用法
查看>>
centos7忘记密码处理办法
查看>>
正确停掉 expdp 或 impdp
查看>>
Image Captioning代码复现
查看>>
UE4 打包C++项目到win32平台报错 could not find mspdbcore.dll
查看>>
sed系列:行或者模式匹配删除特定行
查看>>
python常见面试题(三)
查看>>
回文日期(NOIP2016 普及组第二题)
查看>>
[jQuery]回到顶部
查看>>
用Github做一个静态网页(GithubPages)
查看>>
Win7下修改Hosts文件
查看>>
Linq to sql并发与事务
查看>>
2017-06-27
查看>>