码迷,mamicode.com
首页 > 其他好文 > 详细

字符串哈希小结(BKDR,RK)

时间:2019-02-14 00:18:38      阅读:179      评论:0      收藏:0      [点我收藏+]

标签:math   处理   for   mat   class   冲突   推出   前言   hash   

前言

A:这么简单的东西,怎么现在才学??

B:别提了,还不是因为菜o(╥﹏╥)o

A:那打算讲些什么东西

B:\(BKDRHash\)\(Rabin-karp\)以及简单应用

简洁

所谓字符串哈希:其实就是把字符串映射成数值储存下来分别直接比较

\(BKDRHash\):程序便于记忆和使用,冲突概率较低,在各大书籍和资料中测试效果位居前列

\(Rabin-karp\):便于提取字符串子串

做法

\(BKDRHash\):把字符串当成seed进制数来处理

const int seed=31;
inline int BKDRhash(){
    int H(0),len(strlen(s));
    for(int i=0;i<len;++i)
        H=(H*seed+s[i])&0xFFFFFFF;
    return H;
}

\(BKDRHash\)\(h[i]=(s[0]×p^{i}+s[1]×p^{i-1}+...+s[i]×p^0(mod ~x)\),手玩能推出\(h[i][j]=h[j]-h[i-1]×p^{j-i+1}(mod ~x)\)

inline int RK(){
    int len(strlen(s));
    for(int i=0;i<len;++i)
        H[i]=(H[i-1]*p+s[i])%x;
    return H[len-1];
}

经典应用

挖坑待填

字符串哈希小结(BKDR,RK)

标签:math   处理   for   mat   class   冲突   推出   前言   hash   

原文地址:https://www.cnblogs.com/y2823774827y/p/10372330.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!