数据结构总结笔记7:查找

一、考试内容:

1,查找方法的分类;

查找表(Search Table):由同一类型的数据元素(或记录)构成的集合。

主要分为以下几种类型:

  • 静态查找表(Static Search Table) 查询、检索;
  • 动态查找表(Dynamic Search Table)  插入删除;
  • 散列查找:利用哈希函数,通过计算求取待查元素的存储地址。散列查找在散列表中进行。

2,各类查找表常用的查找方法;

1,顺序查找(Sequential Search)   当静态查找表采用顺序表或线性链表表示时,使用顺序查找。  

2,折半查找(Binary Search)   折半查找方法使用时有一个前提条件,即:静态查找表必须是有序表(按由小到大,或者由大到小的顺序)。也叫二分查找,是一种效率很高的查找方法。

int Search_bin(SSTable  ST,KeyType key) {

  low=1; high=ST.length;//置区间初值

  while(low<=high)

 {  mid=(low+high)/2;                         

    if EQ(key,ST.elem[mid].key) return mid;

                         //找到待查元素

    else if LT(key,ST.elem[mid].key) high=mid-1;   

                         //继续在前半区间进行查找

    else  low=mid+1;    //继续在后半区间进行查找

  }

  return  0;              //顺序表中不存在待查元素

}//Search_bin

查找过程可以用二叉树来描述。树中每个结点表示表中一个记录,结点中的值为该记录在表中的位置,通常称这个二叉树为判定树

找到有序表中任何一个记录的过程就是走了一条从根结点到该记录相应的结点的路径,和给定值进行比较的关键字个数恰为该结点在判定树上的层次数。 折半查找在查找成功时和给定值进行比较的关键字个数至多为\left \lfloor log_{2}n \right \rfloor +1 。树深

 

折半查找的优点是比较的次数少,查找比顺序查找快。但这种速度是以预先对记录按关键字大小排序为代价的。另外,由于存储结构必须是数组,因此对经常要进行插入和删除操作的表,不宜采用这种方法。

 

3,分块查找   分块查找时要求静态查找表以索引顺序表存储,因此又称为索引顺序查找,是对顺序查找的一种改进方法,性能介于顺序查找和折半查找之间。

找过程分两步进行:1)、首先确定待查的结点属于哪一块,即查找所在的块。2)、然后在块内查找欲查找的结点。    

 

4,动态查找: 二叉排序树和二叉平衡树

二叉排序树的插入

插入的原则为:若二叉排序树为空,则插入结点作为新的根结点,否则继续在其左子树或右子树中进行查找,直到某个叶子结点,则插入结点应为该叶子结点的左子树或右子树。

一个无序序列可以通过构造一棵二叉排序树而变成一个有序序列,构造树的过程就是进行排序的过程。

含有n个结点的二叉排序树的平均查找长度和树的形态有关。

 

平衡二叉树:它或者是一棵空树,或者是具有下列性质的二叉树:它的左子树和右子树都是平衡二叉树,且左子树和右子树的深度之差的绝对值不超过1,又称为AVL树。

则调整该子树的规律可归纳为下列四种情况:

  • 1)LL型平衡旋转(单向右旋平衡处理)
  • 2)RR型平衡旋转(单向左旋平衡处理)
  • 3)LR型平衡旋转(双向旋转,先左后右)
  • 4)RL型平衡旋转(双向旋转,先右后左)

5,哈希表及其查找

哈希函数又叫散列函数,它是一种能把关键字映射成记录存储地址的函数。

哈希表:通过哈希函数构造而成的表称为哈希表。

记录按地址存放到文件空间中相应的位置上,就形成了哈希表,也称散列表。构成哈希表的过程称为地址散列。

解决冲突即为对应到同一地址的多个同义词安排存储位置。因此在选定散列函数时应该考虑尽量避免发生冲突。冲突是很难避免的,问题在于一旦发生了冲突应如何处理。

 

构造哈希函数的常用方法:直接定址法;数字分析法;平方取中法;折叠法;除留余数法;随机数法

选取哈希函数时需要考虑的因素:①计算哈希地址所需要的时间     ②关键字的长度  ③哈希表的大小

 ④关键字的分布情况  ⑤记录的查找频率

 

解决冲突的方法:

1,开放地址法  ——线性探测法;二次探测再散列 ;随机探测再散列

2,再哈希法     Hi=RHi(key)     i=1,2,……,k

3,链地址法   把具有相同散列地址的关键字存放在同一个链表中,称为同义词表。同时用数组T存放各个链表的头指针。凡是散列地址为i的记录都以结点方式插入到以T[i]为头指针的单链表中。第一次出现冲突的关键字称为同义词,但是解决完冲突后,又出现冲突时不是同义词。

4,建立一个公共的溢出区(分离的同义词子表)

 

平均查找长度依赖于哈希表的装填因子。 装填因子:\alpha =\frac{n}{m}   其中n为表中填入的记录数;m为哈希表的长度。

 

散列线性地址法:

散列链式地址法:查找成功————横着看;查找失败————竖着看;

装填因子和P值确定。

 

折半查找判定树:

折半查找判定树实际上是一棵二叉排序树,它的中序序列是一个有序序列。可以在树结点上依次填上相应的元素,符合折半查找规则的树即是所求。

折半查找既可以向上取整,也可以向下取整,但是一个折半查找判定树中只能用一种取整方式。

 

情况一:当剩余查找个数为偶数的时候,在树中表现为对应节点左边的子节点总数比右边子节点总数多一个

情况二:当需要判断的节点还剩两个的时候,剩下的一个节点必须是用于比较的节点的左孩子

 

 

二、考试要求:

了解动态查找表和静态查找表的逻辑结构定义,

掌握静态查找表的三类查找方法的思想,对数据元素的要求、数据元素的存储结构,平均查找长度。

掌握二叉排序树的定义及构造方法,二叉树的平衡化处理。

掌握散列表的定义及创建散列表的方法,以及查找散列表的方法。

发布了38 篇原创文章 · 获赞 20 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/weixin_40165004/article/details/101064577