当前位置:网站首页>插补搜寻法和二分查找法 哪个效率更好?
插补搜寻法和二分查找法 哪个效率更好?
2022-07-19 05:08:00 【JYCJ_】
什么是插补搜寻法?
在介绍插补搜寻法之前,我先介绍一下二分查找法,之后结合两者之间的对比,你就会明白了。
平时,我们经常使用二分查找法,来快速查找指定元素是否在一个集合中(前提是:该集合已经有序了)
二分查找
先声明以下变量:
左边位置:left = 0, 右边位置: right = len(list) - 1
查找目标元素: target
集合是按升序排列;
查找的具体流程:
1. 计算中间位置: mid = (left + right)/ 2
2. 通过比较 target 与 list [mid] 的大小来不断更新left 和right
- target == list [mid], 目标target找到
- target > list [mid], 目标target在 mid位置右侧, 更新: left = mid + 1
- target < list [ mid ], 目标target 在 mid位置左侧, 更新: right = mid - 1
3. 重复1步骤,直到不满足循环条件: left <= right
那什么是插补搜寻法
插补搜寻法
它跟二分查找法的区别就在于: mid位置的计算方式
那么插补搜寻法是如何计算进一步比较的位置呢?
具体流程为:
// a的计算可以理解为: 将left 与 right 之间的间隔,按最右边与最左边元素间差值来均分
a = int(float64(right - left) / float64( list [ right ] - list [ left ]))
// b的计算可以理解为: target与最左边元素的实际差值
b = target - list [ left ]
// 最终position即为: 最左位置 加上 实际的偏移间隔( a * b)
position = left + a * b
此处得出的 position 就相当于 二分查找中的 mid,
这是一种变速的寻找位置法,效率比二分查找要高。
希望你有所收获。
我们下次再见
边栏推荐
- thinkphp6临时关闭布局
- 继承(子构造函数继承父构造函数中的属性)
- 密码学科普
- 第三方支付的发展趋势及优势
- 10M polkadot substrate : 你的第一份合约
- Alipay payment and wechat payment are easy to be risk controlled. Take a look at this operation
- Wechat applet encapsulates custom tabbar, the sub page displays tabbar, and the main page can also be set (it is recommended to use the original tabbar of the applet), which is only for personal use
- 线上问题定位之一——arthas
- promise异步回调函数
- 苹果cms V10模板/MXone Pro自适应影视电影网站模板
猜你喜欢
随机推荐
写了一点webapi的知识点从0到1
ES5新增方法
第三方支付的发展趋势及优势
How to build your own fourth party payment platform?
微信公众号、微信支付开发
Project code programming specification (design classes and methods, variables, for statement format, while statement, switch statement, encapsulated transaction)
列表的渲染、过滤(筛选)、排序操作
C语言实现 求解逆矩阵
EXCEL中VLOOKUP的使用
Talking about wechat payment risk control
mysql密码忘了,怎么办?
深度解析ThreadLocal
10Q polkadot substrate : 使用map存储值
文件包含漏洞
mysql 如何查询json格式的字段
php生成的csv, 无法完整显示带前导0的数字
The second way to write 85 props
为什么会有三方支付?
三方支付公司有哪些?
支付宝支付和微信支付容易被风控可以看一下这个操作