Code前端首页关于Code前端联系我们

分块搜索算法介绍及C语言/C++代码实现

terry 2年前 (2023-09-27) 阅读数 74 #数据结构与算法

1.算法介绍

块搜索是二分搜索和顺序搜索的改进方法。块搜索只需要索引表的顺序。块内的节点没有排序要求,因此特别适合节点的动态变化。它的核心包含两个索引表,第二个是块处理。

对于分块搜索,必须将一个大的线性表分成多个块。每个块中的节点可以任意存储,但块必须是有序的。假设键值不是降序的,那么这些块之间必须满足排序要求。事实上,对于任意i,第i个块中所有节点的键值必须小于该块中所有节点的i+1个键值。另外,还需要创建索引表,将每个块中的最大键值作为索引表的键值,按照块的顺序存储在辅助数组中。显然,这个附加数组是按键值降序排序的。 。查找时,首先查找索引表,确定要查找的节点所在的块。由于索引表是有序的,因此可以采用顺序查找或二分查找的方式来查找索引表;那么通过顺序查找就可以在对应的块中找到对应的节点。

2。算法的具体过程

用一张网络图片来说明:

分块查找算法介绍与C语言/C++代码实现

假设要查找关键字38的具体位置。首先,将关键字38按顺序与索引表中最大的关键字进行比较。由于22 由于索引表中显示的第二个子表的起始位置是搜索表的第7个位置,因此从该位置开始顺序搜索到子表的最后一个关键字(通常搜索表是等分的情况下执行,具体分表个数根据实际位置而定)。结果是该关键字位于第 10 位。

3。代码的实现

代码仅供参考索引{  //判断区块结构}newIndex[3]; //定义结构体数组 int a[]); *a,const 无效* b) {  返回 结构 索引 * :-1 i, j=- 1, k, key;  inta[] = {33,42,44,38,2,2,41,2 13,8,9,20, 60,58,74 ,49,86,53};  //确认初始值和最大值模块的  for ♷( i=3) { {/s,对于大于 I 的块。0     返回 -1 ;  }  起始值 = 新索引[我开始; 块的起始值等于范围/}    }    (StartValue> startValue+5)比块范围的结束值表示没有找到数字。 返回起始值;}

4。生活映射

区块搜索在现实生活中也经常使用,每个类有很多,类有很多,例如数十名学生。给定一个学生的学号,要求查找该学生的相关信息。显然,每个班级的学生档案都是分开保存的,任意两个班级的学生人数是重叠的。那么最好的查找方法就是确定该学生所在的班级,然后在该学生所在班级的学生档案中查找该学生的信息。上述查找学生信息的过程实际上就是典型的分块查找。

版权声明

本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。

热门