文本数据最快的哈希算法

时间:2008-12-21 19:09:37

标签: .net performance hash

我正在尝试选择哈希算法来比较最多20个不同的文本数据。

哪种哈希更符合这些要求?

  • 减少CPU消耗
  • 占地面积小(<= 32字节)
  • 碰撞并不是什么大不了的事。
  • 可以从.NET Framework 2生成(不应该是第三方库)

我使用哈希来减少内存占用和比较性能

8 个答案:

答案 0 :(得分:9)

如果碰撞不是什么大问题,你可以拿出每个文件的第一个字母。或者您可以使用文本的长度或文本的字符串。

答案 1 :(得分:7)

Paul Hsieh有一个体面,简单,快速,32位SuperFastHash,比大多数现有的哈希函数表现更好,更容易理解/实现,听起来更符合您的标准。

答案 2 :(得分:4)

FNV hash是一种众所周知的快速哈希算法。它不是加密安全的,但听起来你不需要安全的哈希。

答案 3 :(得分:1)

非常快速的检查是获取文本的长度并将其与前4个字节进行异或,并将其用作散列。如果这足够好,它会非常快,因为它与文件的字节数无关。

答案 4 :(得分:0)

如果您受限于框架中存在的算法

MD5是否足够小(16字节)?

较少的CPU消耗和较小的占用空间通常是互斥的。

http://en.wikipedia.org/wiki/Time-space_tradeoff

答案 5 :(得分:0)

答案 6 :(得分:0)

哈希需要持续多长时间? GetHashCode()很容易访问,给出一个小的响应(4个字节),这应该很好(重新最小化冲突)超过20个字符串。

但是,GetHashCode()不应该持久存储到数据库中 - 但它适用于内存中的比较。请注意,算法可能会在框架之间发生变化(并且在1.1和2.0之间)。

这样做的另一个好处是使用琐事 - 只需使用Dictionary<string,Something>,它将为您处理所有哈希等。

答案 7 :(得分:0)

我对myselve提出了同样的要求,我实施了xxHashSharp。只需确保您使用适当的库(x32 vs x64)。它也可以在c#here

之外使用