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

Posted y2823774827y

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了字符串哈希小结(BKDR,RK)相关的知识,希望对你有一定的参考价值。

前言

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)的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode 1316. Distinct Echo Substrings (RK哈希)

JavaScript笔试题(js高级代码片段)

[RK3288][Android6.0] Display驱动初始化流程小结

[RK3288][Android6.0] 关于uboot中logo相关知识点小结

下文中的哈希片段指的是啥?

字符串模糊匹配