• 字符串RK-Hash


    此文转自https://www.cnblogs.com/travelller/p/8318584.html

    RK-hash 字符串

     1.基本思想

    hash基本思想:将Object通过函数转化成数值,则可以通过比较hash值来比较Object是否相等。。

    RK-hash基本思想:将字符串转化成数值。

    2.具体做法

    设有一个字符串S,长度|S|=n,该字符串的字符集的元素个数小于等于d,则字符串S可以看成一个n位的d进制数。

    将S的前i位前缀S[0...i]?映射为整数的递推公式为:hash[i]=(hash[i-1]*p+idx(s[i]))%mod

    多项式计算:hash[i] = S[i] + d * (S[i-1] + d * (S[i-2] + …+ d * (S[1] + d*S[0])…))

    将S的子串S[l...r]映射为整数的公式为:hash[l...r]=(hash[r]-hash[l-1]*(p^(r-1+1)))%mod

    3.冲突——不同的字符串映射到同一个整数

    虽然是小概率事件,但是有可能出现冲突,解决的方法是:将d选一个较大素数(131),mod选一个大素数(1e9+7、1e9+9=1000000009)

    Double hash 也是降低冲突概率的一个方式。即:取两个mod值(如 :1e9+7、1e9+9)分别计算hash值hash1、hash2,用pair<hash1 , hash2>代表一个串。

    4.hash+二分

    hash字符串常与二分连用(如本题),但是注意!二分的不是hash(混乱不具备单调性),而是字符串的长度。本题是对字符串长度进行二分,判断是否hash值相等。若相等,继续向右判断所求子串是否可以更长,若不相等,向左判断直至hash相等。

  • 相关阅读:
    回顾C#3.0新特性(3)
    第五周作业
    第六周基础作业
    第三周syh
    基础作业
    第七周作业
    2019年春季学期第四周作业
    第八周作业
    .Net 反射
    C#中SqlParameter
  • 原文地址:https://www.cnblogs.com/sineagle/p/8480892.html
Copyright © 2020-2023  润新知