我正在尝试选择一个哈希算法,在比较大约20个不同的文本数据时使用。
哪种哈希算法更适合这些要求?
- CPU消耗少
- 小型 (<=32字节)
- 冲突不是很严重
- 可以从.NET Framework 2中生成(不应该是第三方库)
我使用哈希用于占用更少的内存,提高比较性能。
我正在尝试选择一个哈希算法,在比较大约20个不同的文本数据时使用。
哪种哈希算法更适合这些要求?
我使用哈希用于占用更少的内存,提高比较性能。
如果碰撞不是什么大问题,您可以使用每个文档的第一个字母。或者您还可以使用文本长度或文本中的字符串。
Paul Hsieh有一个不错的、简单快速的32位SuperFastHash,比大多数现有的哈希函数表现更好,更容易理解和实现,并且似乎符合你的标准。
FNV哈希是一个著名的快速哈希算法。它不是加密安全的,但如果您不需要安全哈希,它听起来是可以使用的。
一个非常快速的检查方法是,将文本的长度与其前4个字节进行异或运算,并将结果用作哈希值。如果这足够好,那么它非常快速,因为它与文件的字节数无关。
如果你被限制在框架中已有的算法中
MD5是否足够小(16字节)?
通常情况下,CPU消耗和占用空间较小是互相矛盾的。
GetHashCode()
非常易于访问,给出了一个小的响应(4个字节),这应该足够处理20个字符串时减少冲突。GetHashCode()
不应该被持久化到数据库中-它对于内存比较是可以的。只需注意算法可能在框架之间改变(并且在1.1和2.0之间确实改变了)。Dictionary<string,Something>
,它将为您处理所有散列等操作。