簡體   English   中英

如何為動態哈希表實現哈希函數?

[英]How to implement a hash function for a dynamic hashtable?

我正在嘗試實現一個通用的HashTable。 (此問題是此處提出的問題的繼續)

當表的大小固定時,我已經實現了通用哈希函數。 但是,在實時情況下,使用哈希表的大小最初固定為2 ^ 32位是一個非常糟糕的主意,因為這可能會導致大量內存浪費。

因此,我現在要嘗試的是在表已滿時從某些初始值動態增加hast表的大小。

但是,當我這樣做時,哈希函數現在將向以前的哈希鍵返回新值

除了重新散列以前用新值散列的值之外,還有什么方法可以解決此問題。

您不可避免地要進行重新哈希處理:元素在哈希表中的結尾位置所在的存儲桶的位置取決於兩三件事,具體取決於您的沖突解決策略:

  • 元素的哈希碼,
  • 桌子的大小
  • 當您使用線性探測時,存在或不存在帶有散列代碼的先前元素會將它們放在同一存儲桶中

如果您更改了這三個因素中的任何一個,則需要進行全面的重新哈希處理:除非您做的事情真的很糟糕,例如選擇一個非主要的表大小,否則確定位置的hashCode % tableSize tableSize擴展的值將在以下情況下有所不同您更改tableSize 在線性探測中哈希到相同存儲桶的元素的存在或不存在也會發生變化。 這就是為什么您需要完全重新混合的原因。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM