数据结构——查找知识点

定义:查找又称检索,是指在某种数据结构中查找出给一个满足条件的元素,被查找对象是一组元素组成的表时,又称查找表,若在查找的同时对表进行修改操作,则使用动态查找表,若不涉及操作,则使用静态查找表。

查找分类:内查找外查找,内查找就是整个查找过程在内存中完成,如果涉及到外存就是外部查找。

衡量算法的优劣性是用平均查找长度来衡量的,记作ASL。
查找表的分类:动态查找表、静态查找表

线性表的查找(静态查找)
线性表查找分类:顺序查找,折半查找,分块查找。

1.顺序查找:时间复杂度O(n)
基本思路:从表的一端像另一端逐个将元素的关键字和定值k进行比较,若查找成功,则返回该元素的位置,扫描完后未找到,则查找失败。
ASL成功=n+1/2 ASL失败=n 时间复杂度O(n)

2.折半查找(二分法查找,效率较高的查找方式):时间复杂度:O(log2n)
基本思路:设R[low…high]为查找区,首先确定mid=[low+high]/2,[]为向下取整,然后将待查找的k和R[mid]进行比较。
如果k=R[mid],查找成功,返回该元素的逻辑序号。
如果k>R[mid],则查找R[mid+1…high]
如果k>R[mid],则查找R[low…mid-1]
折半查找的过程可以用二叉树来描述:
把当前区间的中间位置上的元素作为根,左子表和右子表分别构造根的左子树和右子树,由此得到的二叉树称为判定树或比较树,查找成功对应的结点称为内部结点,查找失败的结点称为外部结点,特别注意的是折半查找判定书形态只与表元素个数有关,和取值无关。
等概率下ASL=log2(n+1)-1 时间复杂度:O(log2n)
注意:虽然折半查找效率高,但是只适用于顺序表,不适合链式存储结构,不能说不能用链式存储结构,只能说采用顺序存储结构效率更高。

3.分块查找
1.1索引存储:在存储数据的同时还建立附加的索引表,索引表中每一项称为索引项,索引项一般形式为(关键字,地址)。(索引存储结构可以提升按关键字查找的效率,但确定是会增加时间和空间的开销)
1.2分块查找
按索引方式进行存储线性表,将表R[0…n-1]分为b块数据表,每一块表中的关键字不一定有序,但前一块表的最大关键字必须小于后一块的最小关键字,既要求整个表“分块有序”。
抽取各块中最大的关键字及起始位置构成一个索引表IDX[0…b-1],索引表必须要是有序的。
分块查找最少要进行2次关键字比较。
当采用顺序查找确定各块元素时候,总元素为n,要划分s块时,当s=根号n时,效果最佳,总块数b=[n/s];平均查找长度为ASL=1/2(b+s)+1或ASL=1/2(n/s+s)+1;
当采用折半查找各元素时,平均查找长度为ASL=log2(n/s+1)+s/2或ASL=log2(b+1)+s/2

树表查找
1.二叉排序树(二叉搜索树):
满足以下性质:

  1. 若根节点左子树为空,则左子树的所有结点均小于根节点关键字
  2. 若根结点右子树为空,则右子树的所有结点俊大于根节点关键字
  3. 根节点的左、右子树本身又是一棵二叉排序树。
    1.二叉排序树的创建:
    2.二叉排序树的查找:在二叉排序树上进行平均查找时平均查找长度和二叉排序树的形态有关,平均查找长度和单链表的顺序查找相同,为(n+1)/2。
    3.二叉排序树的删除:

哈希表的查找
1.哈希表的概念 时间复杂度O(1)
哈希表(散列表),设存储元素个数为n,设置一个长度为m的连续存储单元,以每个元素k的关键字为自变量,通过一个哈希函数,把k映射为内存单元的地址h,并把该元素存储在内存中,h也称为哈希地址。
在构建哈希函数的同时,如果出现两个关键字k1,k2,对应的h(k1)=0h(k2),把这种情况称为哈希冲突,通常把不同关键字却具有相同哈希地址的元素称为同义词,这种冲突称为同义词冲突。

哈希表的查找性能主要以下列3个因素有关

  1. 装填因子,所谓装填因子就是指哈希表中已存入的元素树n与哈希地址空间的大小m的比值,既a=n/m
  2. 与所采用的哈希函数有关,哈希函数如果选择得当,可以使哈希地址尽可能均匀的分布在哈希地址空间上,从而减少冲突的发生。
  3. 哈希表的性能也与哈希表的解决方法有关。
    9.4.2哈希函数的构造方法
    1.直接定址法 h(k)=k+c
    2.除留余数法 h(k)=k mod p,(mod为求余运算)
    3.数字分析法 适用于关键字已知的情况

9.4.3哈希冲突的解决方法
1.开放定址法 出现哈希冲突时在哈希表中找到新的空闲位置存放元素
a.线性探测法 d0=h(k) di=(di-1 +1)mod m 容易产生堆积
b.平方探测法 d0=h(k) di=(d0±i^2)mod m
2.拉链法 把所有的同义词用单链表连接起来,所有哈希地址为i元素对应的结点构成的单链表

你可能感兴趣的:(数据结构——查找知识点)