我试图为字符串想出一个很好的哈希函数。而且我当时想对字符串中前五个字符的unicode值进行汇总可能是个好主意(假设它有五个,否则在结尾处停止)。那是一个好主意,还是一个坏主意?
我正在用Java进行此操作,但我无法想象这会带来很大的不同。
通常哈希不会做算术,否则stop和pots将具有相同的哈希值。
stop
pots
并且你不会将其限制为前n个字符,因为否则house和house将具有相同的哈希值。
house
通常,哈希采用值并将其乘以质数(使其更有可能生成唯一的哈希),因此你可以执行以下操作:
int hash = 7; for (int i = 0; i < strlen; i++) { hash = hash*31 + charAt(i); }