目录

1. 二分查找(Binary Search)

2. 顺序查找(Order Search)

3. 哈希表查找技术


​​​​​​​

线性表查找技术:是指进行查找运行的查找表所采用的存储结构是线性表的存储结构。

在线性表查找技术中,对数据元素的查找包括:二分查找和顺序查找和分块查找。

1. 二分查找(Binary Search)

二分查找又称折半查找,是一种效率较高的查找方法。二分查找要求线性表是有序表,即表中结点按关键字有序排列,并且要用顺序表作为表的存储结构。

二分查找是一种在有序数组中查找某一特定元素的搜索算法。

过程:搜索过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜索过程结束,如果是某一个特定元素小于或大于中间元素,则在数组小于或大于中间元素的那一半中进行查找,然后重复这个过程(递归),直到元素被找到,或找不到(数组为空,return -1)。

python3取整函数:

  • int()向下取整
  • round()四舍五入
  • ceil()向上取整

二叉判定树:深度为的满二叉树,折半二叉树,以中间值为结点。

--> python递归实现

# 二分查找-递归实现
def binarysearch(num_list, left, right, x):# 需要判断left和right索引位置if left <= right:mid = int((left + right)/2)# temp = num_list[mid]if num_list[mid] == x:return midelif num_list[mid] < x:left = mid + 1# 注意:使用递归调用的时候,要注意return返回,否则会出现Nonereturn binarysearch(num_list, left, right, x)else:right = mid - 1return binarysearch(num_list, left, right, x)else:return -1if __name__ == '__main__':num_list = [10, 20, 30, 40, 50, 60, 70, 75, 80, 90, 100]index = binarysearch(num_list, 0, len(num_list)-1, 75)print(index)

-->python循环实现

# 二分查找-循环实现
def binarySearch_loop(num_list, x):left = 0right = len(num_list)-1while left <= right:mid = int((left+right)/2)if num_list[mid] == x:return xelif num_list[mid] < x:left = mid + 1else:right = mid - 1return -1

2. 顺序查找(Order Search)

顺序查找是最简单的查询方法,它的基本思想是:从表的一端开始,顺序扫描线性表,依次将扫描到的结点关键字与给定值Key相比较。

# 顺序查找
def orderSearch(num_list, x):for i in range(len(num_list)):if num_list[i] == x:return ireturn -1if __name__ == '__main__':num_list = [10, 20, 30, 40, 50, 60, 70, 75, 80, 90, 100]index = orderSearch(num_list, 65)print(index)

3. 哈希表查找技术

背景:由存储值查找位置索引时,在用线性查找和二分查找的过程中,需要依据关键词进行若干次的比较判断,确定数据集合中是否存在关键字等于某个给定关键字的记录以及该记录在数据表中的位置,查找的效率与比较的次数密切相关。

problem:在查找事需要不断进行比较的原因是建立数据表时,只考虑了个记录的关键字之间的相对大小,即记录在表中的关键字位置与关键字无直接关系。

-->线性查找或二分查找等方法需要顺序地搜索整个记录直到找到所需键值的记录。但该方法十分耗时,尤其当列表非常大时耗时严重。

solve:如果能在记录中的关键字位置与关键字之间建立某种直接关系,那么在进行查找时,就无须比较或只做很少的比较就能直接由关键字找到相应的记录。

一个有效解决方法是计算所需记录的偏移地址,并且在产生偏移地址处读取记录。

哈希函数:就是通过公式将关键字值对转换为偏移地址来检索记录。

哈希技术是查找和检索与唯一标识相关信息的最好方法之一。

