先上个图,比较清晰
分析:数据表是什么呢,比如我有个数组是被查询的集合,那么这个数组就是数据表,那么什么是索引表其实就是保存了数组里面的某些元素和索引值。
继续看实例:
如果我们针对数据表从8 —-到87这些元素中找具体某个元素的话,由于是没有排序的,那么肯定是不能进行二分查找,如果是顺序查询数据量又太多,效率太差,因此我们想个办法,能不能让这个数组中的每段数据是无序的,但是每段数据的最都小于下段数据的每个元素。
这种数据要么已经是直接给我。要么直接用算法去整理出来。
有了这种具备分块查询算法的数据表的前提之下,开始真正的索引表的设计咯。
我们根据数据表,提前把第一块数据的首地址写在索引项目的第二个数据变量当中,第一块最大的元素存在对应的元素变量中,其他索引项目依次填写就可以。
准备工作完毕后,假如我们想得到80这个元素,我们先根据二分查找算法得到80这个元素在索引表中的什么位置,比如我们找到66和85之间,那么我们肯定知道80这个元素是在85这个元素对应的段里面,那么我们在得到这个元素对应的索引值就是15。 通过这个15索引我们就得到到了71这个元素值,这个时候我在用顺序查询算法也就是逐一比较元素在当前段里找到80那个元素,返回地址18。
查询完毕,我们发现这个算法就是是在顺序查找和二分查询之间的。 多开了内存来保存索引表。
效率还不错吧。具体应用场景其实我们的图书馆就是分块存储的结构的。我们去找具体什么书,我们是先去电脑查询我们的书比如是自然科学类型,那么我们就跑到自然科学牌下的一排找,这个时候我们是不是一本一本对比找啊 ,对的 。 好了 ok。