查找

面试-查找(静态查找,动态查找) 【查找结构1】静态查找结构概论 http://hxraid.iteye.com/blog/608982 在计算机许多应用领域中,查找操作都是十分重要的研究技术。查找效率的好坏直接影响应用软件的性能。比如说: (1) 全文检索技术中对文本建立索引之后,对索引的 阅读详情

一.查找概论
1.一些概念
查找表:同一类型的数据元素构成的集合

关键字:数据元素中某个数据项的值,又称为键值,用它可以标识(不一定唯一)一个数据元素。也可以表示一个记录的某个数据项(字段),我们称它为关键码

主关键字:若此关键字能唯一的标识一个记录,则称此关键字为主关键字,这也就意味着,对不同的记录,其主关键字不相同。主关键字所在的数据项成为主关键码

次关键字:可以识别多个数据元素(或记录)的关键字,我们成为次关键字。次关键字可以理解为不以唯一标识一个数据元素(或记录)的关键字,它对应的数据项就是次关键码

2.查找表分类(按操作方式)
静态查找表 动态查找表
静态查找表:只做查找操作的查找表
(1)查询某个“特定的”数据元素是否在查找表中
(2)检索某个“特定的”数据元素及其各种属性

动态表查找:在查找的过程中同时插入不存在的数据元素或者从查找表中删除已经存在的某个数据元素
(1)查找时插入数据元素
(2)查找时删除数据元素

3.改进
为了提高查找效率,我们需要专门为查找操作设置数据机构,这种面向查找操作的数据结构称为查找结构
从逻辑上来说,查找所基于的数据结构是集合,集合中的记录之间没有本质关系 可是要想获得较高的查找性能,我们就能不改变数据元素之间的关系,在存储时可以将查找表组织成表、树结构

例如:对于静态查找表来说,我们不妨应用线性表结构来组织数据,这样可以使用顺序查找算法,如果再对主关键字排序,则可以应用折半查找计数进行高效的查找。
如果需要动态查找,则会复杂一些,可以考虑二叉排序树的查找计数
另外,可以使用散列计数来解决一下查找问题

二.顺序表查找
1.原理
地毯式的比较,只需要从头比到尾,中间如果找到需要找的Key的时候,就返回这个Key的下标,如果全程都找不到的话,那就返回一个0,表示为没有找到 (下标为0的位置我们是不会进行存放数据的)
2.代码
在这里插入图片描述
3.优化
每次循环都要对i <= n进行判断
在比较的时候为了不用每一次都要比较,会设置一个哨兵,也就是在下标为0的地方预先存放好了要寻找的内容,这样的话就节省了比较是否大于等于1这一步
for循环————>while循环
哨兵的位置不一定要在数组开头
在这里插入图片描述
三.有序表查找
1.折半查找(二分查找)
①原理
它的前提就是线性表中的记录必须有序的,线性表必须采用顺序存储。
基本思想:在有序表中,取中间记录作为比较对象,若给定值与中间记录的关键字相等,则查找成功;若给定值小于中间记录的关键字,则在中间记录的左半区继续查找;若给定值大雨中间记录的关键字,则在中间记录的右半区继续查找。不断重复上述过程,直到查找成功,或所有查找区域无记录,查找失败为止
②代码
在这里插入图片描述
2.插值查找
①原理
插值查找是根据要查找的关键字key与查找表汇总的最大最小记录的关键字比较后的查找方法,其核心就在于插值的计算公式
在这里插入图片描述
②代码
在这里插入图片描述
3.斐波那契查找
(1)原理
根据斐波那契序列的特点对有序表进行分割的。要求开始表中记录的个数为某个斐波那契数小1,即n=F(k)-1
在这里插入图片描述
开始将k值与第F(k-1)位置的记录进行比较(及**mid=low+F(k-1)-1)**比较结果也分为三种
(F[k] = F[k - 1] + F[k - 2])
①相等,mid位置的元素即为所求
②> low=mid+1 k-=2 说明low=mid+1说明待查找的元素在[mid+1,high]范围内 k-=2 说明范围[mid+1,high]内的元素个数为n-(F(k-1))= Fk-1-F(k-1)=Fk-F(k-1)-1=F(k-2)-1个 所以可以递归的应用斐波那契查找
③< high=mid-1 k-=1 说明low=mid+1说明待查找的元素在[low,mid-1]范围内,k-=1 说明范围[low,mid-1]内的元素个数为F(k-1)-1个,所以可以递归的应用斐波那契查找
(2)代码
F[k] - 1是为了配合数组从0开始的

