扩展阅读
 
当前位置:  编程语言>c/c++

cityhash 32位,64位和128位介绍及函数列表

 
    发布时间:2013-10-19  


    本文导语:  为了满足大数量的需求,减少碰撞,我们一般需要给出一个32位,64位或者128位的哈希,Google发布了一个叫做CityHash的方法,能比较快的生成一个32位,64位或者128位的字符串签名,效率在64位cpu上得到了特殊优化,在工...

   为了满足大数量的需求,减少碰撞,我们一般需要给出一个32位,64位或者128位的哈希,Google发布了一个叫做CityHash的方法,能比较快的生成一个32位,64位或者128位的字符串签名,效率在64位cpu上得到了特殊优化,在工业级应用中可以使用该哈希算法,代码公布在google code上。

   Google 一直在根据其数据中心常用的 CPU 对算法进行优化,结果发现对大多数个人计算机笔记本同样有效益。尤其是在 64 位寄存器、指令集级的并行,以及快速非对其内存存取方面。  该算法的开发受到了前人在散列算法方面的巨大启发,尤其是 Austin Appleby的 MurmurHash。但 CityHash 的主要优点是大部分步骤包含了至少两步独立的数学运算。现代 CPU 通常能从这种代码获得最佳性能。  但 CityHash 也有其缺点:代码较同类流行算法复杂。Google 希望为速度而不是为了简单而优化,因此没有照顾较短输入的特例。

  总体而言,CityHash64 与 CityHash128 是解决经典问题的全新算法。在实际应用中,Google 预计 CityHash64 在速度方面至少能提高 30%,并有望提高多达两倍。此外,这些算法的统计特性也很完备。

  cityhash提供的函数非常简单,具体包括以下函数:

// Hash function for a byte array.
uint64 CityHash64(const char *buf, size_t len);
// Hash function for a byte array.  For convenience, a 64-bit seed is also
// hashed into the result.
uint64 CityHash64WithSeed(const char *buf, size_t len, uint64 seed);
// Hash function for a byte array.  For convenience, two seeds are also
// hashed into the result.
uint64 CityHash64WithSeeds(const char *buf, size_t len,
                           uint64 seed0, uint64 seed1);
// Hash function for a byte array.
uint128 CityHash128(const char *s, size_t len);
// Hash function for a byte array.  For convenience, a 128-bit seed is also
// hashed into the result.
uint128 CityHash128WithSeed(const char *s, size_t len, uint128 seed);
// Hash function for a byte array.  Most useful in 32-bit binaries.
uint32 CityHash32(const char *buf, size_t len);



    您可能感兴趣的文章:

  • 本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载,整理或搜集自网络.欢迎任何形式的转载,转载请注明出处.
    转载请注明:文章转载自:[169IT-IT技术资讯]
    本文标题:cityhash 32位,64位和128位介绍及函数列表
相关文章推荐:


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3