3、分块查找 (又称 索引顺序查找)[性能介于 顺序查找 和 折半查找之间]
索引表 | |||
最大关键字 | 22 | 48 | 86 |
起始地址 | 1 | 7 | 13 |
22 | 12 | 13 | 8 | 9 | 20 | 33 | 42 | 44 | 38 | 24 | 48 | 60 | 58 | 74 | 49 | 86 | 53 |
表及其索引表 |
块的查找 既可以顺序查找,也可以折半查找。
因为上表块中记录是无序的,所以只能是顺序查找。
分块查找平均查找长度:ASLbs=Lb+Lw
Lb:查找索引表确定所在块的平均查找长度。
Lw:块中查找元素的平均查找长度。
一般情况下,长度为n的表均匀分成b块,每块有s个记录,即b=[n/s] ;
假定表中每个记录查找概率相等,则每块查找概率为 1/b ;
块中每个记录的查找概率为 1/s;
用顺序查找确定所在块的平均查找长度为 ASLbs=Lb+Lw=(1/2)( (n/s) + s ) + 1
平均查找长度跟表长n有关,还和每一块中记录个数s有关。
当s取√n (根号n) ,ASLbs取最小值 √n +1 。
比顺序查找有改进,但远不及折半查找
分块查找优点:
在表中插入和删除元素时,只要找到该元素对应的块,就可以在该块内进行插入和删除运算。
由于块内无序,故插入删除容易,无需大量移动。
如果线性表既要快速查找,又要经常动态变化,则可以使用分块查找。
分块查找缺点:
要增加一个索引表的存储空间,并对初始索引表进行排序运算。