当前位置:主页 > 查看内容

数据结构基础知识点一(持续更新中)

发布时间:2021-04-17 00:00| 位朋友查看

简介:顺序查找和折半查找 摘要 本篇文章中主要讲述了在数据结构中涉及的几大查找算法包括线性结构、树形结构和散列结构及算法的效率指标。这些查找方式都是数据结构中最基本的查找方式并且在数据结构中运用很广泛。合适的使用对应的查找算法不仅能够提高算法操作……

顺序查找和折半查找

摘要:本篇文章中,主要讲述了在数据结构中涉及的几大查找算法,包括:线性结构、树形结构和散列结构及算法的效率指标。这些查找方式都是数据结构中最基本的查找方式,并且在数据结构中运用很广泛。合适的使用对应的查找算法,不仅能够提高算法操作效率,还能够节省查找时间,下述便先来谈谈查找算法中的基于线性结构的顺序查找算法和折半查找算法。

知识框架:
在这里插入图片描述

一、查找的基本概念
1、查找:在数据集合中寻找满足某种条件的数据元素的过程称为查找。查找的结果一般分为两种:查找成功(在数据集合中找到了满足条件的数据元素)、查找失败。

2、查找表(查找结构):用于查找的数据集合称为查找表,由同一类型的数据元素组成,可以是一个数组或链表等数据类型。对查找表经常进行的操作一般有如下四种:
(1)查询某个特定的数据元素是否在查找表中
(2)检索满足条件的某个特定的数据元素
(3)在查找表中插入一个数据元素
(4)从查找表中删除某个数据元素

注:(1)、(2)类查找表称为静态查找表;(3)、(4)类为动态查找表;静态查找表与动态查找表的区别在于:静态查找表只是查看满足某一条件的数据元素是否在表中,在就返回true,否则返回false,不做其它操作;而动态查找表则是在表中查询这个数据元素,如果不存在则插入这个数据元素,否者删除这个数据元素。

3、查找表的查找方法
(1)静态查找表:顺序查找、折半查找、散列查找等。
(2)动态查找表:二叉排序树查找、散列查找。

4、关键字:在数据元素中唯一标识该元素的某个数据项的值,使用基于关键字的查找,查找结构应该是唯一的。如一个学生元素构成的数据集合中,学生元素中“学号”这一个数据项的值唯一地表示一名学生。

5、平均查找长度:在查找过程中,一次查找的长度是指需要比较的关键字次数,而平均查找长度则是所有查找过程中进行关键字的比较次数的平均值。

二、顺序查找和折半查找
1、顺序查找
(1)概念:主要在线性表中进行查找,顺序查找通常分为对一般的无序线性表(无序表)的顺序查找和对按关键字有序的顺序表(有序表)的顺序查找。

(2)基本思想:从线性表的一端开始,逐个检查表中的关键字是否满足给定条件。若找到,则查找成功,并且返回该关键字在线性表中的位置。若已查找到表的另一端,但没有找到符合给定条件的元素,则返回失败的信息。

(3)哨兵的作用:顺序查找过程中引入“哨兵”的作用:主要是为了判断在查找过程中数组是否越界,同时引入“哨兵”还可以避免很多不必要的判断语句,提高程序效率。

(4)平均查找长度:在顺序查找的过程中时,对于有n个数据元素的数据集合中,给定值key与表中第 i 个元素相等,即定位第 i 个元素时,需要进行 n-i+1 次关键字的比较,即有:C= n-i+1,查找成功时,顺序查找的平均长度为:(n+1)/2;查找不成功时,与表中的各个关键字的比较次数是 n+1 次,从而顺序查找不成功的平均查找长度为:n+1。

2、折半查找
(1)折半查找又叫二分查找,仅用于有序顺序表。

(2)基本思想:首先将给定值key与表中间位置的元素比较,若相等,则查找成功,返回该元素的存储位置。若不等,则所需查找的元素只能在中间元素以外的前半部分或后半部分进行折半查找。依次重复如此步骤,直到找到为止,或确定表中没有所需要查找的元素,则查找失败,返回查找失败的信息。

(3)折半查找操作过程:
在这里插入图片描述
初始:i=0,j=n-1,mid=(i+j)/2=(0+n-1)/2=(n-1)/2
第一种情况:
key>(n-1)/2,则:i=mid+1,j=n-1,mid=(i+j)/2
第二种情况:
key<(n-1)/2,则:i=0,j=mid-1,mid=(i+j)/2
注:若 i>j,则查找不成功。

(4)折半查找过程可用二叉树来描述,又叫判定树。

  • 查找成功时的平均查找长度为从根结点到目的结点的结点数;
  • 查找失败时的查找长度为从根结点到对应失败结点的父结点的路径上的结点树。
  • 用折半查找法查找给定值的比较次数最多不超过树的高度。
  • 查找成功:根结点—>目的结点的结点数
  • 查找失败:根结点—>对应失败结点的父结点的结点数

注:每个结点值均大于其左子结点值,且均小于其右子结点值,因此,判定树是一颗平衡二叉树。

(5)平均查找长度:在等概率查找时,查找成功的平均查找长度:ASL=log2(n+1)-1
注:折半查找的时间复杂度:O(log2n)

3.分块查找
(1)分块查找又称为索引顺序查找,吸取了顺序查找和折半查找各自的优点,既有动态查找,又适于快速查找。

(2)基本思想:将查找表分为若干子块,块内元素可以无序,但块间必须有序,即第一个块中的最大关键字小于第二个块中的所有记录的关键字,第二个块中的最大关键字小于第三个块中的所有记录的关键字,以此类推。再建立一个索引表,索引表中每个元素含有各块的最大关键字和各块中第一个元素的地址,索引表按关键字有序排列。

(3)分块查找的过程有两步:在索引表中确定待查记录所在的块,可以顺序查找或折半查找;在块内顺序查找。

(4)平均查找长度:将长度为n的查找表均匀分为b块,每块含有s个记录,在等概率的情况下,若在块内和索引表中均采用顺序查找,则平均查找长度为:

  • 平均查找长度:ASL=L1+L2=(b+1)/2+(s+1)/2=(s2+2s+n)/2s

若采用折半查找时,则平均查找长度为:

  • ASL=L1+L2=(s+1)/2+log(b+1)
;原文链接:https://blog.csdn.net/qq_44725331/article/details/115411296
本站部分内容转载于网络,版权归原作者所有,转载之目的在于传播更多优秀技术内容,如有侵权请联系QQ/微信:153890879删除,谢谢!

推荐图文


随机推荐