//斐波那契查找 首先需要一个斐波那契数列 
int Fibonacci_Search(int *a, int n, int key)
{
	int low, high, mid, i, k;
	low = 1;
	high = n;
	k = 0;
	while(n > F[k] - 1) //计算n位于斐波那契数列的位置 
	{
		k++;
	}
	for(i = n; i < F[k] - 1; i++) //将不满的数值补全 
	{
		a[i] = a[n];
	}
	while(low <= high)
	{
		mid = low + F[k - 1] - 1;
		if(key < a[mid])
		{
			high = mid - 1;
			k -= 1;
		}
		else if(key > a[mid])
		{
			low = mid + 1;
			k -= 2;
		}
		else
		{
			if(mid <= n)
			{
				return mid;
			}
			else
			{
				return n;
			}
		}
	}
	return 0;
} 

四.线性索引查找
索引就是把一个关键字与它对应的记录相关联的过程,一个索引由若干个索引项构成,每个索引项至少应包含关键字和其对应的记录在存储器中的位置等信息。
索引按照结构可以分为线性索引、树形索引和多级索引。我们这里就只介绍线性索引技术。所谓线性索引就是将索引项集合组织为线性结构,也称为索引表。我们重点介绍三个线性索引:稠密索引、分块索引、和倒排索引。

1.稠密索引
指线性索引中,将数据集中的每个记录对应一个索引项。
在这里插入图片描述
对于稠密索引这个索引表来说,索引一定是按照关键码有序排列的 索引项有序也就意味着,我们要查找关键字时,可以用到折半、插值、斐波那契等有序查找算法,大大提高效率。

2.分块索引
稠密索引因为索引项与数据集的记录个数相同,所以空间代价很大。为了减少索引的个数,我们可以对数据集进行分块,使其分块有序,然后再对每一块建立一个索引项,从而减少索引项的个数。
分块有序,是把数据集的记录分成若干块,并且这些块需要满足两个条件:
① 块内无序 即每一块内的记录不要求有序。当然,你如果能够让块内有序对查找来说更理想,不过这就要付出大量时间和空间代价,因此通常我们不要求块内有序
② 块间有序 例如要求第二块所有记录的关键字均要大于第一块中所有记录的关键字,第三块的所有记录的关键字均要大于第二块的所有记录关键字….因为只有块间有序,才有可能在查找时带来效率。
对于分块有序的数据集,将每块对应一个索引项,这种索引方法叫做分场索引。

我们定义的分块索引项结构分三个数据项
在这里插入图片描述
n 最大关键码:它存储每一块中的最大关键字,这样的好处就是可以使得在它之后的下一块中最小关键字也能比这一块最大的关键字要大
n 存储了块中的记录个数,以便于循环时使用

n 用于指向块首数据元素的指针,便于开始对这一块中的记录进行遍历。

分块索引是分两步进行:
① 在分块索引表中查找要查关键字所在的块。由于分块索引表是块间有序的,因此很容易利用折半、插值等算法得到结果
②根据块首指针找到相应的块,并在块中顺序查找关键码**(可能是无序的)**

3.倒排索引
倒排索引源于实际应用中需要根据**属性(或字段、次关键码)**的值来查找记录。这种索引表中的每一项都包括一个属性值和具有该属性值的各记录的地址。由于不是由记录来确定属性值,而是由属性来确定记录的位置,因而称为倒排索引。

倒序索引的倒序,指的是这个索引是从关键词中查找对应的源的,而不是从源中检索对应的关键词。
索引项的通用结构
①次关键码
②记录号表:存储具有相同次字关键字的所有记录的记录号(可以指向记录的指针或者是该记录的主关键字)

倒排索引的优点显然是查找记录非常快,基本等于生成索引表后,查找时都不用去读取记录,即可以得到结果。但是它的缺点是这个记录号不定长,可多可少。

稀疏数据分析:马蹄估计量及其理论性质 稀疏数据分析:马蹄估计量及其理论性质基本框架half-Cauchy分布为什么它叫马蹄估计量后验均值、shrinkage与κ\kappaκθ\thetaθ的边缘先验分布的阶马蹄估计的一致性收敛速率Clarke-Barron(1990)引理马蹄估计的最优收敛速率 这是对The horseshoe estimator for sparse signal这篇论文的回顾,这篇论文在Modern Bayesian statistics与Bayesian Machine Learning领域比较重要,它提出了一种新的先验 阅读详情

相关推荐

从网格划分到端口接地:一份给ADS新手的Momentum RF仿真避坑实操指南

