我正在尝试选择哈希算法来比较最多20个不同的文本数据。
哪种哈希更符合这些要求?
我使用哈希来减少内存占用和比较性能
答案 0 :(得分:9)
如果碰撞不是什么大问题,你可以拿出每个文件的第一个字母。或者您可以使用文本的长度或文本的字符串。
答案 1 :(得分:7)
Paul Hsieh有一个体面,简单,快速,32位SuperFastHash,比大多数现有的哈希函数表现更好,更容易理解/实现,听起来更符合您的标准。
答案 2 :(得分:4)
FNV hash是一种众所周知的快速哈希算法。它不是加密安全的,但听起来你不需要安全的哈希。
答案 3 :(得分:1)
非常快速的检查是获取文本的长度并将其与前4个字节进行异或,并将其用作散列。如果这足够好,它会非常快,因为它与文件的字节数无关。
答案 4 :(得分:0)
如果您受限于框架中存在的算法
MD5是否足够小(16字节)?
较少的CPU消耗和较小的占用空间通常是互斥的。
答案 5 :(得分:0)
答案 6 :(得分:0)
哈希需要持续多长时间? GetHashCode()
很容易访问,给出一个小的响应(4个字节),这应该很好(重新最小化冲突)超过20个字符串。
但是,GetHashCode()
不应该持久存储到数据库中 - 但它适用于内存中的比较。请注意,算法可能会在框架之间发生变化(并且在1.1和2.0之间)。
这样做的另一个好处是使用琐事 - 只需使用Dictionary<string,Something>
,它将为您处理所有哈希等。
答案 7 :(得分:0)
我对myselve提出了同样的要求,我实施了xxHashSharp。只需确保您使用适当的库(x32 vs x64)。它也可以在c#here
之外使用