Python查找算法(三)------ 插值查找
算法简介
插值查找时根据要查找的关键字key与查找表中最大最小记录的关健字比较后的查找方法。
其核心就在于插值的计算公式:
(key-a[low])/(a[high]-a[low])*(high-low)
时间复杂度O(logn)对于表长较大而关健字分布比较均匀的查找表来说,效率较高。
算法思想
基于二分查找算法,将查找点的选择改进为自适应选择,可以提高查找效率。当然,插值查找也属于有序查找。
注:对于表长较大,而关健字分布又比较均匀的查找表来说,插值查找算法的平均性能比折半查找好的多。反之,数组中如果分布非常不均匀,那么插值查找未必是很合适的选择。
复杂度分析
时间复杂度:如果元素均匀分布,则O(log(logn)),在最坏的情况下可能需要O(n)
空间复杂度:O(1)
算法实现
#插值查找算法def binary_search(lis, key):low = 0high = len(lis) - 1time = 0while low < high:time += 1#计算mid值是插值算法的核心代码mid = low + int((high - low) * (key - lis[low]) / (lis[high] - lis[low]))print("mid=%s, low=%s, high=%s" % (mid, low, high))if key < lis[mid]:high = mid -1elif key > lis[mid]:low = mid + 1else:#打印查找的次数print("times: %s" % time)print("times: %s" % time)return Falseif __name__ == '__main__':LIST = [1, 5, 7, 8, 22, 54, 99, 123, 200, 444]result = binary_search(LIST, 444)print(result)
Python查找算法(三)------ 插值查找相关推荐
- 查找算法:插值查找算法实现及分析
插值查找算法介绍 插值查找(Interpolation Search)是根据要查找关键字key与查找表中最大最小记录的关键字比较后的查找方法,其核心就在于插值的计算公式key-arr[low]/arr ...
- python 查找算法_七大查找算法(Python)
查找算法 -- 简介 查找(Searching)就是根据给定的某个值,在查找表中确定一个其关键字等于给定值的数据元素. 查找表(Search Table):由同一类型的数据元素构成的集合 关键字(Ke ...
- 【数据结构与算法】插值查找算法、斐波那契查找算法(黄金分割法)的介绍和程序实现
目录 1. 插值查找算法 1.1 插值查找算法的介绍 1.2 插值查找算法的程序实现 2. 斐波那契查找算法 2.1 斐波那契查找算法的介绍 2.2 斐波那契查找算法的程序实现 1. 插值查找算法 1 ...
- (二)Java算法:插值查找
目录 一.简介 1.1.特点 二.maven依赖 三.实现 3.1.代码实现 3.2.数据流向过程 3.3.数据查找流程 结语 一.简介 1.1.特点 插值查找,有序表的一种查找方式.插值查找是根 ...
- 数据结构之查找算法:顺序查找
查找算法:顺序查找 思维导图: 顺序查找的定义: 顺序查找的代码实现: 顺序查找的性能: 思维导图: 顺序查找的定义: 顺序查找的代码实现: typedef struct { //查找表数据结构int ...
- 【查找算法】折半查找算法
零.写在前面 CSDN21天学习挑战赛 本人蒟蒻一枚,文章若有不足之处请大家批评指出,欢迎大家留言. 活动地址:CSDN21天学习挑战赛 文章目录 零.写在前面 一.算法是什么? 二.折半查找算法 ...
- 二分查找算法(折半查找算法)
二分查找算法(折半查找算法) 二分查找又称折半查找.二分搜索.折半搜索等,是在分治算法基础上设计出来的查找算法,对应的时间复杂度为O(logn). 二分查找算法仅适用于有序序列,它只能用在升序序列或者 ...
- 查找算法:二分查找、顺序查找
08年9月入学,12年7月毕业,结束了我在软件学院愉快丰富的大学生活.此系列是对四年专业课程学习的回顾,索引参见:http://blog.csdn.net/xiaowei_cqu/article/de ...
- 数据结构之查找算法:分块查找
查找算法:分块查找 思维导图: 分块查找的定义: 如何分块: 如何查找: 代码实现: 查找效率: 思考: 思维导图: 分块查找的定义: 如何分块: 例: 如何查找: 1.先查找在哪块 2.然后查找块内 ...
- 数据结构之查找算法:折半查找
查找算法:折半查找 思维导图: 算法思想: 代码实现: 判定树: 折半查找判定树的构造: 顺序查找与折半查找对比: 思维导图: 算法思想: 代码实现: typedef struct {int *ele ...
最新文章
- LeetCode题组:第13题-罗马数字转整数
- cve-bin-tool 证书错误的解决方法
- 【Android Studio】查看源码时提示“throw new RuntimeException(Stub!)”
- xxx is not in the sudoers file 解决方案(转)
- Error C1189: #error: Please use the /MD switch for _AFXDLL builds(转)
- 英文Ubuntu系统安装中文支持,中文UTF-8
- 理解用户模式(User Mode)和内核模式(Kernel Mode)
- 七夕情人节表白网页代码大全(浪漫的html表白源代码)
- 相关系数excel_怎样征服老板?教你用excel找到数据之间隐藏信息
- 织梦模板被植入index.html,织梦dedecms百度快照劫持注入代码防范
- android百度输入法切换,百度输入法输入模式怎么切换 快速一键切换输入法模式方法教程...
- java switch贯穿_Java Switch语句贯穿问题
- 2021-07-02-MySQL必知必会-笔记
- xlsx 文件导入导出 结合luckysheet
- C++学校图书馆管理系统
- OpenGrok使用
- 自己动手实现软件测试项目_自己动手的项目
- B01_网易云课堂学习目录
- java进阶专栏的学习指南
- SQL 敏感数据加密与解密