我正在尝试为字符串想出一个好的散列函数。而且我认为总结字符串中前五个字符的 unicode 值可能是一个好主意(假设它有五个,否则在它结束的地方停止)。这是一个好主意,还是一个坏主意?
我在 Java 中这样做,但我不认为这会产生很大的不同。
通常散列不会求和,否则stop将pots具有相同的散列。
stop
pots
并且您不会将其限制为前 n 个字符,因为否则 house 和 house 将具有相同的哈希值。
通常哈希取值并将其乘以素数(使其更有可能生成唯一的哈希)所以你可以这样做:
int hash = 7; for (int i = 0; i < strlen; i++) { hash = hash*31 + charAt(i); }