【查找算法 - 顺序查找、二分查找、分块查找】

一个人的耐心和决定力通常决定着他取得的成就💦

目录

    顺序查找
    二分查找
    分块查找

一、顺序查找

  顺序查找(Sequential Search),也称线性查找,是最基本的查找方法。顾名思义,它的查找过程是按照元素在数据集合中出现的顺序依次进行比较的。

  实现起来非常简单,非常方便。但是最大问题是效率不高。

  对于查找算法,有一个衡量算法效率的指标ASL(Average Search Length)指的是算法的平均查找长度。在已知信息元素概率分布的情况下,进行一次成功查找所需要依次访问的平均元素个数。

平均查找长度:ASL=(n+1)/2

二、二分查找

★使用前提是待查序列为有序表

  二分查找,又称折半查找,是一种基于比较目标值和查找中间元素的查找算法,用于在有序数组中查找特定元素。具体操作如下:

  1. 将数组按照从小到大(或从大到小)的顺序排序;

  2. 找到数组的中间元素,将其与目标值进行比较;

  3. 如果中间元素等于目标值,则返回该元素的下标;如果中间元素大于目标值,则在前面的子数组继续寻找;如果中间元素小于目标值,则在后面的子数组继续寻找;

  4. 重复以上步骤,直到找到目标值为止,或者确定目标值不存在。

  二分查找的时间复杂度为O(log2n),是一种效率较高的查找方式。但是需要注意:二分查找只适用于有序数组,如果是无序数组则需要先排序再进行查找。

平均查找长度:ASL=log2(n+1)-1

三、分块查找

  分块查找是基于“分而治之”的思想。将一个大集合分成几个小集合并对每个小集合建立索引表。通过索引表对每个小集合进行二分或其它形式的查找,在找到相应的集合后,在这个集合内执行线性查找即可。

分块查找的步骤主要包括以下几个:

  1. 确定块的大小:块的大小应该是根据数据量和机器性能合理地分配。一般而言,块大小越大,则索引表中元素个数就会减少,查找次数也会相应地减少,但是块内部查找的效率会降低。

  2. 建立索引表:将数据集合按照固定块大小划分成多个块,并建立一个索引表,其中索引表的每一个元素记录了对应块的最小值和最大值。

  3. 查找:首先在索引表中使用二分查找或顺序查找等方法,确定待查找元素所属的块,然后在该块内部进行查找。如果某一块没有找到待查找元素,则返回不存在。

平均查找长度:
        二分查找确定块:log2(n/s+1)+s/2
        顺序查找确定块:(s2+2s+n)/2s

例如:

对数组[13,1,11,24,7,31,27,29,37,35,98,41,63,54,72]进行分块查找。

  1. 确定块的大小:假设我们将数组分成大小为 5 的块,则一共需要分成 3 个块。

  2. 建立索引表:根据数组的数据进行分块,建立索引表,如下所示:

    块 1 包含数据:[1, 7, 11, 13, 24]
    块 2 包含数据:[27, 29, 31, 35, 37]
    块 3 包含数据:[41, 54, 63, 72, 98]

    索引表为[(1, 24), (27, 37), (41, 98)]

  3. 查找:假设要查找的元素是 35,首先在索引表中使用二分查找算法,发现它属于第二个块(即下标从 5 到 9 的块),然后在该块内部使用顺序查找算法进行查找,最终找到了该元素。

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿年、嗯啊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值