简单的字符串散列函数

Hal*_*Hal 13 delphi string hash

我正在尝试将字符串散列为一个整数,以便将其放入数组中.但是我不太了解散列函数,这就是为什么我当前的方法只是将字符的所有ASCII数字加在一起并将其调整为数组大小.

有没有简单的更快/更好的方法?

Gre*_*ill 12

FNV-1A哈希是快速和容易实现.

  • [比较FNV-1,FNV-1a,DJB2,DJB2a,SDBM,CRC32](http://programmers.stackexchange.com/questions/49550/what-hashing-algorithm-is-good-for-uniqueness-and-speed/145633#145633).其中**FNV-1a**是最好的. (3认同)

Dum*_*001 2

Jenkins 哈希函数应该可以帮助您入门。

我当前的方法只是将字符的所有 ASCII 数字相加,然后对数组大小取模。

您丢弃了重要的信息,即字符在字符串中的位置。这是一个坏主意,因为字符串“AB”和“BA”将具有相同的哈希值。

可以使用类似hash = hash*P1 + str[i]*P2 + P3;其中 P i是一些素数的表达式,而不是简单的加法,保持其原始性。如果我快速需要一个哈希函数,我就是这样做的。我经常使用 7、5 和 3 作为素数,但应该明显调整数字(以及 的初始值hash),以便哈希函数的结果可用于您的任务。

有关更多信息,请阅读相应的(且信息丰富的)维基百科文章