数据结构【查找】

数据结构——查找 7.查找 1)查找的基本概念 2)顺序表的查找 3)二叉排序树(或称二叉查找树)和平衡二叉排序树 4)Hash表及其查找 5)查找算法的应用 阅读详情

第八章 查找

提前了解:
1、关键字: 若关键字能唯一标识一个数据元素,则关键字称为主关键字;若能标识若干个数据元素的关键字称为次关键字;
2、查找(检索):顾名思义,给定一个值,进行查找;若存在值则查找成功,反之查找失败;
3、查找方法评价指标:其中pᵢ为查找第i个记录的概率;cᵢ查找第i个记录需要进行比较的次数;
在这里插入图片描述

一、静态查找
1、定义:在查找时只对数据元素进行查询或检索,查找表称为静态查找表;
2、顺序查找:给定值,挨个找,从大往小比;

  • 算法分析:
    • 查找成功时的平均查找长度ASL;
      在这里插入图片描述
    • 查找不成功时ASL=3(n+1)/4;

3、折半查找(二分查找):效率高;查找表中的所有记录都是按照关键字有序或者降序排好的;查找时都是将待查记录所在的区间缩一半,直到找到或者找不到为止;查找成功时ASL=n+1/n·log₂(n+1)-1,但n>50时,ASL=log₂(n+1);

  • 查找思想:采用Mid、Low、Hight指针;和二分排序差不多;Mid=(Low+Hight)/2取下整(就是数学里的取中位数);
    在这里插入图片描述

4、散列查找
二、动态查找
1、定义:在实施查找的同时,插入查找表中不存在的记录,或从查找表中删除已存在的某个记录,查找表称为动态查找表;
2、二叉排序树的查找:找最大值即为右子树最后的结点值,找最小值即左节点最后的结点值;或为空,或具有以下性质;

  • 左子树不为空即所有左子树上的结点都小于根结点的值;
  • 右子树不为空即所有右子树上的值大于根结点的值;
  • 左右子树也分为二叉排序树;

3、二叉排序树的插入:遇到比根大值往右走,遇到比根小值往左走;
在这里插入图片描述

4、二叉排序树的删除:如果被删的结点只有一个子结点,可直接将子结点连到被删结点的父结点上;若被删结点有两结点,那就以右子树内最小的结点代替被删的结点树;
在这里插入图片描述
在这里插入图片描述

5、二叉排序树的性能分析:插入和删除运行时间为O(H),H为树的高度;
6、二叉排序树的查找如何求ASL:左是等概率的情况,右是最坏的情况;
在这里插入图片描述

7、二叉排序树查找算法的平均查找长度ASL,主要取决于树的高度,即与二叉树的形态有关。如果二叉排序树是一个单支树,其平均查找长度与单链表相同,为O(n);如果二叉排序树的左右子树的高度差不超过1,这样的二叉排序树称为平衡二叉树。它的平均查找长度达到O(log₂n)。
8、平衡二叉树:左右子树深度之差不超过1,左右子树也都是平衡二叉树;递归定义;

  • 平衡因子:左子树的深度减去右子树的深度则称为该结点的平衡因子;一般只能是-1、0、1;一棵二叉树既是二叉排序树又是平衡二叉树则称为平衡二叉排序树;
  • 平衡旋转:保持有序性,又具有平衡性;
    在这里插入图片描述
  • LL型平衡化旋转(右单旋转):若在结点A的左孩子B结点的左子树上插入新结点,则回导致不平衡,那么先保持左孩子B结点和孩子的左子树不动,将它孩子的右子树移到结点A的左边,最后进行右翻转,A结点变成B结点(连带它们的子树一起变);
  • LR型平衡化旋转(先左后右双旋转):若在A的左孩子(L)的右子树®上插入了新结点,A的平衡因子由1增至2,导致以A为根失去平衡,需要进行两次旋转操作。先左旋转后右旋转。先将A结点的左孩子B的右子树的根结点C向左上旋转提升到B结点的位置,然后再把该C结点向右上旋转提升到A结点的位置;
  • RL平衡旋转(先右后左双旋转):若在A的右孩子®的左子树(L)上插入了新结点,A的平衡因子由-1减至-2,导致以A为根的子树失去平衡,需要进行两次旋转操作。先右旋转后左旋转。先将A结点的右孩子B的左子树的根结点C向右上旋转提升到B结点的位置,然后再把该C结点向左上旋转提升到A结点的位置。RL型平衡化旋转;
  • RR平衡旋转(左单旋转):若在A的右孩子®的右子树®上插入了新结点,A的平衡因子由-1减至-2,导致以A为根的子树失去平衡,需要一次向左的旋转操作。将A的右孩子B向左上旋转代替A成为根结点,将A结点向左下旋转成为B的左子树的根结点,而B的原左子树则作为A结点的右子树。

