如何选择一个好的散列函数(用于哈希表)

时间:2012-09-27 23:15:55

标签: performance hashtable

我想知道如何最好地根据当然可能的输入格式来决定散列函数应该对其输入执行的操作的任务。

我还有什么规则(书)还没有找到吗?

我如何估算这种功能的成本?

我能以某种方式预见碰撞的可能性,知道用于输入的字符集吗?

提前感谢您的食物。 :)

2 个答案:

答案 0 :(得分:1)

...

Hi Gung Foo,

只需查看 CRC32 FNV1A_Yorikke 对峙:

http://www.sanmayce.com/Fastest_Hash/index.html#KT_torture3

  

我如何估算这种功能的成本?

简而言之:重&多功能钥匙/负载。 通常,散列(查找表)函数有三个主要方面需要考虑:

  • 碰撞最胖槽的色散和最大深度;

  • 预热时间,即开始费用/开销;

  • 线性速度。

答案 1 :(得分:0)

生成哈希码的一般经验法则是结果值尽可能唯一。哈希码/哈希函数中需要的两件事

  1. 希望哈希码尽可能唯一(且尽可能小)。话虽如此,(在一个理想的世界中)使用数据类型占用的数据成员,并且可以保证对于任何值的实例都是唯一的,这是一种快速有效的方法来获得哈希码。然而,这有时不是一种安全的做法。
  2. 哈希函数应该是perfect,即应该能够生成唯一值,所有值都在很小的范围内生成。