输入参数都是字符串。

6种hash函数的实现以及使用方式:

template<class T>
size_t BKDRHash(const T * str) // 该效率最高
{
    register size_t hash = 0;
    while (size_t ch = (size_t)*str++)
    {
        hash = hash * 131 + ch;   // 也可以乘以31、131、1313、13131、131313..         
    }
    return hash;
}
template<class T>
size_t SDBMHash(const T *str)
{
    register size_t hash = 0;
    while (size_t ch = (size_t)*str++)
    {
        hash = 65599 * hash + ch;
        //hash = (size_t)ch + (hash << 6) + (hash << 16) - hash;  
    }
    return hash;
}
template<class T>
size_t RSHash(const T *str)
{
    register size_t hash = 0;
    size_t magic = 63689;
    while (size_t ch = (size_t)*str++)
    {
        hash = hash * magic + ch;
        magic *= 378551;
    }
    return hash;
}
template<class T>
size_t APHash(const T *str)
{
    register size_t hash = 0;
    size_t ch;
    for (long i = 0; ch = (size_t)*str++; i++)
    {
        if ((i & 1) == 0)
        {
            hash ^= ((hash << 7) ^ ch ^ (hash >> 3));
        }
        else
        {
            hash ^= (~((hash << 11) ^ ch ^ (hash >> 5)));
        }
    }
    return hash;
}
template<class T>
size_t JSHash(const T *str)
{
    if (!*str)        // 这是由本人添加,以保证空字符串返回哈希值0  
        return 0;
    register size_t hash = 1315423911;
    while (size_t ch = (size_t)*str++)
    {
        hash ^= ((hash << 5) + ch + (hash >> 2));
    }
    return hash;
}
template<class T>
size_t DEKHash(const T* str)
{
    if (!*str)        // 以保证空字符串返回哈希值0  
        return 0;
    register size_t hash = 1315423911;
    while (size_t ch = (size_t)*str++)
    {
        hash = ((hash << 5) ^ (hash >> 27)) ^ ch;
    }
    return hash;
}

//6个仿函数分别进行6种字符串算法的调用
template<class T>
struct _HashFunc1
{
    size_t operator()(const T& str)
    {
        return BKDRHash(str.c_str());
    }
};
template<class T>
struct _HashFunc2
{
    size_t operator()(const T& str)
    {
        return SDBMHash(str.c_str());
    }
}; 
template<class T>
struct _HashFunc3
{
    size_t operator()(const T& str)
    {
        return RSHash(str.c_str());
    }
}; 
template<class T>
struct _HashFunc4
{
    size_t operator()(const T& str)
    {
        return APHash(str.c_str());
    }
}; 
template<class T>
struct _HashFunc5
{
    size_t operator()(const T& str)
    {
        return JSHash(str.c_str());
    }
};
template<class T>
struct _HashFunc6
{
    size_t operator()(const T& str)
    {
        return DEKHash(str.c_str());
    }
};

