算法——查找

2023-11-16

文章目录

一. 基本概念和评价

1. 相关概念

在这里插入图片描述

2. 查找表

2.1 常见操作

在这里插入图片描述

2.2 分类

  • 静态查找表
  • 动态查找表

在这里插入图片描述

3. 查找算法的评价指标

在这里插入图片描述

  • ASL的数量级反应了查找算法时间复杂度

查找成功的平均查找长度
在这里插入图片描述

查找失败的平均查找长度

在这里插入图片描述

二. 线性结构查找

1. 顺序查找算法

1.1 定义

在这里插入图片描述

1.2 算法思想

在这里插入图片描述

1.3 特点

在这里插入图片描述

1.4 分类

在这里插入图片描述

1)无哨兵的无序线性表的顺序查找

在这里插入图片描述

2)有哨兵的无序线性表的顺序查找

优点:无需判断是否越界,效率更高

在这里插入图片描述

3)对有序表进行顺序查找

在这里插入图片描述
优点:查找失败时ASL更少

  • 查找失败时可以不用再比较到表的另一端就能返回查找失败的信息,从而降低顺序查找失败的平均查找长度
4)各关键字被查概率不同

在这里插入图片描述
优点:查找成功时ASL更少

1.5 查找判定树

对有序表用查找判定树分析ASL

  • 树中的圆形结点表示有序线性表中存在的元素;树中的矩形结点称为失败结点(若有n个结点,则相应地有n+1个查找失败结点),它描述的是那些不在表中的数据值的集合。若查找到失败结点,则说明查找不成功

在这里插入图片描述
在这里插入图片描述

1.6 查找效率分析(ASL)

在这里插入图片描述

2. 折半查找算法

2.1 算法思想

在这里插入图片描述
特点:

  • 因为折半查找需要方便地定位查找区域,所以它要求线性表必须具有随机存取的特性。因此,该查找法仅适合于顺序存储结构,不适合于链式存储结构,且要求元素按关键字有序排列

在这里插入图片描述

2.2 算法实现

在这里插入图片描述

2.3 查找判定树

1)定义

用来描述折半查找过程的二叉树,称为判定树

  • 树中每个圆形结点表示一个记录,结点中的值为该记录的关键字值;树中最下面的叶结点都是方形的,它表示查找不成功的情况。
  • 从判定树可以看出,查找成功时的查找长度为从根结点到目的结点的路径上的结点数,而查找不成功时的查找长度为从根结点到对应失败结点的父结点的路径上的结点数;
  • 每个结点值均大于其左子结点值,且均小于于其右子结点值
2)构造

在这里插入图片描述

3)特性

性质1:
在这里插入图片描述

  • 用折半查找法查找到给定值的比较次数最多不会超过树的高度

性质2:
在这里插入图片描述

2.4 查找效率分析(ASL)

在这里插入图片描述
在这里插入图片描述

三. 树形结构查找

1. 二叉排序树(二叉查找树/BST)

1.1 相关概念

在这里插入图片描述

1.2 基本操作

1)查找操作

在这里插入图片描述
在这里插入图片描述

2)插入操作

在这里插入图片描述

3)构造二叉排序树、
  • 二叉排序树作为一种动态树表,其特点是树的结构通常不是一次生成的,而是在查找过程中,当树中不存在关键字值等于给定值的结点时再进行插入的

在这里插入图片描述

4)删除操作
  • 在二叉排序树中删除一个结点时,不能把以该结点为根的子树上的结点都删除,必须先把被删除结点从存储二叉排序树的链表上摘下
  • 将因删除结点而断开的二叉链表重新链接起来,同时确保二叉排序树的性质不会丢失

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

1.3 查找效率分析(ASL)

  • 二叉排序树的查找效率,主要取决于树的高度

在这里插入图片描述

1)查找成功

在这里插入图片描述

2)查找失败

在这里插入图片描述

3)二叉排序树与二分查找的比较

在这里插入图片描述

2. 二叉平衡树(AVL)

2.1 相关概念

1)为什么需要平衡二叉树

为避免树的高度增长过快,降低二叉排序树的性能,规定在插入和删除二叉树结点时,要保证任意结点的左、右子树高度差的绝对值不超过1

2)定义

在这里插入图片描述

2.2 基本操作

1)插入

在这里插入图片描述

  • 每次调整的对象都是最小不平衡子树,即以插入路径上离插入结点最近的平衡因子的绝对值大于1的结点作为根的子树

在这里插入图片描述

2)调整最小不平衡子树

在这里插入图片描述

  1. LL:调整A的左孩子节点右上旋
    在这里插入图片描述

  2. RR:调整A的右孩子节点左上旋
    在这里插入图片描述
    在这里插入图片描述

  3. LR:调整A的左孩子的右孩子,先左上旋再右上旋
    在这里插入图片描述
    在这里插入图片描述

  • LR和RL旋转时,新结点究竟是插入C的左子树还是插入C的右子树不影响旋转过程
  1. RL:调整A的右孩子的左孩子,先右上旋后左上旋
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

2.3 查找效率分析(ASL)

在这里插入图片描述

3. B树(多路平衡查找树)

3.1 基本概念

1)来源

在这里插入图片描述
如何进行查找?
在这里插入图片描述

2)如何保证查找效率

策略1:
在这里插入图片描述
策略2:
在这里插入图片描述

4)B树定义

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5)m阶B树的核心特性

在这里插入图片描述

3.2 B树的高度

在这里插入图片描述
在这里插入图片描述

3.3 B树的基本操作

1)B树的查找
  • 在B树上进行查找与二叉查找树很相似,只是每个结点都是多个关键字的有序表,在每个结点上所做的不是两路分支决定,而是根据该结点的子树所做的多路分支决定

在这里插入图片描述

2)B树的插入

easy,见笔记

3)B树的删除

easy,见笔记

4. B+树

4.1 基本概念

在这里插入图片描述
在这里插入图片描述

4.2 基本操作

1)B+树的查找

见笔记

4.3 B树和B+树的区别

见笔记

5. 红黑树

见笔记

四. 索引结构查找

1. 分块查找(索引顺序查找)算法

1.1 算法思想

特点

  • 它吸取了顺序查找和折半查找各自的优点,既有动态结构,又适于快速查找

算法基本思想:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

1)用折半查找查索引

见笔记

2)用顺序查找查索引

见笔记

1.2 查找效率分析(ASL)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

五. 散列结构(哈希结构)查找

在这里插入图片描述
散列查找:基于散列表的数据结构,通过 哈希函数建立关键字与存储地址的联系

1. 基本概念

在前面介绍的线性表和树表的查找中,记录在表中的位置与记录的关键字之间不存在确定关系,因此,在这些表中查找记录时需进行一系列的关键字比较。这类查找方法建立在“比较”的基础上,查找的效率取决于比较的次数

散列函数:

  • 一个把查找表中的关键字映射成该关键字对应的地址的函数,记为Hash(key)=Addr (这里的地址可以是数组下标、索引或内存地址等)。

散列表:

  • 根据关键字而直接进行访问的数据结构。也就是说,散列表建立了关键字和存储地址之间的一种直接映射关系

在这里插入图片描述

2. 哈希函数 (散列函数) 的构造方法

2.1 概述

对于一个给定的关键字key,根据散列函数可以计算出其散列地址,执行步骤如下:
在这里插入图片描述

  • 散列函数是典型的用空间换时间的算法,只要散列函数设计的合理,则散列表越长,冲突的概率越低

2.2 常见的散列函数

设计目标:让不同关键字的冲突尽可能少

1)除留余数法

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2)直接定址法

在这里插入图片描述

3)数字分析法

在这里插入图片描述

4)平方取中法

在这里插入图片描述

3. 处理冲突的方法

  • 任何设计出来的散列函数都不可能绝对地避免冲突。为此,必须考虑在发生冲突时应该如何处理,即为产生冲突的关键字寻找下一个“空”的Hash地址

