zoukankan      html  css  js  c++  java
  • 总结——字符串 RKHash

    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相等。

  • 相关阅读:
    课堂练习-电梯调度
    团队开发项目———来用————用户调研报告
    购书思想课堂作业4.14
    针对《来用》的NABC分析
    《梦断代码》读书笔记3
    《梦断代码》读书笔记2
    《大道至简》阅读笔记2
    《大道至简》阅读笔记1
    课堂练习之找出所有的“1”
    典型用户与场景分析
  • 原文地址:https://www.cnblogs.com/travelller/p/8318584.html
Copyright © 2011-2022 走看看