分块查找

版权声明:本文为博主(yjclsx)的原创文章,未经博主允许不得转载。 https://blog.csdn.net/yjclsx/article/details/86644547

分块查找

分块查找是折半查找和顺序查找的一种改进方法,折半查找虽然具有很好的性能,但其前提条件是线性表顺序存储而且按照关键码排序,这一前提条件在结点树很大且表元素动态变化时是难以满足的。而顺序查找可以解决表元素动态变化的要求,但查找效率很低。如果既要保持对线性表的查找具有较快的速度,又要能够满足表元素动态变化的要求,则可采用分块查找的方法。

分块查找由于只要求索引表是有序的,对块内节点没有排序要求,因此特别适合于节点动态变化的情况。当增加或减少节以及节点的关键码改变时,只需将该节点调整到所在的块即可。在空间复杂性上,分块查找的主要代价是增加了一个辅助数组。

查找思想

将查找表(用于查找数据的集合)分为几块,块中的元素不必是有序的,但是块间是有序的。比如说第一块中的最大关键字小于第二块中的任一关键字;第二块中的最大关键字小于第三块的任一关键字,以此类推。再建一个索引表,索引表中的每个元素包含各块中最大的关键字和各块中第一个元素的地址,索引表中的关键字有序排列。

接下来如果要查询某个元素,先确定所查找的元素在索引表的哪一块(可用顺序查找或者折半查找),接着在块中顺序查找即可。

时间复杂度

时间复杂度为O(n)~O(log₂n)

优缺点

优点:适用范围大,顺序存储和连式存储都适用;查找效率高。

缺点:需要将待查表分块排序,并且要增加一个存储空间用来存储索引表。

 

猜你喜欢

转载自blog.csdn.net/yjclsx/article/details/86644547