文章目录
- 1.需要解决的问题
- 2.线性散列索引
- 3.基本思想
1.需要解决的问题
桶的数目过快增长,但其利用率不足
例如:块中存放2个记录,即使记录总数远小于220,但也可能出现三个记录的前20位二进制位序列一样,在这种情况下,将不得不使用i=20和100万个桶数组。但大部分桶都空闲未用
- 线性散列索引可以解决可扩展散列表较坏的情况
2.线性散列索引
桶数n的选择总是使存储块的平均记录数保持与存储块所能容纳的记录总数成一个固定的比例,例如80%。超过此比例,则桶数增长1块,分裂。 —线性增长,每次增1。
- 存储块并不总是可以分裂,所以允许有溢出块,尽管每个桶的平均溢出块数远小于1。
- 用来做桶数组项序号的二进制位数是logn(以2为底),其中n是当前的桶数。
这些位总是从散列函数得到的位序列的右端(即低位)开始取。
3.基本思想
假定散列函数值的i位正在用来给桶数组项编号,且有一个键值为K的记录,想要插入到编号为a1a2…ai的桶中,即a1a2…ai是h(K)的后i位。把a1a2…ai当作二进制整数,设它为m。
- 如果m<n,则编号为m的桶存在并把记录存入该桶中。
- 如果n<=m<2i, 那么桶还不存在,因此我们把记录存入桶m-2^(i-1), 也就是当我们把a1(它肯定是1)改为0时对应的桶
回顾操作特点