考研数据结构-查找

数据结构考研查找部分学习笔记 静态查找表:仅支持查找,不允许修改(插入、删除元素)。如存储历史成绩的表格,查询时不会改动。动态查找表:既支持查找,又允许插入、删除等修改操作。像实时更新的商品库存表,查询时可能因进货或卖出而修改。B 树是一种多路平衡查找树,适用于外存存储系统。一棵 m 阶 B 树满足:每个节点最多有 m 个子树,即最多 m-1 个关键字。根节点至少有 2 个子树(除非为叶子节点),非根节点至少有⌈m/2⌉个子树。所有叶子节点在同一层,不带信息。 阅读详情

一、查找的定义

无论是静态查找还是动态查找,都要有查找的对象,也就是包含很多同类型数据的“表”,这个“表”可以理解为一个由同类型数据元素组成的一个“集合”,该集合可以用各种容器来存储,例如数组、链表、树等,我们统称这些存储数据的数据结构为——查找表。可见,查找表有时是我们传统意义的表,有时候是很复杂的一种结构。

二、静态查找和动态查找

1、静态查找

静态查找就是我们平时概念中的查找,是“真正的查找”。之所以说静态查找是真正的查找,因为在静态查找过程中仅仅是执行“查找”的操作,即:(1)查看某特定的关键字是否在表中(判断性查找);(2)检索某特定关键字数据元素的各种属性(检索性查找)。这两种操作都只是获取已经存在的一个表中的数据信息,不对表的数据元素和结构进行任何改变,这就是所谓的静态查找。

2、动态查找

看到上面静态查找的概念,动态查找就很好理解了,个人总觉得动态查找不像是“查找”,更像是一个对表进行“创建、扩充、修改、删除”的过程。动态查找的过程中对表的操作会多两个动作:(1)首先也有一个“判断性查找”的过程,如果某特定的关键字在表中不存在,则按照一定的规则将其插入表中;(2)如果已经存在,则可以对其执行删除操作。动态查找的过程虽然只是多了“插入”和“删除”的操作,但是在对具体的表执行这两种操作时,往往并不是那么简单。

哪种查找对应各自查找表,如有序表可以为静态查找表,也可以为动态查找表。依查找方式决定。

三、几种静态查找

1、顺序查找

       顺序查找是一种最基本、直接的查找方法。它从线性表的一端开始,向另一端逐个取出数据元素的关键字,并与要找的关键字K进行比较,以判定是否存在要找的数据元素。

       以数组存储为例,设数据元素从下标为1的数组单元到下标为Last的单元存放。为了简化算法,使得从后向前查找失败时,不必判断表是否检查完毕,可以在查找开始前,作为哨兵将要查找的关键字K存入下标为0的数组单元。这样,即使原表1~Last单元中没有关键字为K的记录,算法再多一次查找下标为0的单元,也会找到元素而终止,而此时返回数组下标值0表明查找失败。

代码:

Position SequentialSearch(List Tbl, ElementType K)
{
	// 在顺序存储的表Tbl中查找关键字为K的数据元素,使用“哨兵”
	Position i;
	
	Tbl->Data[0] = K; // 建立哨兵
	for(i = Tbl->Last ; Tbl->Data[i] != K ; i --);
	return i; // 查找成功返回数据元素所在单元下标;查找不成功返回0
}

2、二分查找

顺序查找算法的时间复杂度是线性的。而当线性表中数据元素是按大小排列存放时,可以设计一种更高效率的新算法---二分查找。二分查找也称为折半查找,是针对线性表中数据的存放是有序的这一特性,而采用的一种有效方法。

代码:

const int N = 1e5 + 10;

typedef int ElementType;
typedef int Position;
#define NotFound -1

typedef struct LNode *PtrToLNode;
struct LNode // 节点表示的东西 
{
	int Data[N]; // 数据 
	Position Last; // 位置
};
typedef PtrToLNode List;