python programming training(三):搜索算法相关推荐

  1. python programming training(四):动态规划

    动态规划,说白了类似于高中的数学归纳法. 递推 核心:穷举.减少共有状态或路径的重复计算. 目录 1. 概念理解 1.1 使用动态规划的条件 1.2 应用动态规划的步骤 1.3 DP和贪心算法区别 1 ...

  2. python programming training(二): 排序算法

    目录 1. 冒泡排序(Bubble Sort) 2. 快速排序(Quick Sort) 参考: github:https://github.com/yuyongsheng1990/python_tra ...

  3. python programming training(一):最大回文子字符串

    概念 回文字符串是指一个字符串从左到右与从右到左遍历得到的序列是相同的.例如"abcba"就是回文字符串,而"abcab"则不是回文字符串. 回文字符串给定一个 ...

  4. Coursera系列-R Programming第三周-词法作用域

    完成R Programming第三周 这周作业有点绕,更多地是通过一个缓存逆矩阵的案例,向我们示范[词法作用域 Lexical Scopping]的功效.但是作业里给出的函数有点绕口,花费了我们蛮多心 ...

  5. Python机器学习(三)--决策树算法

    Python机器学习(三)--决策树算法 原创  2014年07月14日 13:57:55

  6. python爬虫正则表达式实例-python爬虫学习三:python正则表达式

    python爬虫学习三:python正则表达式 1.正则表达式基础 a.正则表达式的大致匹配过程: 1.依次拿出表达式和文本中的字符比较 2.如果每一个字符都能匹配,则匹配成功:一旦有匹配不成功的字符 ...

  7. [转载]Python爬虫入门三之Urllib库的基本使用

    python爬虫系列教程http://cuiqingcai.com/1052.html 1.分分钟扒一个网页下来 怎样扒网页呢?其实就是根据URL来获取它的网页信息,虽然我们在浏览器中看到的是一幅幅优 ...

  8. 第一章 TensorFlow基础——python语法(三)

    简明Python基础(三) 此为jupyter notebook导出文档,如果习惯jupyter界面可以下载文件 链接:https://pan.xunlei.com/s/VMn5shjbvhvIPMq ...

  9. 计算机语言平均数怎么算,使用python怎么求三个数的平均值

    使用python怎么求三个数的平均值 发布时间:2021-04-27 17:31:39 来源:亿速云 阅读:64 作者:Leah 本篇文章给大家分享的是有关使用python怎么求三个数的平均值,小编觉 ...

最新文章

  1. 关于Visual Studio2019的4996错误警告解决方法
  2. 一、ESP32环境搭建(基于vscode插件platformIO)
  3. 不同类型的变量在内存中存储的详细情况
  4. mysql服务的关闭与启动
  5. html瀑布流下拉刷新,瀑布流下拉刷新 - osc_1wnye1so的个人空间 - OSCHINA - 中文开源技术交流社区...
  6. OpenGL(5)——变换
  7. Mapreduce概念及流程介绍
  8. MSSQL Server 2008 功能
  9. 华为方舟编译器 下载 和 LiteOS Studio Setup 2019-04-16.exe SDK下载
  10. Java之常用函数笔记
  11. MyBatis中foreach的用法
  12. 现场知识竞赛如何用手机做抢答器
  13. 线性代数学习笔记8-1:复数矩阵与共轭转置、Hermite矩阵、酉矩阵、傅里叶矩阵和快速傅里叶变换FFT
  14. 【Java面试题】一次完整的Http请求过程(非常详细)
  15. win10语音助手服务器,深入了解“小娜”Win10语音助手详解
  16. 下载高清图片素材,就上这6个网站,免费还能商用
  17. t480s控制面板打开触摸板_今年买的thinkpad T480S,但是使用感觉还不如5年前买的S3 touch速度快,是什么原因?...
  18. LCM液晶显示模组是什么,液晶显示模块有几种类型呢
  19. 深圳可能是理解中国数字城市建设的窗口
  20. obj文件和mtl文件格式说明

热门文章

  1. Squid 反向代理服务器配置
  2. Django使用心得(二)
  3. extract-text-webpack-plugin 的使用及安装
  4. SqlServer 行转列
  5. apache的prefork和workder模式
  6. 网络蜘蛛Spider 工作原理
  7. Request中getContextPath、getServletPath、getRequestURI、getRequestURL、getRealPath的区别
  8. Know more about AWR Parse Statistics
  9. AT89C51 单片机在电话远程控制器中的应用
  10. win10如何下载适合自己python版本的pygame?