数据结构之查找(四)——分块查找(索引顺序查找)

  • 条件:

    • 将表分为几块,且表或者有序,或者分块有序(块间有序,块内无序);
      分块有序含义: 若i<j,则第j块中所有记录的关键字均大于第i块中的最大关键字。
    • 建立“索引表”,每个结点含有最大关键字域和指向本块第一个结点的指针,且按关键字有序。
      在这里插入图片描述

  • 查找过程:
    先确定待查记录所在块(顺序或折半查找),再在块内查找(顺序查找)。

  • 例子: 在上述表中查找值为38的元素。
    方法:首先建立索引表如上图,把38与22比,38>22,所以该元素不在第1块,因为第1块的元素的最大值是22,与48比,38<48,则在第2块,然后在第二块里进行顺序查找。


  • 性能分析:
    分块查找的比较部分发生在两个步骤里,一个是关键字与索引表作比较,另一个是关键字逐个和块内元素作比较,所以查找效率为: A S L = L b + L w ASL=L_b+L_w ASL=Lb+Lw
    • L b L_b Lb:对索引表查找的ASL。
      L b = log ⁡ 2 ( n s + 1 ) {L_b} = \log _2^{(\frac{n}{s} + 1)} Lb=log2(sn+1)
    • L w L_w Lw:对块内查找的ASL。
      L w = s 2 L_w=\frac{s}{2} Lw=2s
      其中,s为每块内部的记录个数, n / s n/s n/s即块的数目。
    • 所以,分块查找的效率为,
      A S L ≈ log ⁡ 2 ( n s + 1 ) + s 2 ASL \approx \log _2^{(\frac{n}{s} + 1)} + \frac{s}{2} ASLlog2(sn+1)+2s
    • 分块查找的效率介于折半查找和顺序查找之间,但更加接近于折半查找。

  • 优缺点:
    • 优点:插入和删除比较容易,无需进行大量的移动。
    • 缺点:要增加一个索引表的存储空间并对初始索引表进行排序运算。
    • 适用情况:如果线性表既要快速查找又经常动态变化,则可采用分块查找。

  • 三种查找方法的比较
顺序查找折半查找分块查找
ASL最大最小中间
表结构有序表、无序表有序表分块有序
存储结构顺序表、线性链表顺序表顺序表、线性链表
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值