// 二分查找的非递归实现
Position BinarySearch(List L, ElementType X)
{
	// 在顺序表L中查找关键字为X的数据元素
	Position Left, Right, Mid;
	
	Left = 1;
	Right = L->Last;
	while(Left <= Right)
	{
		Mid = (Left + Right) / 2;
		if(L->Data[Mid] > X)  Right = Mid - 1;
		else if(L->Data[Mid] < X)  Left = Mid + 1;
		else  return Mid;
	}
	return NotFound;
}

        与顺序查找算法不同,我们不必通过在0单元增加哨兵来判断查找是否成功,而是通过判断是否还有合理的剩余查找范围。因此,其实可以将表中元素从0单元开始存起,那么查找失败时算法返回的NotFound就应该是一个负数(-1)。

         算法时间复杂度分析:当线性表中没有所要查找的元素时,算法复杂度达到最大。设经过k步,查找范围从n减小到1。因为每步查找范围时上一步的二分之一,可得到关系n / 2^k = 1,即k=

logn。由此可以得到结论:二分查找算法具有对数的时间复杂度O(log n)。

         至此,我们已知道顺序查找和二分查找都属于静态查找方法,所谓静态是指数据一旦建立起来就基本不添加新的数据元素,也不删除原有的数据元素。因此用数组存放数据并通过下标访问数据元素既方便又高效。但当数据集变化频繁,采用链式存储时,这种基于有序性的二分查找策略就不适用了,但基于二分查找思路的动态结构方法二叉查找树是可以的。

 

 

   

7.1-7.2考研408数据结构查找算法核心知识点深度解析 给定数组[22, 12, 13, 8, 9, 20, 33, 42, 44, 38, 24, 48, 60, 58, 74],设计分块查找方案并计算ASL。(2019年408真题):设线性表长度为n,采用顺序查找,若查找第i个元素的概率 (P_i = \frac{2i}{n(n+1)}),求成功查找的ASL。ASL_{成功} = \sum_{i=1}^n \frac{2i}{n(n+1)} \times (n-i+1) = \frac{n+1}{2}:正确处理剩余区间的奇偶性,保证每次递归区间长度减半。 阅读详情

相关推荐

【考研数据结构分类讲解练习】5-1 查找--选择题--习题篇

目录 题型一:二叉排序树 题型二:在顺序表中进行二分查找 题型三:查找成功的ASL、查找失败的ASL 题型四:哈希(散列)查找 题型五:分块查找 题型六:各类查找之间的对比 题型七:B树 题型一:二叉排序树 二叉排序树考的频率不算高,重点在平衡二叉树。 二叉排序树的失衡调整可以看:《以一种方法调整四种失衡的平衡二叉树》 1-1.在下图所示的平衡二叉树中,插入关键字48后得到一棵新平衡二叉树。在新平衡二叉树中,关键字37所在结点的左、右子结点中保存的关键字分别是( )。【201.

Anthony_4926 1051

数据结构——查找(1)——静态查找、动态查找

在那本经典的数据结构教材中,在查找一章中,将查找分为静态查找和动态查找。 1、静态查找 首先无论是静态查找还是动态查找,都要有查找的对象,也就是包含很多同类型数据的“表”,这个“表”可以理解为一个由同类型数据元素组成的一个“集合”,该集合可以用各种容器来存储,例如数组、链表、树等,我们统称这些存储数据的数据结构为——查找表。可见,查找表有时是我们传统意义的表,有时候是很复...

weixin_34221773的博客 763

(王道408考研数据结构)第七章查找-第二节2:二分查找及其判定树

文章目录一:二分查找法基本思想二:二分查找法代码三:二分查找法效率分析三:二分查找判定树的构造(1)规律(2)构造(3)特点(4)时间复杂度 一:二分查找法基本思想 二分查找法(Binary Search):又称之为折半查找,针对有序顺序表。具体来讲:在有序表中,取中间记录作为比较对象,共有下面几种情况 若给定值与中间记录的关键字相等,则查找成功 若给定值小于与中间记录的关键字,则在中间记录左半区继续查找 若给定值大于与中间记录的关键字,则在中间记录右半区继续查找 不断重复上述过程,直至成功;或无此记录

