1.5查找

news/2024/10/23 11:25:38/

1.5查找

查找是重要的一种操作,又称为检索。查找的对象既可以是线性表,也可以是树形结构,甚至是文件结构。

查找的主要方式有顺序查找,折半查找,基于树形结构的查找即散列法。

1.5.1查找的基本概念

关键字是数据元素中某个数据项的值,用它可以标识一个数据元素。能够唯一表示一个数据元素的关键字成为关键字,用来标识若干各数据元素的关键字称为次关键字。或者说,对任一值value,查找表中最多只能有一个记录的主关键字是value,但次关键字为value的记录可能有多个记录。

根据给定的某个值key,在查找表中寻找关键字Ki=key的记录的过程称为查找,也称为检索。若查找表中存在这样的记录,称查找成功;否则称查找失败,即查找表中不存在关键字为key的记录。key称为查找目标。

查找过程中,关键字的比较次数称为查找长度。使用查找成功时平均查找长度(ASL)及查找不成功时查找长度来衡量查找算法的效率。

1.5.2 顺序查找法

若查找表中关键字无序,则可使用顺序查找法。

顺序查找的策略非常简单:从K0开始,将查找目标依次于关键字进行比较,若相等,则查找成功;否则继续比较下一个关键字。当查找表中所有关键字都与查找目标进行了比较且全不相等时,查找失败,查找过程结束。

在含n个元素的查找表中,查找不成功时的查找长度为n。查找成功时的查找长度要依赖于查找目标在查找表中所处的位置。当查找目标位于查找表第一个位置时,比较依次即可找到目标,查找长度为1;当查找目标位于查找表最后一个位置时,比较依次即可找到目标,查找长度为1;当查找目标位于查找表最后一个位置时,需要比较n次才能找到目标,查找目标为n;平均查找长度为(n+1)/2。

顺序查找法的查找表既可以是数组,也可以是链表。甚至是文件。查找表中各记录的关键字不要求有序。

1.5.3折半查找法

在无序查找表上查找效率不高,等效率查找情况下平均查找长度为(n+1)/2。

如果查找表有序,可以采用折半查找法,有效提高查找效率。

折半查找法也称为二分查找法,它利用查找表的有序性,采用”分治“策略,先确定查找目标所在的范围,之后的每次比较都能使查找表缩小一般的范围,直到找到查找目标,或是待查范围为空时为止。

比较A[mid]与查找目标,分以下几种情况:

  • A[mid]=key, 查找成功;

  • A[mid]>key,high=mid,在查找范围内继续查找;

  • A[mid]<key,low=mid+1,在查找范围内继续查找。

    当low>high时,查找范围为空,没有元素可检查,查找表中没有查找目标,查找失败。

    第一趟查找:mid=(8+0)/2=4,检查a[4]

    第二趟查找:mid=(0+3)/2=1,检查a[1]

    第三趟查找:mid=(2+3)/2=2,检查a[2],找到Key

    折半查找过程中,关键字比较序列实际上是从根到某个叶结点路径上的关键字序列中的一部分。

    求中间位置时可能会出现取整操作,此时即可以上取整,也可以下取整。一旦确定下来,整个查找过程中必须一致。在例1-2中,若mid=[(low+high)/2],则对应的判定树如图1-28所示。

1.5.4 分块查找法

分块查找要求把一个大的查找表分成若干块,每块中的值无序,但块与块之间必须有序,即整体有序。

对于任意的i,第i块中所有的关键字都小于第i+1块中素有的关键值.此外,还要建立一个索引表,把每块中的最大关键字作为索引表的关键值,按块的顺序保存在一个一维数组中,且数组按关键值有序。

查找时,首先在索引表中进行查找,确定要找的关键之所在块。然后再相应的块中进行查找。

虽然索引表占据了额外的存储空间,索引表的查找也增加了一定的系统开销,但因为将查找表惊醒分块,使得再块内查找时,查找范围缩小,与顺序查找法相比,效率提高。


http://www.ppmy.cn/news/279255.html

相关文章

redis哨兵机制 - 配置文件sentinel.conf详解

本文来说下redis哨兵机制 - 配置文件sentinel.conf相关的内容 文章目录 哨兵机制概述配置详细信息 哨兵机制概述 Redis的哨兵机制是官方推荐的一种高可用&#xff08;HA&#xff09;方案&#xff0c;我们在使用Redis的主从结构时&#xff0c;如果主节点挂掉&#xff0c;这时是不…

arduino烧写报错:can‘t open device “\\.\COM1“

我的解决办法是拔掉usb&#xff0c;让它关机&#xff0c;停止运行一会&#xff0c;它便可恢复。 记得之前也有一次&#xff0c;那次解决好像是通过修改它的端口号&#xff0c;例如我将它com8修改为com1。 两个方法都可以尝试下&#xff0c;希望有帮助。

PC机上的COM1口和COM2口

现在PC机一般有两个串行口COM1和COM2. 串口叫串行接口 串口与并口不同之处&#xff1a;数据和控制信息时一位接一位地传送出去的&#xff0c;虽然速度慢&#xff0c;但传送距离较并口会更长&#xff0c;因此若要进行较长距离的通行时&#xff0c;应该使用串口。 通常COM1使用的…

com1com2端口

com1,com2我们常说串口&#xff0c;LPT1我们就说并口。 串口就是说数据流一串一串传输的&#xff0c;用途很广&#xff0c;数码相机啊&#xff0c;鼠标啊。等等。 并口就是说数据是同时传输的&#xff0c;。打印机之类的。 但以上的两种接口传输速率很慢&#xff0c;已经被现…

COM1 COM2

COM1接口  COM1与COM2接口也称串口&#xff0c;它是一个9针RS-232接口。它的数据的传输方式是采用串行传输&#xff0c;串口的最大传输速率为14.3KB/秒&#xff0c;通常用于传输速率较低的设备&#xff0c;如鼠标、外置MODEM、老式的数码相机、手写板。有些老主板上提供两个串…

Windows10为什么无法将文件命名为aux,com1,com2,prn,con,nul等?

这个问题是我最近在跑一个深度学习项目时遇到的&#xff0c;当时还以为是源码有问题&#xff0c;最后Google查到是因为操作系统保留字的原因&#xff0c;特此记录一下。在Windows系统中&#xff0c;以Win10为例&#xff0c;有时会发现将一些文件进行重命名的时候会出现“指定的…

SciencePub学术 | 网络通信类重点SCIEI征稿中

SciencePub学术 刊源推荐: 网络通信类重点SCI&EI征稿中&#xff01;稳定检索56年&#xff01;信息如下&#xff0c;录满为止&#xff1a; 一、期刊概况&#xff1a; 网络通信类重点SCI&EI 【期刊简介】IF&#xff1a;1.0-1.5&#xff0c;JCR4区&#xff0c;中科院4区…

c#串口模拟互发数据(COM1-COM2)

比如&#xff1a;通过COM1发送数据&#xff0c;COM2接收数据。当COM2接收完本次发送的数据后&#xff0c;向COM1发送信息通知COM1本次数据已发完&#xff0c;COM1接到通知后&#xff0c;再发下一段数据。这样可以确保每次发送的数据都可以被正确接收。 using System; using Sy…