在靜態哈希中,結果數據桶地址將始終相同。 這意味著如果使用散列函數mod(5)
生成EMP_ID = 103
地址,那麼它將始終產生相同的桶地址3
。這裏,桶地址不會有任何變化。
因此,在這種靜態散列中,記憶體中數據桶的數量始終保持不變。 在這個例子中,在內存中有五個數據桶用於存儲數據。
靜態哈希的操作
- 搜索記錄 - 當需要搜索記錄時,相同的哈希函數檢索存儲數據桶的地址。
- 插入記錄 - 當一個新記錄插入表中時,將根據哈希鍵為新記錄生成一個地址,並將記錄存儲在該位置。
- 刪除記錄 - 要刪除記錄,首先獲取應該刪除的記錄。 然後我們將在內存中刪除該地址的記錄。
- 更新記錄 - 要更新記錄,首先使用哈希函數進行搜索,然後更新數據記錄。
如果想在檔中插入一些新記錄,但哈希函數生成的數據桶的地址不為空,或者該地址中已存在數據。靜態散列中的這種情況稱為桶溢出。
要克服這種情況,有幾種方法。 一些常用的方法如下:
1.打開散列
當散列函數生成已存儲數據的地址時,將為其分配下一個存儲桶。 這種機制稱為線性探測。
例如:假設R3是需要插入的新地址,則散列函數為R3生成112的地址。 但生成的地址已經滿了。 因此,系統搜索下一個可用數據桶113,並將R3分配給它。
2.關閉哈希
當存儲桶已滿時,將為相同的散列結果分配新數據存儲桶,並在前一個數據存儲桶之後進行鏈接。 這種機制稱為溢出鏈。
例如:假設R3是需要插入表中的新地址,哈希函數為其生成地址110
。 但是這個存儲桶已滿,用於存儲新數據。 在這種情況下,在110
桶的末端插入一個新桶並與之鏈接。