快乐江湖的博客 2450

考研数据结构chapter7查找

左小右大每个结点|左右子树高度差|

straight_out的博客 1594

【网络协议】TCP的拥塞控制机制

前言 计算机网络中的带宽、交换节点中的缓存和处理机等,都是网络的资源,在某段时间内,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络的性能就要变坏,这种情况就叫做拥塞。 所谓拥塞控制,就是防止过多的数据注入到网络中,从而使网络中的路由器或链路不致过载。要注意用拥塞控制与流量控制的区别,拥塞控制是一个全局性的过程,涉及到所有的额主机、路由器,以及与降低网 拥塞控制的算法有:慢开始、拥塞避免、快重传、快恢复四种。 慢开始和拥塞避免 发送方维持一个拥塞窗口的状态变量,其大小取决于网络的拥塞程度

兰亭风雨的专栏 1万+

在已有win10系统下安装Ubuntu,最后出现执行‘grub-install/dev/nvme0n1p5‘失败的致命错误的解决方案

本人电脑型号戴尔灵越,两个SSD512G固态硬盘,c盘为系统盘. Ubuntu版本为20.04LTS,在官网下载https://ubuntu.com/download/desktop/thank-you?version=20.04.3&architecture=amd64 系统盘制作工具为Rufus-3.15http://rufus.ie/zh/ 安装过程网上很多,在这里就不赘述了. 其他安装过程都很顺利,直至安装最后出现这个 本来安装了到最后还以为成了,结果又不行...... 后.

XiaoChen_gugugu的博客 1万+

计算机考研之数据结构-查找

目录 数据结构-查找 概念 线性查找 顺序查找 折半查找 分块查找 二叉查找树 定义 查找 插入 构造 删除 ...

dianlun2372的博客 322

1.47寸ST7789V3彩屏硬件设计与驱动调试指南

TFT LCD是一种基于薄膜晶体管阵列控制像素明暗的主动式显示技术,其核心依赖于专用驱动IC(如ST7789V3)完成时序生成、GRAM管理与伽马校正。该类小尺寸彩色显示屏广泛应用于嵌入式HMI、IoT终端与可穿戴设备,具备高PPI、低功耗和SPI接口易集成等工程优势。理解RGB565数据格式、SPI Mode 0通信时序及关键寄存器(如0x36方向控制、0x3A像素格式、0x2A/0x2B地址窗口)是实现稳定显示的基础;而正确处理电源设计(严禁5V直供)、复位时序与背光PWM调光,则直接决定系统可靠性与能

weixin_30995917的博客 165

动态查找(c语言)表

一、 动态查找的概念: 动态查找表:表结构在查找过程中动态生成。 要求:对于给定值key, 若表中存在其关键字等于key的记录,则查找成功返回(或者删除之);否则插入关键字等于key 的记录。 二、动态查找表 二叉排序树的定义 二叉排序树的定义(Binary Sort Tree或Binary Search Tree):二叉排序树或者是一棵空树,或者是满足下列性质的二叉树: (1)若左子树不为空,......

wxlwxllxw的博客 3820

高通平台camera构架sensor驱动详解

优先阅读。

a5566255的专栏 3251

angular中访问本地json文件