本文为ADS新手提供Momentum RF仿真的实用指南,涵盖网格划分、端口接地、特殊结构处理等关键设置技巧。通过30-50 cells/λ原则、1/10波长限制等黄金法则,帮助用户平衡仿真精度与效率,避免常见错误,提升电磁仿真结果的准确性。

weixin_33692284的博客 506

【数据结构--查找】

则查找成功,返回该元素在线性表中的位置,若已经查找到线性表另一端,但还没查找到符合条件的元素,则返回查找失败的信息。线性探测法可能使第i个散列地址的同义词存入第i+1个散列地址,这样本应存入第i+1个散列地址的元素就争夺第i+2个散列地址的元素的地址,从而造成大量元素在相邻的散列地址上堆积,大大降低了查找效率。分块查找的时间复杂度取决于块的数量以及块内元素的数量,在最坏的情况下(即目标位于最后一个块的最后一位),不仅需要查找完所有的块,也需要在最后一个块中遍历完所有的元素,因此,时间复杂度为。

Pumpkin_O的博客 2002

vivado实现SDI接口

XAPP1249,用来介绍UHD_SDI的实现。

Huskar_Liu的博客 7076

Linux中文件查找方法大全

每一种操作系统都是由成千上万个不同种类的文件所组成的。其中有系统本身自带的文件,用户自己的文件,还有共享文件等等。我们有时候经常忘记某份文件放在硬盘中的哪个地方。在微软的Windows操作系统中要查找一份文件是相当简单的事情,只要在桌面上点击“开始”-“搜索”中就能按照各种方式在本地硬盘上,局域网络,甚至在INTERNET上查找各种文件,文档。  可是使用Linux的用户就没有那么幸运了,在Lin

一个人的精彩 4174

[ensp报错:USG6000V错误代码45解决方案]

[ensp报错:USG6000V:错误代码45解决] [ensp报错:USG6000V:错误代码45解决] 第一种处理方式: ensp的45错误帮助文档里的解决方法:(这里就不说了,上华为爸爸的图) ensp的45错误:如果你的45错误不是描述的那个,可能是ensp与virtualbox不兼容了。 错误描述:具体表现为在virtualbox里没有vfw_usg的条目,虚拟介质管理器里也没有相应的条目: 就是vfw_usg_vdi这个 这种情况下你把ensp卸载重装多少次都没用,原因在两个软件的兼容

weixin_45456536的博客 3万+

数字设计实验:RISC-V指令单周期CPU

本文旨在介绍RISC-V指令单周期CPU的设计思路和仿真实现(含代码)

2401_83740084的博客 2714

【Linux】查找命令:find,locate,whereis,which,type 及其区别

这是因为linux系统会将 系统内的所有文件都记录在一个数据库文件中,当使用whereis和下面即将介绍的locate时,会从数据库中查找数据,而不是像find命令那样,通 过遍历硬盘来查找,效率自然会很高。locate的速度比find快,它并不是真的查找,而是查数据库,一般文件数据库在/var/lib/slocate/slocate.db中,所以locate的查找并不是实时的,而是以数据库的更新为准,which命令的作用是,在PATH变量指定的路径中,搜索某个系统命令的位置,并且返回第一个搜索结果。

我的笔记本 3532

近五年体内微/纳米机器人赋能肿瘤精准治疗综述:以 GBM 为重点

摘要 微/纳米机器人在实体瘤治疗领域展现出突破性潜力,通过主动运动能力解决传统纳米药物递送效率低、渗透不足等核心问题。2021-2025年间形成三条技术路线:1) 磁驱、声驱等运动增强递送实现深层渗透;2) 与免疫治疗融合实现原位免疫唤醒;3) 针对胶质母细胞瘤开发跨屏障递送系统。研究重点从单一运动性能转向"运动-分布-疗效"的系统评价,需建立标准化指标评估运动学参数、肿瘤分布均匀性和安全性。未来挑战在于临床转化的可制造性、闭环操控及生物相容性优化,特别是对血脑屏障穿透等复杂场景的系统集

AllenLV的博客 5175

数据结构---查找

🌞欢迎来到数据结构的世界🌟本文由卿云阁原创!🙏作者水平很有限,如果发现错误,请留言轰炸哦!

zzqingyun的博客 892

目标检测YOLO实战应用案例100讲-跨模态、多级别融合的RGB-D显著目标检测方法研究(续)

