当涉及二次散列时,为什么表的大小是素数是有利的?我不太明白这一点。
答案 0 :(得分:1)
在辅助(“双”)散列中,您有两个散列函数h1和h2,探测序列是通过评估形成的
probe(x,i)=(h1(x)+ i·h2(x))mod tableSize
假设tableSize 不是素数。例如,假设表大小为12.假设你有哈希值h1和h2,那么对于某些输入x,我们得到h1(x)= 0和h2(x)= 6.在这种情况下,探测序列将是0,6,0,6,0,6,...,这不保证表的统一覆盖(事实上,它只是一遍又一遍地访问两个元素)。更一般地说,如果h2(x)的值是表大小的非平凡除数,则探测序列将不会覆盖表的所有元素。
那你如何确保你永远不会让h2(x)成为表大小的重要除数?那么,一个简单的方法是使表格大小为素数 - 毕竟,素数根据定义没有重要的除数!如果你确实选择了一个主表大小,你可以保证探测序列只访问一次表中的每个元素一次,虽然证明这需要一些模运算。
希望这有帮助!