【发布时间】:2010-11-08 18:57:38
【问题描述】:
我正在尝试尽快检查两个字符串是否相同。我可以在不比较整个字符串的情况下保护自己免受哈希冲突吗?
我有一个以字符串为键的项目缓存。我存储字符串的哈希值、字符串的长度和字符串本身。 (我目前正在使用djb2 来生成哈希。)
为了检查输入字符串是否与缓存中的项目匹配,我计算输入的哈希值,并将其与存储的哈希值进行比较。如果匹配,我将输入的长度(我作为计算哈希的副作用得到)与存储的长度进行比较。最后,如果匹配,我会对输入和存储的字符串进行完整的字符串比较。
是否有必要进行完整的字符串比较?例如,是否有一种字符串哈希算法可以在数学上保证没有两个字符串相同长度会生成相同的哈希?如果不是,算法能否保证如果前N个字符中的任何一个不同,两个相同长度的不同字符串将生成不同的哈希码?
基本上,任何在字符串不同时提供 O(1) 性能但在匹配时优于 O(n) 性能的字符串比较方案将比我现在所做的有所改进。
【问题讨论】:
标签: hash string-hashing