考研408总结【数据结构】---查找

501 阅读3分钟

这是我参与11月更文挑战的第19天,活动详情查看:2021最后一次更文挑战

考研倒计时:36天

参考资料: 王道数据结构考研复习指导 天勤数据结构高分笔记

首先,查找分为静态查找和动态查找。无须动态地修改查找表,此类查找表称为静态查找表。

线性结构

对于线性结构的查找,主要有顺序查找、折半查找、以及分块查找

需要注意的tip:

  • 对于线性的链表只能进行顺序查找,折半查找只适用于有序的顺序表
  • 有序线性表顺序查找、查找成功的ASL和一般线性表的顺序查找一样。均为n+12\frac{n+1}{2},两者查找失败的ASL不一样。
  • 折半查找的过程可以用二叉树描述,此树称为判定树,它是一棵平衡二叉树。当mid=(low+high)/2mid=\lfloor (low+high)/2\rfloor,则右子树结点数-左子树结点数=0/1.

image.png

  • 折半查找,元素个数为n时,树高为log2(n+1)\lceil log_2(n+1) \rceillog2n+1\lfloor log_2n\rfloor+1,折半查找在查找不成功时和给定关键字的比较次数最多为树的高度。(没有计入虚构方形结点)。查找成功和查找失败的最多比较次数相同。均为log2(n+1)\lceil log_2(n+1) \rceil
  • 对于分块查找,块内无序,块间有序。ASL=L1+Ls;查找效率最高,每个索引块的大小为根号n,若对索引项和索引块内部都采用折半查找,则ASL为log2(b+1)\lceil log_2(b+1) \rceil+log2(b+1)\lceil log_2(b+1) \rceil,均采用顺序查找则为(根号n)+1.
  • 折半查找和二叉排序树时间性能有时不相同,二叉排序树的查找性能与数据的输入顺序有关。
  • 会画判定树计算ASL

树形结构

B树和B+树

需要注意的tip:

  • B树每个结点(非根内部节点)的关键字个数为m/21<=n<=m1\lceil m/2\rceil -1 <= n <= m-1;根结点1<=n<=m-1;若根结点不是终端结点,至少有两棵子树;每个结点至多有m棵子树,至多含有m-1个关键字。

image.png

  • B+树每个结点(非根内部节点)的关键字个数为m/2<=n<=m\lceil m/2\rceil <= n <= m;根结点2<=n<=m;结点子树个数和关键字个数相等。

  • B+树还支持从最小关键字开始的顺序查找。

image.png

  • 熟练掌握B树的插入和删除操作。(图片来源 4thirteen2one

image.png

image.png

image.png

  • B树的高度与计算(后续补充)

散列结构

散列表

需要注意的tip:

  • 构造散列函数:直接定址法,除留余数法,数字分析法,平方取中法
  • 处理冲突的方法有开放定址法:线性探测法(聚集),平方探测法(0,1,-1,4,-4),再散列法,拉链法。 开放定址不能随便删除元素,拉链可以。
  • 装填因子:表中记录数n/散列表长度m
  • 查找效率取决于:散列函数、处理冲突的方法、装填因子
  • 散列表的ASL依赖于装填因子,而不直接依赖于n或m
  • 计算ASL,注意H(key)=0~6,查找失败就➗7;查找成功则➗元素个数。可以利用王道286页例题456练习。

部分内容待补充完善~

如有误,请多指正!