老罗带你轻松搞定针对索引存储结构的分块查询算法

来源:互联网 发布:手机相册浏览软件 编辑:程序博客网 时间:2024/06/06 04:31

先上个图,比较清晰

这里写图片描述

分析:数据表是什么呢,比如我有个数组是被查询的集合,那么这个数组就是数据表,那么什么是索引表其实就是保存了数组里面的某些元素和索引值。

继续看实例:

这里写图片描述

如果我们针对数据表从8 —-到87这些元素中找具体某个元素的话,由于是没有排序的,那么肯定是不能进行二分查找,如果是顺序查询数据量又太多,效率太差,因此我们想个办法,能不能让这个数组中的每段数据是无序的,但是每段数据的最都小于下段数据的每个元素。

这种数据要么已经是直接给我。要么直接用算法去整理出来。

有了这种具备分块查询算法的数据表的前提之下,开始真正的索引表的设计咯。

我们根据数据表,提前把第一块数据的首地址写在索引项目的第二个数据变量当中,第一块最大的元素存在对应的元素变量中,其他索引项目依次填写就可以。

准备工作完毕后,假如我们想得到80这个元素,我们先根据二分查找算法得到80这个元素在索引表中的什么位置,比如我们找到66和85之间,那么我们肯定知道80这个元素是在85这个元素对应的段里面,那么我们在得到这个元素对应的索引值就是15。 通过这个15索引我们就得到到了71这个元素值,这个时候我在用顺序查询算法也就是逐一比较元素在当前段里找到80那个元素,返回地址18。

查询完毕,我们发现这个算法就是是在顺序查找和二分查询之间的。 多开了内存来保存索引表。

效率还不错吧。具体应用场景其实我们的图书馆就是分块存储的结构的。我们去找具体什么书,我们是先去电脑查询我们的书比如是自然科学类型,那么我们就跑到自然科学牌下的一排找,这个时候我们是不是一本一本对比找啊 ,对的 。 好了 ok。

这里写图片描述