以下代码是FreePascal的contnrs单元的一部分
constructor TFPCustomHashTable.Create;
begin
CreateWith(196613,@RSHash);
end;
我对196613
感到好奇。我知道这是哈希表的大小。使用此值是否有任何特殊原因?
在我的测试中,构造函数执行大约需要3-4毫秒的时间,在我的特定情况下,这是不可接受的。我怀疑这与该常数有关。
更新:
我的问题是:
196613
?为什么不使用其他素数?答案 0 :(得分:1)
196613
是哈希表大小(素数和远离2的幂的整数)推荐的数字之一,有关更多信息,请参见例如https://planetmath.org/goodhashtableprimes。
它会影响构造函数调用的执行时间,是的。您始终可以使用TFPCustomHashTable
来构造CreateWith
并传递您选择的大小(任何数字都可以,因为调整大小算法会检查大小是否合适)以及您自己的哈希函数(或预定义的RSHash
):
MyHashTable:=TFPCustomHashTable.CreateWith(193,@RSHash);
但是请记住,调整哈希表的大小是一项昂贵的操作,因为它需要重新计算所有元素的哈希函数,因此从太小的值开始并不是一个好主意。