TFPCustomHashTable构造函数使用196613常量。为什么要使用此特定值?

时间:2018-10-12 22:55:11

标签: freepascal

以下代码是FreePascal的contnrs单元的一部分

constructor TFPCustomHashTable.Create;
begin
  CreateWith(196613,@RSHash);
end;

我对196613感到好奇。我知道这是哈希表的大小。使用此值是否有任何特殊原因?

在我的测试中,构造函数执行大约需要3-4毫秒的时间,在我的特定情况下,这是不可接受的。我怀疑这与该常数有关。

更新

我的问题是:

  • 为什么选择196613?为什么不使用其他素数?
  • 这会影响构造函数调用的执行时间吗?

1 个答案:

答案 0 :(得分:1)

196613是哈希表大小(素数和远离2的幂的整数)推荐的数字之一,有关更多信息,请参见例如https://planetmath.org/goodhashtableprimes

它会影响构造函数调用的执行时间,是的。您始终可以使用TFPCustomHashTable来构造CreateWith并传递您选择的大小(任何数字都可以,因为调整大小算法会检查大小是否合适)以及您自己的哈希函数(或预定义的RSHash):

MyHashTable:=TFPCustomHashTable.CreateWith(193,@RSHash);

但是请记住,调整哈希表的大小是一项昂贵的操作,因为它需要重新计算所有元素的哈希函数,因此从太小的值开始并不是一个好主意。