线性表查找法 -- 分块查找算法

本文介绍了分块查找算法,一种介于顺序查找和折半查找之间的高效查找方法,适用于无序子表但有序分块的线性表。算法分析了平均查找长度,指出其优点(如插入删除操作便捷)和缺点(额外的索引表开销),并与顺序查找、折半查找进行了对比。
摘要由CSDN通过智能技术生成

首先,基于上篇对于顺序查找与折半查找算法当中,在其中提到由于顺序查找的效率比较低,而折半查找算法效率比顺序查找效率高,但由于存在 折半查找仅限于 有序表的查找,只适用于顺序存储结构,不适用于链表查找,所以此次给大家分享更加效率高的算法 ---- 分块查找算法

分块查找算法(索引顺序表查找) 

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

        查找条件:

             子表内可以是无序的,但是子表之前面的子表中每个元素必须小于后面子表中的每个元素。

        查找过程:

                先确定待查记录所在快(顺序或折半查找),再再快内查找(顺序查找)

存储结构

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

    (1)"分块有序"的线性表

    表R[1..n]均分为b块,前b-1块中结点个数为,第b块的结点数小于等于s;每一块中的关键字不一定有序,但前一块中的最大关键字必须小于后一块中的最小关键字,即表是"分块有序"的。

    (2)索引表

    抽取各块中的最大关键字及其起始位置构成一个索引表ID[l..b],即:ID[i](1≤i≤b)中存放第i块的最大关键字及该块在表R中的起始位置。由于表R是分块有序的,所以索引表是一个递增有序表。

    【例】下图就是满足上述要求的存储结构,其中R只有18个结点,被分成3块,每块中有6个结点,第一块中最大关键字22小于第二块中最小关键字24,第二块中最大关键字48小于第三块中最小关键字49。

算法分析

(1)平均查找长度ASL

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

    ①  一般情况下,为进行分块查找,可以将长度为 n 的表均匀地分成b块,每块含有 s个记录,即 b=【n/s]; 又假定表中每个记录的查找概率相等,则每块查找的概率为 1/b , 块中每个记录的查找概率为 1/s。 若用顺序查找确定所在块,则 分块查找的平均查找长度为

可见,此时的平均查找长度不仅和表长n有关,而且和每一块中的记录个数s有关。在给定 n的前提下,s是 可以选择的。容易证明,当s取 \sqrt{n}时,ASLbs取最小值心\sqrt{n}+1。这个值比顺序查 找有了很大改进,但远不及折半查找。

    ②  若用折半查找确定所在块,则分块查找的平均查找长度为

      

解析:s为每块内部的记录个数,n/s即快的数目

举个例子:当n=9,s=3时,ASL_bs=3.5;而折半法为3.1;顺序法为5

        分块查找的优点是:在表中插入和删除数据元素时,只要找到该元素对应的块,就可以在该 块内进行插入和删除运算。 由于块内是无序的,故插入和删除比较容易,无需进行大量移动。 如 果线性表既要快速查找又经常动态变化,则可采用分块查找。

        缺点是要增加一个索引表的存 储空间并对初始索引表进行排序运算

最后进行下线性表的顺序查找、折半查找、分块查找间的比较

查找方法比较
顺序查找折半查找分块查找
ASL最大最小介于两者之间
表结构有序表、无序表有序表分块有序
存储结构顺序表、线性链表顺序表顺序表、线性链表

       

        

        

  • 20
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值