分块查找(Blocking Search)
分块查找,又称索引顺序查找。它是一种性能介于顺序查找和二分查找之间的改进方法。它是为了找到 二分查找的高效但需要顺序存储 和 顺序查找可以解决元素动态变化但效率低下 之间更平衡的方法。
1.基本思想
①把线性表分成若干块,每块包含若干个元素
②块内无序,块间有序。
③建立一个索引表,把每块中的最大关键字值和每块的第一个元素在表中的位置和最后一个元素在表中的位置存放在索引项中。
④先确定待查数据元素所在的块,然后再块内顺序查找
2.算法分析
2.1时间复杂度
分块查找算法的效率介于顺序查找和二分查找之间。
时间复杂度为O(n)~O(log2n)
2.2平均查找长度ASL
分块查找的平均查找长度由两部分组成,一个是对索引表进行查找的平均查找长度,一个是对快内节点进行查找的平均查找长度。
线性表中共有n个节点,分成大小相等的b块,每块有s=n/b个节点。

2.3存储结构

3.分块查找优缺点
优点:
在表中插入或删除一个记录时,只要找到该记录所属的块,然后在该块内进行插入和删除运算即可。由于块内记录的存放是任意的,所以插入或删除记录无需移动大量记录。
缺点:
需要将待查表分块排序,并且要增加一个存储空间用来存储索引表。
4.C语言实现
1 |
|
参考资料:
1.百度百科——分块查找