在静态哈希中,结果数据桶地址将始终相同。 这意味着如果使用散列函数mod(5)
生成EMP_ID = 103
地址,那么它将始终产生相同的桶地址3
。这里,桶地址不会有任何变化。
因此,在这种静态散列中,内存中数据桶的数量始终保持不变。 在这个例子中,在内存中有五个数据桶用于存储数据。
如果想在文件中插入一些新记录,但哈希函数生成的数据桶的地址不为空,或者该地址中已存在数据。静态散列中的这种情况称为桶溢出。
要克服这种情况,有几种方法。 一些常用的方法如下:
当散列函数生成已存储数据的地址时,将为其分配下一个存储桶。 这种机制称为线性探测。
例如:假设R3是需要插入的新地址,则散列函数为R3生成112的地址。 但生成的地址已经满了。 因此,系统搜索下一个可用数据桶113,并将R3分配给它。
当存储桶已满时,将为相同的散列结果分配新数据存储桶,并在前一个数据存储桶之后进行链接。 这种机制称为溢出链。
例如:假设R3是需要插入表中的新地址,哈希函数为其生成地址110
。 但是这个存储桶已满,用于存储新数据。 在这种情况下,在110
桶的末端插入一个新桶并与之链接。