算法简介

插值查找时根据要查找的关键字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查找算法(三)------ 插值查找相关推荐

  1. 查找算法:插值查找算法实现及分析

    插值查找算法介绍 插值查找(Interpolation Search)是根据要查找关键字key与查找表中最大最小记录的关键字比较后的查找方法,其核心就在于插值的计算公式key-arr[low]/arr ...

  2. python 查找算法_七大查找算法(Python)

    查找算法 -- 简介 查找(Searching)就是根据给定的某个值,在查找表中确定一个其关键字等于给定值的数据元素. 查找表(Search Table):由同一类型的数据元素构成的集合 关键字(Ke ...

  3. 【数据结构与算法】插值查找算法、斐波那契查找算法(黄金分割法)的介绍和程序实现

    目录 1. 插值查找算法 1.1 插值查找算法的介绍 1.2 插值查找算法的程序实现 2. 斐波那契查找算法 2.1 斐波那契查找算法的介绍 2.2 斐波那契查找算法的程序实现 1. 插值查找算法 1 ...

  4. (二)Java算法:插值查找

    目录 一.简介 1.1.特点 二.maven依赖 三.实现 3.1.代码实现 3.2.数据流向过程 3.3.数据查找流程 结语 一.简介 1.1.特点   插值查找,有序表的一种查找方式.插值查找是根 ...

  5. 数据结构之查找算法:顺序查找

    查找算法:顺序查找 思维导图: 顺序查找的定义: 顺序查找的代码实现: 顺序查找的性能: 思维导图: 顺序查找的定义: 顺序查找的代码实现: typedef struct { //查找表数据结构int ...

  6. 【查找算法】折半查找算法

    ​ 零.写在前面 CSDN21天学习挑战赛 本人蒟蒻一枚,文章若有不足之处请大家批评指出,欢迎大家留言. 活动地址:CSDN21天学习挑战赛 文章目录 零.写在前面 一.算法是什么? 二.折半查找算法 ...

  7. 二分查找算法(折半查找算法)

    二分查找算法(折半查找算法) 二分查找又称折半查找.二分搜索.折半搜索等,是在分治算法基础上设计出来的查找算法,对应的时间复杂度为O(logn). 二分查找算法仅适用于有序序列,它只能用在升序序列或者 ...

  8. 查找算法:二分查找、顺序查找

    08年9月入学,12年7月毕业,结束了我在软件学院愉快丰富的大学生活.此系列是对四年专业课程学习的回顾,索引参见:http://blog.csdn.net/xiaowei_cqu/article/de ...

  9. 数据结构之查找算法:分块查找

    查找算法:分块查找 思维导图: 分块查找的定义: 如何分块: 如何查找: 代码实现: 查找效率: 思考: 思维导图: 分块查找的定义: 如何分块: 例: 如何查找: 1.先查找在哪块 2.然后查找块内 ...

  10. 数据结构之查找算法:折半查找

    查找算法:折半查找 思维导图: 算法思想: 代码实现: 判定树: 折半查找判定树的构造: 顺序查找与折半查找对比: 思维导图: 算法思想: 代码实现: typedef struct {int *ele ...

最新文章

  1. LeetCode题组:第13题-罗马数字转整数
  2. cve-bin-tool 证书错误的解决方法
  3. 【Android Studio】查看源码时提示“throw new RuntimeException(Stub!)”
  4. xxx is not in the sudoers file 解决方案(转)
  5. Error C1189: #error: Please use the /MD switch for _AFXDLL builds(转)
  6. 英文Ubuntu系统安装中文支持,中文UTF-8
  7. 理解用户模式(User Mode)和内核模式(Kernel Mode)
  8. 七夕情人节表白网页代码大全(浪漫的html表白源代码)
  9. 相关系数excel_怎样征服老板?教你用excel找到数据之间隐藏信息
  10. 织梦模板被植入index.html,织梦dedecms百度快照劫持注入代码防范
  11. android百度输入法切换,百度输入法输入模式怎么切换 快速一键切换输入法模式方法教程...
  12. java switch贯穿_Java Switch语句贯穿问题
  13. 2021-07-02-MySQL必知必会-笔记
  14. xlsx 文件导入导出 结合luckysheet
  15. C++学校图书馆管理系统
  16. OpenGrok使用
  17. 自己动手实现软件测试项目_自己动手的项目
  18. B01_网易云课堂学习目录
  19. java进阶专栏的学习指南
  20. SQL 敏感数据加密与解密

热门文章

  1. 【杂谈】hexo网站next主题背景图片和超链接颜色问题
  2. Node.js异常捕获处理
  3. 读万卷书,行万里路,你走的每一步都是丈量世界的脚步;
  4. Vmware下Ubuntu18.04虚拟机右上角的网络图标消失连不上网络,找回方法。
  5. ST-link Utility Can not connect to target 链接不上 解决方法
  6. UML(3)---九图
  7. 不用学生邮箱,通过jetBrains全家桶学生认证
  8. [乐意黎转载]前端技能汇总
  9. word中打出希腊字母
  10. 磨刀不误砍柴工 —— 自己动手写操作系统 入门导引