查找 - 线性表的查找 - 分块查找

如题所述

第1个回答  2022-10-13

  分块查找

  分块查找(Blocking Search)又称索引顺序查找 它是一种性能介于顺序查找和二分查找之间的查找方法

   二分查找表存储结构

  二分查找表由 分块有序 的线性表和索引表组成

  ( ) 分块有序 的线性表

  表R[ n]均分为b块 前b 块中结点个数为

第b块的结点数小于等于s;每一块中的关键字不一定有序 但前一块中

  的最大关键字必须小于后一块中的最小关键字 即表是 分块有序 的

  ( )索引表

  抽取各块中的最大关键字及其起始位置构成一个索引表ID[l b] 即

  ID[i]( ≤i≤b)中存放第i块的最大关键字及该块在表R中的起始位置 由于表R是分块有序的 所以索引表是一个递增有序表

  【例】下图就是满足上述要求的存储结构 其中R只有 个结点 被分成 块 每块中有 个结点 第一块中最大关键字 小于

  第二块中最小关键字 第二块中最大关键字 小于第三块中最小关键字

  

   分块查找的基本思想

  分块查找的基本思想是

  ( )首先查找索引表

  索引表是有序表 可采用二分查找或顺序查找 以确定待查的结点在哪一块

  ( )然后在已确定的块中进行顺序查找

  由于块内无序 只能用顺序查找

   分块查找示例

  【例】对于上例的存储结构

  ( )查找关键字等于给定值K= 的结点

  因为索引表小 不妨用顺序查找方法查找索引表 即首先将K依次和索引表中各关键字比较 直到找到第 个关键宇大小等于K的

  结点 由于K< 所以关键字为 的结点若存在的话 则必定在第二块中;然后 由ID[ ] addr找到第二块的起始地址 从该地址

  开始在R[ ]中进行顺序查找 直到R[ ] key=K为止

  ( )查找关键字等于给定值K= 的结点

  先确定第二块 然后在该块中查找 因该块中查找不成功 故说明表中不存在关键字为 的结点

   算法分析

  ( )平均查找长度ASL

  分块查找是两次查找过程 整个查找过程的平均查找长度是两次查找的平均查找长度之和

  ①以二分查找来确定块 分块查找成功时的平均查找长度

  ASL blk =ASL bn +ASL sq ≈lg(b+ ) +(s+ )/ ≈lg(n/s+ )+s/

  ②以顺序查找确定块 分块查找成功时的平均查找长度

  ASL blk =(b+ )/ +(s+ )/ =(s + s+n)/( s)

  注意

  

  【例】若表中有 个结点 则应把它分成 个块 每块中含 个结点 用顺序查找确定块 分块查找平均需要做 次比

  较 而顺序查找平均需做 次比较 二分查找最多需 次比较

  注意

  分块查找算法的效率介于顺序查找和二分查找之间

  ( )块的大小

  在实际应用中 分块查找不一定要将线性表分成大小相等的若干块 可根据表的特征进行分块

  【例】一个学校的学生登记表 可按系号或班号分块

  ( ) 结点的存储结构

  各块可放在不同的向量中 也可将每一块存放在一个单链表中

  ( )分块查找的优点

  分块查找的优点是

  ①在表中插入或删除一个记录时 只要找到该记录所属的块 就在该块内进行插入和删除运算

  ②因块内记录的存放是任意的 所以插入或删除比较容易 无须移动大量记录

  分块查找的主要代价是增加一个辅助数组的存储空间和将初始表分块排序的运算

lishixinzhi/Article/program/sjjg/201311/23846

相似回答