在第二章介绍了本研究的跨模态特征融合方法,第二章对于多级别特征的融合, 使用的是与基线模型baseline相同的方法:相邻级别的特征中,高级特征进行上采 样到与低级特征相同的尺度,再将高级特征通过降维得到与低级特征相同的通道数 量,最后对二者进行特征叠加,如此自顶向下的进行多级别的特征融合。本章主要 介绍本研究在特征层面的另一发现,并基于此发现引出的本文的第二个创新点:多 级别特征的融合方法。另外,在网络最深层,本文设计了一个新的模块来获取大的 感受野,对于大尺度目标能够增加更多语义信息,提升检测效果。 骨

qq_36130719的博客 469

C#构建高精度预测模型:从数据预处理到模型部署的实战指南

【代码】C#构建高精度预测模型:从数据预处理到模型部署的实战指南。

墨夶的博客 1265

数据结构(七)——查找的基本概念

平均查找长度(ASL, Average Search Length)——所有查找过程中进行关键字的比较次数的平均值。关键字 —— 数据元素中唯⼀标识该元素的某个数据项的值,使⽤基于关键字的查找,查找结果应该是唯⼀的。查找表(查找结构)—— ⽤于查找的数据集合称为查找表,它由同⼀类型的数据元素(或记录)组成。查找 —— 在数据集合中寻找满⾜某种条件的数据元素的过程称为查找。查找长度——在查找运算中,需要对比关键字的次数称为查找长度。查找效率:查找成功和查找失败都是O(n)的数量级。

señoritaw的博客 976

一文掌握DrissionPage的详细使用

是一个基于 Python 的网页自动化工具,主要用于网页数据的抓取、自动化操作和测试。它结合了 Selenium 和 Requests 的优点,提供了更简洁、高效的 API,适用于各种网页自动化任务。DrissionPage 是一个功能强大且易于使用的网页自动化工具,适用于各种网页自动化任务。希望本文的 DrissionPage 的基本使用方法和一些高级功能能够帮助到你。

数据知道的博客 1万+

数据结构中的查找(顺序查找、折半查找、分块查找)

查找,就是根据给定的某个值在一组记录集合中确定某个“特定的”数据元素(记录)或者找到属性值符合特定条件的某些记录。 查找表是由同一类型的数据元素(或记录)构成的集合。 关键字:是数据元素(或记录)中某个数据项的值,用以标识(识别)一个数据元素(或记录)。 主关键字:可以识别唯一的一个记录的关键字。 次关键字:可以识别若干记录的关键字。 对查找表常进行的操作: (1)查询某个“特定的”数据元素是否在查找表中 (2)检索某个“特定的”数据元素的各种属性 (3)在查找表中插入一个数据元素 (4)从查找表中删去某个

ChanCherry的博客 1万+

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

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

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

数据结构——静态查找表&动态查找表的区别用法【顺序查找-线性查找-折半查找-二分查找-有序表查找-插值查找-斐波那契查找-索引顺序表查找-分块查找】

目录: 一:静态查找表(Static Search Table) 主要操作: 二:动态查找表(Dynamic Search Table) 主要操作: 三:顺序查找(Sequential Search)【线性查找】 1.查找过程 2.时间复杂度 四:折半查找(Binary Search)【二分查找】【有序表查找】 1.查找过程 2.时间复杂度 3.二分查找在静态查找表&amp...

刘鑫磊 9756

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

查找算法之顺序查找,折半查找,二叉查找树

查找表的概念 查找表是由同一类型的数据元素构成的集合。例如电话号码簿和字典都可以看作是一张查找表。 在查找表中只做查找操作,而不改动表中数据元素,称此类查找表为静态查找表;反之,在查找表中做查找操作的同时进行插入数据或者删除数据的操作,称此类表为动态查找表。 顺序查找 顺序查找的查找过程为:从表中的最后一个数据元素开始,逐个同记录的关键字做比较,如果匹配成功,则查找成功;反之,如果直到表中第一个关键字查找完也没有成功匹配,则查找失败 同时,在程序中初始化创建查找表时,由于是顺序存储,所以将所有的数据元素存储

嵌入式与Linux那些事的博客 6938

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

顺序表查找——顺序查找、有序表查找(多种方法)及次优查找树

查找8.2 顺序表8.2.1 顺序表的查找基本思想顺序存储结构下的顺序查找算法平均查找长度8.2.2 有序表的折半查找折半查找的算法思想折半查找算法一般代码二叉搜索树 8.2 顺序表 采用顺序存储结构的数据表称为顺序表。顺序表适合作静态查找。 8.2.1 顺序表的查找 基本思想 设有n个数据元素的顺序表,从表的一端(前端或后端)开始,用给定的值依次和表中各数据元素的关键字进行比较,若在表中找到某个数据元素的关键字和给定值相等,则查找成功,给出该数据元素在表中的位置;若查遍整个表,不存在关键字等于给定值的数据

