通常,我们根据规则计算integer
或string
进行散列,然后返回hash(int-or-str) % m
作为散列表中的索引,但我们如何选择模{ {1}}?是否有任何约定?
答案 0 :(得分:1)
有两种可能的约定。一种是使用素数,得到good performance with quadratic probing。
另一个是使用2的幂,因为 n mod m 其中 m = 2 ^ k 是一个快速的操作;它是 m -1的按位AND。当然,模数必须等于哈希表的大小,并且2的幂表示只要哈希表过度拥挤,哈希表的大小必须加倍。这使您以与dynamic array类似的方式进行摊销的O(1)插入。
答案 1 :(得分:0)
由于[val modulo m]用作表的索引,因此m是该表中元素的数量。你可以自由选择吗?然后使用足够大的素数。如果你需要调整表的大小,你可以选择使用更大的素数,或者(如果你选择加倍表调整大小),你最好确保你的散列函数在低位有足够的熵。