3.1 拉链法

在这里插入图片描述

3.2 开放定址法

在这里插入图片描述
在这里插入图片描述

1)线性探测法

在这里插入图片描述
在这里插入图片描述
线性探测的缺点:
在这里插入图片描述

2)平方探测法

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

3)伪随机序列法

在这里插入图片描述

3.3 再散列法

在这里插入图片描述

4. 散列查找操作步骤

4.1 拉链法查找步骤

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.1 线性探测法查找操作

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

4.2 线性探测法删除操作

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5. 散列查找的性能分析

5.1 概述

  • 散列表的查找过程与构造散列表的过程基本一致
  • 对同一组关键字,设定相同的散列函数,则不同的处理冲突的方法得到的散列表不同,它们的平均查找长度也不同
  • 虽然散列表在关键字与记录的存储位置之间建立了直接映像,但由于“冲突”的产生,使得散列表的查找过程仍然是一个给定值和关键字进行比较的过程。因此,仍需要以平均查找长度作为衡量散列表的查找效率的度量

散列表的查找效率取决于三个因素:散列函数、处理冲突的方法和装填因子

在这里插入图片描述

  • 散列表的平均查找长度依赖于散列表的装填因子a,而不直接依赖于n或m

在这里插入图片描述

5.2 拉链法性能分析

在这里插入图片描述

在这里插入图片描述

5.3 线性探测法性能分析

在这里插入图片描述
在这里插入图片描述


参考文献:王道数据结构

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

算法——查找 的相关文章