lseaJK的博客 1万+

查找(顺序查找,折半查找,分块查找)

查找 ​ 查找是在查询数据过程中必不可少的一个环节,那么如何来进行查找,以及如何进行高效率的查找,就是接下来要解决的问题。 文章目录查找查找的概念顺序查找顺序查找-算法原理顺序查找-算法实现顺序查找-性能分析折半查找折半查找-算法原理折半查找-算法实现折半查找-性能分析分块查找分块查找-算法原理分块查找-算法实现分块查找-性能分析 查找的概念 ​ 首先提出一些定义,在查找元素的时候,必然是从一堆数据中去找自己想要的数据,那么这种由同一类型的数据元素构成的集合就被称为查找表。对于查找表可执行以下操作: 查询

weixin_44267007的博客 4361

C++数据结构之查找——静态查找表(顺序查找、折半查找、分块查找 带有gif以及图示)

本文对查找进行介绍并对静态查找进行重点解释和实现,附有GIF动图以及相关图示方便读者进行阅读

m0_56398315的博客 7066

顺序查找、折半查找、分块查找

查找:在数据集合中寻找满足某种条件的数据元素的过程称为查找。查找的结果一般分为两种:一是查找成功,即在数据集合中找到满足条件的数据元素;二是查找失败。 查找表(查找结构):用于查找的由同一类型的数据元素(或记录)构成的集合。查找表本质是表中记录之间仅存在"同属一个集合”这个逻辑的集合结构。为此,我们在数据元素之间人为地加上一些关系,以便按照某种规则查找,即用另一种数据结构来表示查找表。

24考研人晴落的博客 4511

查找算法总结:顺序查找,二分查找,分块查找,散列查找,二叉排序树查找

查找算法包括:顺序查找,二分查找,分块查找,散列查找,二叉排序树查找,B树 B树用于查找磁盘数据,这里不进行分析顺序查找思想:从头到尾一个一个比较,简单,时间复杂度O(n)java实现:public static int seqSearch(List<Integer> arr, int key) { for (int i = 0; i < arr.size(); i++) {

抬头看世界 6965

七大查找算法(顺序查找、折半查找、插值查找、斐波那契查找、分块查找、哈希查找、树表查找)

一、顺序查找 顺序查找适合于存储结构为顺序存储或链接存储的线性表。 基本思想:顺序查找也称为线形查找,属于无序查找算法。从数据结构线形表的一端开始,顺序扫描,依次将扫描到的结点关键字与给定值k相比较,若相等则表示查找成功;若扫描结束仍没有找到关键字等于k的结点,表示查找失败。 二、折半查找 元素必须是有序的,如果是无序的则要先进行排序操作。 基本思想:也称为是折半查找,属于有序查找算法。用给定值...

lonely_yfl的博客 4032

【Python查找算法】二分查找、线性查找、哈希查找

【Python查找算法】二分查找、线性查找、哈希查找原理详解示例与应用

qq_35831906的博客 1958

查找——分块查找

文章目录分块查找的概念分块查找的基本思想分块查找的平均查找长度 分块查找的概念 当数据表中的数据元素很多时,可以采用分块查找。 分块查找又称为索引顺序查找。它汲取了顺序查找和折半查找各自的优点,既有动态结构,又适于快速查找。 分块查找的基本思想 基本思想: <1> 将查找表分为若干子块,要求所有这些块分块有序,即后一块中所有元素的关键码均大于前一块中所有元素的关键码(块间有序);而每个块内的元素可以是无序的(块内无序)。 <2> 另外要为这些块建立一个索引表。索引表中的每个元素

薛定谔的猫的博客 1万+

查找(顺序查找、二分查找、插值查找)

查找定义:根据给定的某个值,在查找表中确定一个其关键字等于给定值的数据元素(或记录)。 查找表按照操作方式来分有两大种:静态查找表和动态查找表。 动态查找表:在查找过程中同时插入查找表中不存在的数据元素,或者从查找表中删除已经存在的某个数据元素。 1. 顺序查找 /* 顺序查找,a为数组,n为要查找的数组元素个数,key为要查找的关键字*/ int Sequential_Sear

静水流深 3万+

【数据结构】查找1——线性表的查找(顺序查找、折半查找、分块查找)

【数据结构】查找1——线性表的查找(顺序查找、折半查找、分块查找)

FishC的博客 4368
上一篇: 哈夫曼编码
下一篇: 二叉排序树
ZoeLandia
博客等级 码龄6年 734粉丝 183原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值