三、散列表
1、哈希函数:简单理解就是你给一个数据,它给你个对应的地址;
2、哈希表:应用哈希函数,由记录的关键字确定记录在表中的地址,并将记录放入此地址,然后构成的表(里头是数据对应着地址位);
3、哈希查找:利用哈希函数进行查找的过程;
4、冲突:两不同数据地址一样;
5、同义词:两不同数据地址一样;
6、设计方法(由于哈希函数通常是一种压缩映象,所以冲突不可避免,只能尽量减少;当冲突发生时,应该有处理冲突的方法)

  • 散列表的空间范围,即确定散列函数的值域;
  • 构造合适的散列函数,使得对于所有可能的元素(记录的关键字),函数值均在散列表的地址空间范围内,且出现冲突的可能尽量小;
  • 处理冲突的方法;即当冲突出现时如何解决。
    7、如何构造:只要使任何关键字的哈希函数值都落在表长允许的范围之内即可;
    8、评价因素:
  • 散列函数的构造简单;
  • 能“均匀”地将散列表中的关键字映射到地址空间;所谓“均匀”(uniform)是指发生冲突的可能性尽可能最少。

9、方法:直接定址法、数字分析法、除留余数法、冲突处理法;
10、冲突处理方法:开放定址法;

  • 线性探测法
    • 优点:只要表不满总会找到个地址;
    • 缺点:容易聚集(也就是每个冲突的地址都会比较靠近,那么会产生更多的冲突机会);
      在这里插入图片描述
  • 二次探测法(循环的表)
    • 优点:探测序列跳跃式地散列到整个表中,不易产生冲突的“聚集”现象;
    • 缺点:不能保证探测到散列表的所有地址;
      在这里插入图片描述
  • 再散列法
    • 优点:不易产生冲突的“聚集”现象;
    • 缺点:计算时间增加;
  • 链地址法(简单来说就是余数相同的放一块)
    • 优点:不易产生聚集,删除也很简单;
      在这里插入图片描述

11、散列查找性能分析:尽管散列表在关键字与记录的存储地址之间建立了直接映象,但由于“冲突”,查找过程仍是一个给定值与关键字进行比较的过程,评价哈希查找效率仍要用ASL;

  • 哈希查找时关键字与给定值比较的次数取决于:
    • 哈希函数;
    • 处理冲突的方法;
    • 哈希表的填满因子a;
    • a=表中填入的记录数/哈希表长度;

12、散列表的ASL总结公式:
在这里插入图片描述

13、例题:
在这里插入图片描述
在这里插入图片描述

数据结构 -- 顺序查找和折半查找 查找表(查找结构):用于朝朝的数据集合称为查找表,它由同一类型的数据结构元素(或记录)组成。+n+n)/n+1 = n/2+n/(n+1)若查找到某个元素大于查找目标,则可判定为查找失败(后面的元素都大于查找目标)该元素的某个数据项的值,使用基于关键字的查找,查找结果应该是唯一的。若查找表是“动态查找表”,更好的实现方式 – 使用链式存储。查找成功:ASL=(n+1)/2 时间复杂度:O(n)?,逐步缩小查找区间,直到找到目标元素或查找区间为空。共有14个元素可能被查找,各自被查找的概率为1/14。 阅读详情

相关推荐

【数据结构】顺序查找和折半查找

数据结构之查找算法 摘要:在本篇文章中,主要讲述了在数据结构中所涉及的几大查找算法,包括:顺序查找、折半查找、分块查找和散列表查找。这些查找方式都是数据结构中最基本的查找方式,并且在数据结构中运用广泛。在查找算法中,最为重要的便是算法的平均查找长度, ...

小白_xm 1万+

数据结构之索引查找(分块查找)

索引查找也称为分块查找,也是顺序查找的一种改进方法,在索引查找法中,除表本身之外还需要建立一个索引表。由分块查找可知,它要分开进行,块内元素之间无大小关系,块与块之间有大小关系(比如说:第二块中的元素肯定要比第一块中大,第三块中元素肯定要比前两块中的元素大)所以索引表是有序的,可以进行二分查找进行查找由于要有索引所以要用到结构体。......

&volume的博客 5716

【数据结构】顺序查找

