线性哈希(Linear Hash)是一种能动态伸缩的哈希表算法。
设当前的桶数为n, low=2^i-1, high=2^i (^符号表示幂运算), 取整数i刚好使得 low < n <= high
插入过程
设k为元素的key计算的一个大哈希值。 h = k % high, 如果 h < n 则放入桶h中, 否则放入桶key % low中,这一过程称作折叠。
分裂过程
如果发现哈希表的填充因子大于预定值,则增加一个桶,n=n+1。 本来应在新增桶位置的元素,按照插入过程描述的那样,可能已被放入了n % low桶中,所以要对桶n % low进行一次分裂。 如果n > high,则增加i,调整low和height的值。
总结
low和high是2的次方数,这样的结果恰好使得放入同一个桶中的元素k的二进制表示位的后i位相同,所以有些书上用二进制位来解释线性哈希。 线性哈希把本来的一次重组哈希的任务分解为每次只分裂一个桶的小任务,分散了重组哈希的延时。