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