主要内容 基本概念 顺序查找(Sequential Search) 基本概念 在介绍查找算法前我们先重温几个重要概念: 1)数据:客观事物的符号表示,是所有能输入到计算机中,并能被计算机程序处理的符号的总称。如数学计算中用到的整数和实数,文本编辑中用到的字符串,多媒体程序处理的图形、图像、声音及动画等通过特殊编码定义后的数据。 2)数据元素:数据的基本单位,在计算机中通常作为一个整...

春雪阁 2288

数据结构—查找

平均查找长度(ASL)是指在查找过程中,成功查找和不成功查找的平均比较次数。成功查找的ASL(ASL_success):在查找过程中找到目标元素所需的平均比较次数。不成功查找的ASL(ASL_failure):在查找过程中未找到目标元素所需的平均比较次数。可以让各个结点包含更复杂的信息,需确定好各个结点之间比较大小的规则,上面这是一种非递归的实现在插入操作中,只要将最小不平衡子树调整平衡,则其他祖先结点都会恢复平衡二叉排序树、平衡二叉树、红黑树都是适合于查找的二叉树。

wujiao__11的博客 1784

数据结构-查找

1.线性表的查找 1.1顺序查找 顺序查找的查找过程为:从表的一端开始,依次将记录的关键字和给定值进行比较,若某个记录的关键字和给定值相等,则查找成功;反之,若查找整个表后,仍然为找到关键字和给定值相等的记录,则查找失败。 顺序查找方法适用域线性表的顺序存储结构,又适用于线性表的链式存储结构。 下面给出顺序存储的数据元素类型定义和顺序表的定义 typedef struct{ KeyType key; //关键字域 I...

weixin_62313265的博客 1886

强化学习-----DQN(Deep Q-network)

DQN(Deep Q-Network)是一种基于深度学习和强化学习的算法,由DeepMind提出,用于解决离散动作空间下的马尔科夫决策过程(MDP)问题。它是首个成功将深度学习应用于解决强化学习任务的算法之一。DQN,即深度Q网络(Deep Q-network),是指基于深度学习的Q-Learing算法。那什么是Q-leaning?可以看上一篇文章Q-learning是一种经典的强化学习算法,用于解决马尔可夫决策过程(Markov Decision Process,MDP)中的控制问题。

qq_74722169的博客 2万+

数据结构之顺序查找

接下来的几篇博客都是关于查找的;主要有顺序查找;折半查找(应用于有序表);二叉排序树查找;哈希查找; 排序直接的数据结构介绍; 顺序查找和折半查找是顺序表存储;二叉排序树是二叉树存储;哈希查抄是类图(和图的邻接表存储相似); 头文件(Search.h); # ifndef _SORT_ typedef int KeyType; typedef struct { ...

qinjiawei_156558的博客 5174

UE4游戏开发:GameInstance与GameMode的实战应用与避坑指南

本文深入解析了UE4中GameInstance与GameMode的核心差异与实战应用。GameInstance作为贯穿游戏进程的全局单例,负责跨关卡数据持久化与系统管理;而GameMode则定义特定关卡内的游戏规则与逻辑,随关卡加载销毁。文章通过数据存储、动态模式切换及网络游戏等场景,提供了清晰的应用指南与常见避坑方案,帮助开发者构建更健壮的UE4游戏架构。

kubernetes8ctl的博客 230

数据结构之查找

文章目录数据结构 查找顺序查找老刘完蛋玩意折半查找分块查找 数据结构 查找 1.查找表:由同一类型的数据元素(或记录)构成的集合。 2.关键字:数据元素(或记录)中某个数据项的值,用以标识一个数据元素(或记录)。 3.查找:在查找表中确定一个其关键字等于给定值的记录或数据元素。 4.动态查找表:在查找的同时对表做修改操作(插入和删除),否则为静态查找表。 5.平均查找长度:ASL=求和Pi*Ci(Pi为查找表中第i个记录的概率,Ci为和给定值进行过的关键字个数) 顺序查找 老刘完蛋玩意 折半查找 分块查找

老刘的博客 1456

WhatsApp协议算法

我想其实有很多人还不太了WhatsApp群控,简单来说,它和我们常使用的微信聊天软件是类似的,只不过它是基于通讯录的,操作起来比较简单便捷,所以现在有很多国家都喜欢用WhatsApp。一般情况下,筛号不会造成账号被封的情况,但是呢,如果筛号的频率太快,就会被系统限制筛号能力,不再返回筛号结果,所以,筛号数量和速度一定要控制好。前天逛街突然灵光一现,为什么不试试多路访问呢,简单来说就是信道复用技术,马上跑回家,调取接口,接入通道,导入已经转换成协议的账号,成功登录!

2403_87755661的博客 1943

abb机器人指令手册_ABB机器人配置圆形输送链跟踪

更多内容请点击上方ABB机器人实战技巧关注也可点击公众号下方往期经典浏览更多内容转载请先后台留言,大家一起支持原创,推动机器人使用和发展本公众号对各类ABB机器人应用,仿真,毕业设计提供技术支持,详细后台留言本公众号诚挚希望与各机器人培训机构,机器人使用单元合作,提供技术支持,详细后台留言1. 通常的机器人输送链跟踪,均为直线输送链跟踪,例如下图2. 有些情况,输送链为圆形,例如...

weixin_39849894的博客 2045

数据结构实训——查找

折半查找的基本思想为:在有序表中,取中间记录作为比较对象,若给定值与中间记录的关键码相等,则查找成功;采用散列技术将记录存储在一块连续的存储空间中,这块连续的存储空间称为散列表(Hash Table),将关键码映射为散列表中适当存储位置的函数称为散列函数(Hash Function),所得的存储位置址称为散列地址。但是散列不是一种完整的存储结构,因为它只是通过记录的关键码定位该记录,很难完整地表达记录之间的逻辑关系,所以,散列主要是面向查找的存储结构。/*设元素r[o]为要查找的关键字k(即监视哨)*/

Wangawf的博客 1740

UEC++ 虚幻5笔记(数字孪生示例) day13

文件读取与写入,数字孪生入门制作

qq_44924388的博客 3843

数据结构之静态查找表的查找方法

查找是一种常用的基本运算。查找表是指由同一类型的数据元素(或记录)构成的集合。由于“集合”中的数据元素之间存在着完全松散的关系,因此,查找表是一种非常灵活的数据结构。

qq_33501207的博客 2867

【Linux】Windows11 安装 WSL2 并运行 Ubuntu 22.04 详细操作步骤

Windows 11 安装 WSL2 和 Ubuntu 22.04 指南 本文详细介绍在 Windows 11 上安装 WSL2 和 Ubuntu 22.04 的完整步骤,包括: WSL2 与 VirtualBox 的性能对比优势 系统版本检查与升级方法 两种安装方式(一键安装和手动安装) Ubuntu 22.04 的安装与配置 存储位置管理及迁移技巧 常用 WSL2 命令速查表 文章还提供了性能优化建议和常见问题解决方案,适合开发者和 Linux 爱好者快速搭建高效的开发环境。

No8g攻城狮的博客 2万+

“反激电源”是AC/DC隔离电源还是DC/DC隔离电源?

所以在一些场景,我们的输入电压是一个DC,但是我们仍然需要隔离电源的需求,我们就会只采用图9.2的右半部分。在这个场景下“反激电源”是DC/DC。所以此AC/DC的本质是将AC变成高压的DC之后,用带隔离变压器的反激式开关电源产生一个隔离的、稳定的直流电压。一般在讲述各种电源的拓扑的文章和书籍都是在讲述AC/DC的电源拓扑分类的时候,讲述Flyback。反激式开关电源是指使用反激高频变压器隔离输入输出回路的开关电源,反激式隔离变压器开关电源重点表述的是开关电源包含变压器的拓扑结构。

qq_43416206的博客 1295

数据结构:查找(一)顺序查找、折半查找

查找是在数据集合中确定特定元素是否存在,并在存在时确定其位置的操作。在计算机科学领域,数据集合可以是数组、链表、树、图等各种数据结构,而查找操作则是众多应用程序和系统的核心功能之一。例如,在数据库管理系统中,经常需要根据用户给定的关键字查找相应的记录;在搜索引擎中,要在海量的网页数据里快速找到与用户查询相关的信息。

weixin_69477306的博客 1433

simulink构建一个基于 BP(反向传播)神经网络 的自适应 PID 控制系统

本文介绍了基于BP神经网络的自适应PID控制系统设计方法。系统通过神经网络实时调整PID参数,实现智能控制。主要内容包括:1)系统架构设计,采用误差反馈和在线学习机制;2)详细建模步骤,从被控对象定义到神经网络结构设计;3)S-Function实现核心算法,包含前向传播、PID计算和反向传播;4)仿真结果分析,显示神经网络PID在响应速度、超调控制和鲁棒性方面的优势;5)进阶建议和常见问题解决方案。该方法突破了传统PID的局限性,实现了具有自我学习能力的智能控制。

xiaoheshang_123的博客 52
上一篇: 数据结构【排序】
下一篇: samba挂载报错“mount error(13): Permission denied“
Chensay.
博客等级 码龄6年 1万+粉丝 122原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值