hash()函数的实现相关推荐

  1. Hash函数的安全性

    我们为了保证消息的完整性,引进了散列函数,那么散列函数会对安全正造成什么影响呢?这是需要好好研究一番的问题. 三个概念: 1.如果y<>x,且h(x)=h(y),则称为碰撞. 2.对于给定 ...

  2. Hash 函数资源链接汇总

    Hash 链接: [1]General Purpose Hash Function Algorithms:http://www.partow.net/programming/hashfunctions ...

  3. HashMap中的hash函数

    在写一个HashSet时候有个需求,是判断HashSet中是否已经存在对象,存在则取出,不存在则add添加.HashSet也是通过HashMap实现,只用了HashMap的key,value都存储一个 ...

  4. 文本去重之MinHash算法——就是多个hash函数对items计算特征值,然后取最小的计算相似度...

    来源:http://my.oschina.net/pathenon/blog/65210 1.概述 跟SimHash一样,MinHash也是LSH的一种,可以用来快速估算两个集合的相似度.MinHas ...

  5. Cuckoo hash算法分析——其根本思想和bloom filter一致 增加hash函数来解决碰撞 节省了空间但代价是查找次数增加...

    基本思想: cuckoo hash是一种解决hash冲突的方法,其目的是使用简单的hash 函数来提高hash table的利用率,同时保证O(1)的查询时间 基本思想是使用2个hash函数来处理碰撞 ...

  6. Hash函数及其应用

    本文部分内容摘自网络,参考资料链接会在文后给出,在此感谢原作者的分享. 计算理论中,没有Hash函数的说法,只有单向函数的说法.所谓的单向函数,是一个复杂的定义,大家可以去看计算理论或者密码学方面的数 ...

  7. 常见的一些 Hash 函数

    Hash的主要原理就是把大范围映射到小范围:所以,你输入的实际值的个数必须和小范围相当或者比它更小.不然冲突就会很多. 不同的应用对Hash函数有着不同的要求:比如,用于加密的Hash函数主要考虑它和 ...

  8. 认知理论与技术(hash函数,SHA,MD

    概述: 认证是个过程,通过这个过程一个实体向另一个实体证明某种声称的属性 认证参数: "口令"相当于平时登录系统时输入的密码. "密钥"相当于公钥密码体制中的私 ...

  9. 密码学基础知识(六)Hash函数与消息认证

    Hash函数和消息认证 先说Hash 哈希函数,可以将任意长度的消息压缩为某一固定长度的消息摘要函数.一句话,Hash简直了. 当然有逆天的一面就有大缺点,过程不可逆.傻了吧,哈哈. Hash的性质: ...

  10. hash函数查找和ASL计算

    Hash表的"查找成功的ASL"和"查找不成功的ASL" ASL指的是 平均查找时间 关键字序列:(7.8.30.11.18.9.14) 散列函数:  H(Ke ...

最新文章

  1. 【xamarin + MvvmCross 从零开始】六、模拟器的配置与连接
  2. django forms 错误处理
  3. Flex布局新写法兼容写法详解
  4. 精读《谈谈 Web Workers》
  5. 更极速:EdgeRoutine边缘程序
  6. MFS分布式存储三:备份与恢复
  7. 边框颜色为 tintColor 的 UIButton
  8. mysql 1067 win7,大师练习win7系统无法启动MySQL服务错误1067的设置教程
  9. 为什么中国没有类似于windows的操作系统?
  10. python计数循环,python - Python中的密码求解器循环计数 - SO中文参考 - www.soinside.com...
  11. SQLLoader2(导入EXCEL或csv格式的文件)
  12. php设置上传文件浏览按钮的样式和文字,文件上传按钮的用户自定义样式的实现...
  13. 什么是云计算机技术,云计算的核心技术是什么
  14. android—使用Expandable实现三级树形结构
  15. LFM信号脉冲压缩仿真
  16. 如何把手机证件照压缩到15KB?手机压缩图片方法
  17. 360浏览器,打开一个,为什么后台有多个360进程?
  18. androbench跑分性能排查
  19. 基于STM32的照片查看器课程报告
  20. MySQL拷贝表结构、表数据总结

热门文章

  1. 使用postman测试接口
  2. 阿里云centos 安装和配置 DokuWiki
  3. 《游戏视频主播手册》——2.2 哪些人适合做游戏主播
  4. 真格量化-50ETF期权波动率策略
  5. backtrader数据基础
  6. golang学习之旅(2)- go的数据基本数据类型及变量定义方式
  7. 电脑老是弹出vrvedp_m_出现三个可疑进程vrvedp_m.exe vrvrf_c.exe vrvsafec.exe
  8. Python html 代码转成图片、PDF
  9. 成本预算的四个步骤_全网推广步骤有哪些?
  10. python网络攻击代码_Python-python网络编程写arp攻击代码