随机推荐

  • js显示服务器路径下的图片,JS处理文件流(如果是图片,显示在当前页面)

    用ajax请求图片资源 服务器以文件流的形式返回 1 返回类型需要设置为 blob 所以需要用原生ajax 不能使用jq 原因 jquery将返回的数据转换为了string 不支持blob类型 当然 你也可以引入组件拓展jq的能力 我知道的
  • leetcode----121.买卖股票的最佳时机

    给定一个数组 它的第 i 个元素是一支给定股票第 i 天的价格 如果你最多只允许完成一笔交易 即买入和卖出一支股票一次 设计一个算法来计算你所能获取的最大利润 注意 你不能在买入股票前卖出股票 示例 1 输入 7 1 5 3 6 4 输出
  • 电脑快捷键大全表格_【Mac新手必看基础篇】Mac电脑快捷键大全

    Mac电脑以卓越的性能和出色的外表获得了越来越多的用户 你是Mac新手吗 你是否能熟练使用Mac电脑呢 刚接触Mac电脑的小伙伴千万不要错过这篇文章 小编给大家准备了Mac使用必看基础篇 Mac快捷键大全 对于新手用户很有帮助哦 一 开机相
  • Git如何合并分支到主干及合并主干到分支

    Git如何合并分支到主干及合并主干到分支 文章目录 Git如何合并分支到主干及合并主干到分支 零 预备知识 一 创建分支 二 合并分支到主干 三 合并主干到分支 参考资料 精益开发实践用看板管理大型项目 Git如何合并分支到主干及合并主干到
  • 合并两个有序数组(超详细)

    合并两个有序数组 给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2 另有两个整数 m 和 n 分别表示 nums1 和 nums2 中的元素数目 请你 合并 nums2 到 nums1 中 使合并后的数组同样按 非递减顺序
  • 一文读懂毫米波/激光/超声波雷达的区别(转)

    不知何时 自动驾驶技术从电影中跳出来 直接被拉到人们视野中 不过 去年特斯拉却因为几起自动驾驶事故 官网不得不把自动驾驶字眼改为辅助驾驶 本期 汽车总动员 讨论的不是自动驾驶 而是被称为自动驾驶汽车 眼睛 的雷达 目前主流的 眼睛 有四类
  • 在ubuntu下编译opencv程序后,执行报下面到错误: error while loading shared libraries: libopencv_core.so.2.4: cannot op

    转自 https www douban com note 327349156 在ubuntu下编译opencv程序后 执行报下面到错误 error while loading shared libraries libopencv core
  • 使用Python 进行分析

    在当今竞争激烈的互联网时代 对于网站的SEO优化至关重要 本文将介绍一种强大的秘密武器 使用Python 进行竞争对手网站分析 通过这种技术 您可以深入了解竞争对手的网站结构 关键词排名和优化策略 为您的SEO优化工作提供有力支持 1 为什
  • 神经网络随手记-1

    目录 sigmod函数主要缺点 Relu 线性整流函数 Leaky ReLU 随机梯度下降法 sigmod函数主要缺点 在输入值变大时 梯度会变得非常小甚至消失 这意味着 在训练神经网络时 如果发生这种饱和 我们将无法根据梯度来更新权重 函
  • 传感器尺寸与像素密度对相片分辨率的影响

    在人们日常生活摄影中 相机的传感器尺寸以及像素素往往决定了一幅图像的清晰度 当然 不同的镜头 不同的CMOS质量等等都会对相片的质量产生影响 今天就简单讨论讨论传感器尺寸和像素密度对图像分辨率的影响 当传感器尺寸一定时 像素越多 也就是像素
  • Python-集合

    探索Python集合的奇妙世界 在Python编程中 集合 Set 是一种强大且有用的数据结构 它用于存储多个不重复的元素 集合的独特之处在于它的元素是无序的 并且每个元素都是唯一的 这使得集合在处理去重和进行快速成员检查时非常有效 创建集
  • 手把手带你打造自己的UI样式库(第五章)之常用页面切图的设计与开发

    常用页面切图的设计与开发 在一些大的前端团队中 前端工程师这个职位会出现一个分支 叫做重构工程师 重构工程师主要负责 HTML 和 CSS 的制作 也就是把设计稿转换成 HTML 和 CSS 代码 重构工作完成以后 把制作好的 HTML 和
  • 【第十四届蓝桥杯单片机组底层驱动测试】

    第十四届蓝桥杯单片机组底层驱动测试 下面分享的是第十四届蓝桥杯单片机组底层驱动代码的测试和相关说明 今年官方提供的资料包中底层驱动代码和以往有了变化 主要代码还是提供给了我们 只是此次没有了相关头文件iic h ds1302 onewire
  • win10剪贴板快捷键win+v

    win v可以出现最近10多次粘贴的数据
  • Ioc容器refresh总结(3)--- Spring源码从入门到精通(三十三)

    上篇文章介绍了 调用bean工厂的后置处理器 主要分为两步 他是在beanFactory预准备标准初始化之后执行invokBeanFactoryPostProcessor 先调用beanDefinitionRegistryPostProce
  • [paper] MTCNN

    MTCNN 论文全称 Joint Face Detection and Alignment using Multi task Cascaded Convolutional Networks 论文下载链接 https arxiv org ab
  • vue.js基础学习(模板语法)

    基础入门 vue js模板语法 1 模板语法 methods 给vue定义方法 this 指向当前vue实例 v html 让内容以HTML形式编译 v bind 绑定动态数据 v noce 当数据发生改变时 插值处内容不发生改变 动态属性
  • maven相关

    1 webxml attribute is required or pre existing WEB INF web xml if executing in update 原因 web项目下缺少 WEB INF web xml 在servl
  • 【AWS】API Gateway创建Rest API--从S3下载文件

    一 背景 在不给AK SK的前提下 用户查看s3上文件 从s3下载文件 二 创建API 1 打开API Gateway 点击创建API 选择REST API REST API和HTTP API区别 来自AWS官网 REST API 和 HT
  • 算法——查找

    文章目录 一 基本概念和评价 1 相关概念 2 查找表 2 1 常见操作 2 2 分类 3 查找算法的评价指标 二 线性结构查找 1 顺序查找算法 1 1 定义 1 2 算法思想 1 3 特点 1 4 分类 1 无哨兵的无序线性表的顺序查找