【发布时间】:2012-05-10 13:23:16
【问题描述】:
为了提高比较字符串的函数的性能,我决定通过比较它们的哈希值来比较它们。 那么是否可以保证如果 2 个非常长的字符串的哈希值彼此相等,那么这些字符串也彼此相等?
【问题讨论】:
-
我相信是的。哈希是它们包含的数据的绝对表示。所以相等的字符串应该有相等的哈希值。
-
为什么不首先比较字符串。计算哈希将迫使您检查两个字符串的每个字符。比较它们也是如此(但这可能会在第一次不匹配时返回“不相等”)
-
@Jeremy1026:这根本不是真的。假设您使用 4 位散列。 4 位可以容纳 2^4 = 16 个不同的值,因此您永远无法区分超过 16 个具有该哈希的字符串。在实践中,散列通常是数百位,但它们可以区分的项目数量总是有限的。当然,对于足够长的散列,冲突是极不可能发生的,但不能保证不同的字符串会有不同的散列。