先在assets文件夹下写一个json文件,这样在打完包之后也可以手动修改json文件内容 1、在需要访问本地json文件的ts文件里面引入 import{HttpClient}from'@angular/common/http'; 2、用ajax请求调用,我这里是用已经封装好的ajax请求调用 gethttp = ()=>{ var self = this self.ajax.getAjax("../../assets/server.json","g...

蜗牛~~ 1830

数据结构—动态查找

深圳大学数据结构动态查找,二叉排序树、平衡二叉树、B树介绍

m0_74175922的博客 2671

详解FreeRTOS:低功耗Tickless模式(高级篇—7)

FreeRTOS提供了一个叫做Tickless的低功耗模式,本篇博文我们就来学习一下如何使用这个Tickless模式。

不脱发的程序猿 1898

考研数据结构之顺序查找、折半查找与分块查找详解(包含真题及解析)

顺序查找是最基础的查找算法,通过遍历数据集合逐个比较目标值与当前元素,直到找到匹配项或遍历结束。

m0_73283053的博客 1039

YOLO11-Seg优化:卷积变体系列篇 | 动态蛇形卷积(Dynamic Snake Convolution) | ICCV2023

动态蛇形卷积(Dynamic Snake Convolution),增强微小特征提取能力,引入到YOLO11-Seg,与C3k2结合实现二次创新

会AI的学姐 370

深度学习图神经网络 (GNN) —— 处理图结构数据(六十九)

本文系统介绍了图神经网络(GNN)的核心概念、主流模型及其应用。主要内容包括: GNN基础:阐述了图结构数据的特性(节点数不定、连接不规则),以及GNN相比CNN/RNN的优势在于处理非欧式空间的图数据。 核心机制:重点讲解了消息传递框架(MPNN),通过聚合邻居信息迭代更新节点表示,并分析了GCN的归一化邻接矩阵计算和GAT的注意力权重机制。 典型模型: GCN:基于归一化邻接矩阵的特征传播 GAT:引入注意力机制区分邻居重要性 GraphSAGE:通过采样解决大图扩展性问题 GIN:理论表达能力最强的图

hello.reader 300

408考研之数据结构的查找——B树

B树

Rukia0213的博客 1749

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

王道数据结构课代表 - 考研数据结构 第七章 查找(B树、散列表) 究极精华总结笔记(C版本)

数据结构与算法 笔记导航🚥🚥🚥 🥬 第一章 绪论 🥕 第二章 线性表 🥪 第三章 栈和队列 🍊 第四章 串-KMP(看毛片算法) 🍒 第五章 树和二叉树 🍀 第六章 图 🍚 第七章 查找(B树、散列表) 🧄 第八章 排序 (内部排序:八大排序动图演示与实现 + 外部排序) 🍔 数据结构与算法 复试精简笔记 🎨 408 全套初复试笔记汇总 传送门 🏃‍🏃‍🏃‍ 如果本篇文章对大家起到帮助的话,跪求各位帅哥美女们,求赞👍 、求收藏、求关注!

clzZ2的博客 8949

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

【考研】数据结构考点——顺序查找

本文内容源于对《数据结构(C语言版)》(第2版)、王道讲解、博主一只小山猪的专栏内容的学习所得心得、笔记整理和总结。一文学懂经典算法系列之:顺序查找(附讲解视频)_一头小山猪的博客-优快云博客_算法学习顺序(上面的链接的所用算法是 java,本文是用 C++ 以顺序表作为存储结构实现的顺序查找算法)【考研复习:数据结构】查找(不含代码篇)_住在阳光的心里的博客-优快云博客优快云21天学习挑战赛//关键字域//其他域}ElemType;//存储空间基地址,建表时按实际长度分配,0号单元留空。......

qq_34438969的博客 3328

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

【数据结构】考研真题攻克与重点知识点剖析 - 第 7 篇:查找

查找:根据给定值,在查找表中确定一个其关键字等于给定值的数据元素(或记录)(查找成功/查找不成功)关键字用来标识一个数据元素(或记录)的某个数据项的值主关键字:可唯一标识一个记录的关键字次关键字:用以识别若干记录的关键字基本思想记录的存储位置与关键字之间存在对应关系对应关系------hash函数(散列函数)概念散列方法选取某个函数,依该函数按关键字计算元素的存储位置,并按此存放查找时,由同一个函数对给定值k计算地址,将k与地址单元中元素关键码进行比较,确定查找是否成功散列函数。

记录我的学习历程 1684

26考研 | 王道 | 数据结构 | 第七章 查找

叶节点,失败节点,null节点说的是一个东西。也就是说红黑树里面的叶子节点并不是最下面一层左根右,根叶黑,不红红,黑路同是二叉排序树,左子树小于根小于右子树,根节点和叶节点都是黑的,不可以有两个相连红色,从一个节点出发到达叶节点的路径上的黑色节点数量一定相同红色节点数目最大可以是黑节点数目的两倍若红黑树所有节点都是黑色的,那肯定是一颗满二叉树(因为根节点到叶节点的所有路径上的黑色节点数量必须相同)和BST,AVL一样,从根出发,左小右大,若查找到一个空叶节点,则查找失败。

m0_74795952的博客 1963

考研计算机 数据结构 查找 考点思维导图 [21考研上岸之旅]

Hello World,我的朋友,这里是一颗小白蛋,大千世界,很高兴以这样的方式与你相遇 前言 好久不见,这一次给大家带来计算机考研中数据机构的内容——查找 2021王道考研考研 + 解题法 = 思维导图 基于知识点的划分和题目的训练整理而成,后续复习中会添加一些有价值的东西。 思维导图 温馨提示:所有思维导图均会不间断更新,所有更新记录会直接在思维导图左侧记录。喜欢的话可以关注收藏点赞,方便寻找哦。若有错误,欢迎指正讨论,一起进步! GoodBye World,我的朋友,这里是一颗小白蛋。2.

weixin_42704719的博客 364

考研数据结构关于查找

最近在复习看眼数据结构谈谈自己的感受 查找是在大量的信息中寻找一个特定的信息元素,在计算机应用中,查找是常用的基本运算,例如编译程序中符号表的查找。本文简单概括性的介绍了常见的七种查找算法,说是七种,其实二分查找、插值查找以及斐波那契查找都可以归为一类——插值查找。插值查找和斐波那契查找是在二分查找的基础上的优化查找算法。树表查找和哈希查找会在后续的博文中进行详细介绍。 查找定义:根据给定的某个值,在查找表中确定一个其关键字等于给定值的数据元素(或记录)。 查找算法分类:   1)静态查找和动态查找;   

YYYQD的博客 357

25考研数据结构复习·7.3树形查找

假设以nh表示深度为h的平衡树中含有的最少结点数,则有n0=0,n1=1,n2=2,并且有。红黑树和平衡二叉树在查找、插入、删除的时间复杂度都是O(log2n)。平衡二叉树最大深度为O(logn),平均查找长度/查找的时间复杂度为O(logn)y是结点z的高度最高的孩子节点,x是结点y的高度最高的孩子节点。👩‍💻 高为h的平衡二叉树最少有几个结点——递推求解。平衡二叉树:适用于以查为主、很少插入/删除的场景;红黑树:适用于频繁插入、删除的场景,实用性更强。左子树结点值 < 根节点值 < 右子树结点值。

Annabelle___的博客 1009

408考研之数据结构的查找——散列查找

哈希查找

Rukia0213的博客 758

数据结构算法动图识记_考研知识难点-计算机综合(408)数据结构-查找

2022年的小伙伴们正在积极备考,大多数考生对计算机综合(408)考研知识点都感到很茫然。研学长为大家按照2020年考研大纲的考察目标对计算机综合(408)考研知识点进行了系统化的整合。下面,各位考生就跟着研学长一起了解一下“考研知识点-计算机综合(408)数据结构-查找”,希望能给各位考生带来帮助。这一章,需要识记关键字、主关键字、次关键字的含义;静态查找与动态查找的含义及区别; 平均查找长度...

weixin_39769183的博客 209
上一篇: 后缀表达式、中缀表达式
下一篇: java大整数类
21RGHLY
博客等级 码龄5年 44粉丝 169原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

21RGHLY

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值